限制worker节点最多能运行的pod数
本文的视频演示
默认情况下,每个节点只能运行110个pod,如果想限制每个节点最多只能运行N个pod的话,那么该如何设置呢?
本实验环境共两个节点,如下
[root@vms71 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms71.rhce.cc Ready control-plane 11d v1.26.1
vms72.rhce.cc Ready worker 11d v1.26.1
[root@vms71 ~]#
vms72.rhce.cc这个节点上默认可以运行110个pod,如下显示。
[root@vms71 ~]# kubectl get nodes vms72.rhce.cc -o yaml | egrep 'capacity|allocatable' -A6
allocatable:
cpu: "2"
ephemeral-storage: "144884367121"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 3927772Ki
pods: "110"
capacity:
cpu: "2"
ephemeral-storage: 153525Mi
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 4030172Ki
pods: "110"
[root@vms71 ~]#
查看vms72.rhce.cc上运行的pod总数。
[root@vms71 ~]# kubectl get pods -o wide -A | awk '$8=="vms72.rhce.cc"{printf "%-40s %-10s %-10s %-10s\n" , $2,$3,$4,$8}'
nfs-client-provisioner-55fc75ddf9-gkq5f 1/1 Running vms72.rhce.cc
calico-kube-controllers-79bfdd4898-lfrnm 1/1 Running vms72.rhce.cc
calico-node-brvft 1/1 Running vms72.rhce.cc
kube-proxy-rv2pq 1/1 Running vms72.rhce.cc
metrics-server-797ddfb766-f9kr2 1/1 Running vms72.rhce.cc
[root@vms71 ~]#
这里能看到一共运行了5个pod。下面设置vms72.rhce.cc最多只能运行7个pod。
编辑文件/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
增加如下行
Environment="KUBELET_NODE_MAX_PODS=--max-pods=7"
在最后一行的ExecStart后面把该变量添加过去。
ExecStart=/usr/bin/kubelet ... $KUBELET_NODE_MAX_PODS
保存退出之后重启kubelet。
[root@vms72 ~]# systemctl daemon-reload ; systemctl restart kubelet
[root@vms72 ~]#
再次查看vms72.rhce.cc上可以运行的pod数。
[root@vms71 ~]# kubectl get nodes vms72.rhce.cc -o yaml | egrep 'capacity|allocatable' -A6
allocatable:
cpu: "2"
ephemeral-storage: "144884367121"
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 3927772Ki
pods: "7"
capacity:
cpu: "2"
ephemeral-storage: 153525Mi
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 4030172Ki
pods: "7"
[root@vms71 ~]#
这里可以看到vms72.rhce.cc上最多只能运行7个pod了。
创建pod1.yaml,内容如下
[root@vms71 ~]# cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
nodeName: vms72.rhce.cc
terminationGracePeriodSeconds: 0
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: pod1
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: OnFailure
status: {}
[root@vms71 ~]#
这里通过nodeName确保pod能运行在vms72.rhce.cc上。
分别创建pod1,pod2,pod3,命令如下。
[root@vms71 ~]# kubectl apply -f pod1.yaml
pod/pod1 created
[root@vms71 ~]# sed 's/pod1/pod2/' pod1.yaml | kubectl apply -f -
pod/pod2 created
[root@vms71 ~]# sed 's/pod1/pod3/' pod1.yaml | kubectl apply -f -
pod/pod3 created
[root@vms71 ~]#
原来vms72.rhce.cc上有5个pod,现在又创建了3个,所以一共有8个pod了。
再次查看vms72.rhce.cc上运行的pod。
[root@vms71 ~]# kubectl get pods -o wide -A | awk '$8=="vms72.rhce.cc"{printf "%-40s %-10s %-10s %-10s\n" , $2,$3,$4,$8}'
pod1 1/1 Running vms72.rhce.cc
pod2 1/1 Running vms72.rhce.cc
pod3 0/1 OutOfpods vms72.rhce.cc
nfs-client-provisioner-55fc75ddf9-gkq5f 1/1 Running vms72.rhce.cc
calico-kube-controllers-79bfdd4898-lfrnm 1/1 Running vms72.rhce.cc
calico-node-brvft 1/1 Running vms72.rhce.cc
kube-proxy-rv2pq 1/1 Running vms72.rhce.cc
metrics-server-797ddfb766-f9kr2 1/1 Running vms72.rhce.cc
[root@vms71 ~]#
可以看到pod3并没有运行起来,状态为OutOfpods,因为vms72上的pod数目已经超额了。