前言:部署之前,我们需要先了解Lxcfs 是什么,使用它可以达到什么样的效果。
背景:我们知道在k8s 的pod 内,使用top/free/df等命令,展示的状态信息是从/proc目录中的相关文件里读取出来的,这些文件默认是读取pod所在节点主机对应文件的数据。
需求:在pod 内执行top/free/df等命令的时候,获取到的是pod 纬度的状态数据,而不是整个宿主机的状态。
LXCFS:FUSE filesystem for LXC 是一个常驻服务,它启动以后会在指定目录中自行维护与上面列出的/proc目录中的文件同名的文件,容器从lxcfs维护的/proc文件中读取数据时,得到的是容器的状态数据,而不是整个宿主机的状态。
本文介绍了如何在TKE集群中使用lxcfs admission webhook方案来启用lxcfs支持(Initializers特性在K8s 1.14废弃,不再推荐使用原来的initializer方案)
TKE集群:1.14.3
node节点OS:centos 7.6
集群内所有CentOS节点安装fuse-libs:
yum install -y fuse-libs
否则会报错:/usr/local/bin/lxcfs: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory
wget https://lxcfs-1254415755.cos.ap-shanghai.myqcloud.com/lxcfs.tar.gz
tar zxvf lxcfs.tar.gz
cd lxcfs-admission-webhook
kubectl create ns lxcfs #创建lxcfs 这个命名空间,接下来的资源就部署在这个命名空间内
kubectl -n lxcfs apply -f deployment/lxcfs-daemonset.yaml
sh deployment/install.sh
执行kubectl get po -n lxcfs
,确认所有pod都处于Running状态
[root@VM_20_32_centos lxcfs-admission-webhook]# kubectl get pod -n lxcfs
NAME READY STATUS RESTARTS AGE
lxcfs-admission-webhook-deployment-dbddfd659-zr4xk 1/1 Running 0 2m54s
lxcfs-mqv5l 1/1 Running 0 3m8s
lxcfs-pqlqh 1/1 Running 0 3m8s
对于要使用 lxcfs 的namespace,使用如下命令启用lxcfs admission webhook的自动注入(以default为例):
kubectl label namespace default lxcfs-admission-webhook=enabled
kubectl apply -f deployment/web.yaml
查看该应用的资源限制
待测试应用pod启动后,执行如下命令,确认内存为256M(memory limit),而不是所在节点的总内存:
[root@VM_20_32_centos lxcfs-admission-webhook]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web-7c5464f6b9-6ggv7 1/1 Running 0 118s
web-7c5464f6b9-c6792 1/1 Running 0 118s
[root@VM_20_32_centos lxcfs-admission-webhook]# kubectl exec web-7c5464f6b9-6ggv7 -- free -m
total used free shared buffers cached
Mem: 256 2 253 0 0 0
-/+ buffers/cache: 2 253
Swap: 0 0 0
[root@VM_20_32_centos lxcfs-admission-webhook]# free -m
total used free shared buff/cache available
Mem: 7591 278 5248 1 2064 6994
Swap: 0 0 0
如果pod设置了cpu limit,看到cpu数量为cpu limit值向上取整:
[root@VM_20_32_centos lxcfs-admission-webhook]# kubectl exec web-7c5464f6b9-6ggv7 -- grep processor /proc/cpuinfo | wc -l
1
[root@VM_20_32_centos lxcfs-admission-webhook]# grep processor /proc/cpuinfo | wc -l
2
验证成功
lxcfs daemonset 的 pod 不是running 状态,状态为 CrashLoopBackoff 如图:
排查:
1. 确认异常pod 是落在哪个节点上
2. 查看pod 日志,确认下对应节点主机fuse-libs 组件是否安装
2.systemctl status lxcfs 看下状态,如果状态是开启的,先关闭lxcfs 服务
3.先清空对应节点主机/var/lib/lxcfs/ 下的文件,然后delete 异常状态的pod ,触发pod 重建,再观察下
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有