限制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数目已经超额了。

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读