k8s Pod 驱逐时间设置

94 篇文章 9 订阅
31 篇文章 3 订阅


1. 修改 kube-apiserver.yaml

vi /etc/kubernetes/manifests/kube-apiserver.yaml

......
spec:
  containers:
  - command:
    - kube-apiserver
    - --advertise-address=192.168.10.65
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://127.0.0.1:2379
    - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
    - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
    - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
    - --requestheader-allowed-names=front-proxy-client
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --secure-port=6443
    - --service-account-issuer=https://kubernetes.default.svc.cluster.local
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
    - --service-cluster-ip-range=10.96.0.0/12
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    - --feature-gates=RemoveSelfLink=false
    # 添加如下两行配置
    - --default-not-ready-toleration-seconds=40
    - --default-unreachable-toleration-seconds=20
......

重启 kubelet

systemctl daemon-reload
systemctl restart kubelet

注意:修改的参数只对之后创建的 pod 生效,旧的 pod 不生效

2. 测试

[root@master ~]#kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   46d   v1.22.5
node01   Ready    <none>                 46d   v1.22.5
node02   Ready    <none>                 46d   v1.22.5
[root@master ~]#kubectl get pods -o wide -n test
NAME                         READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
open-test-59fd6fdfc4-2tmlj   1/1     Running   0          27m   10.244.2.78   node02   <none>           <none>
open-test-59fd6fdfc4-6ft4b   1/1     Running   0          26m   10.244.0.64   master   <none>           <none>
open-test-59fd6fdfc4-drcph   1/1     Running   0          27m   10.244.2.81   node02   <none>           <none>
open-test-59fd6fdfc4-k85jj   1/1     Running   0          26m   10.244.2.82   node02   <none>           <none>
open-test-59fd6fdfc4-snk8l   1/1     Running   0          27m   10.244.2.79   node02   <none>           <none>
open-test-59fd6fdfc4-t2lk5   1/1     Running   0          27m   10.244.0.60   master   <none>           <none>
open-test-59fd6fdfc4-vz4tb   1/1     Running   0          27m   10.244.2.80   node02   <none>           <none>
open-test-59fd6fdfc4-w2dq7   1/1     Running   0          27m   10.244.0.61   master   <none>           <none>
open-test-59fd6fdfc4-xlkdm   1/1     Running   0          26m   10.244.0.63   master   <none>           <none>
open-test-59fd6fdfc4-xt5b8   1/1     Running   0          27m   10.244.0.62   master   <none>           <none>

目前服务在 master 和 node02 上,关停 node02,观察多长时间 node02 节点 NotReady,多长时间 pod 开始漂移到其他节点

# 10.37
[root@master ~]#kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   46d   v1.22.5
node01   Ready    <none>                 46d   v1.22.5
node02   Ready    <none>                 46d   v1.22.5
# 10.37 我秒表测试大概 40s 左右
[root@master ~]#kubectl get nodes
NAME     STATUS     ROLES                  AGE   VERSION
master   Ready      control-plane,master   46d   v1.22.5
node01   Ready      <none>                 46d   v1.22.5
node02   NotReady   <none>                 46d   v1.22.5
# 10.38 一分钟左右 pod 开始漂移
[root@master ~]#kubectl get pods -o wide -n test
NAME                         READY   STATUS        RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
open-test-59fd6fdfc4-2c52v   1/1     Running       0          12s   10.244.1.63   node01   <none>           <none>
open-test-59fd6fdfc4-2tmlj   1/1     Terminating   0          35m   10.244.2.78   node02   <none>           <none>
open-test-59fd6fdfc4-6ft4b   1/1     Running       0          33m   10.244.0.64   master   <none>           <none>
open-test-59fd6fdfc4-bc2bb   1/1     Running       0          12s   10.244.1.67   node01   <none>           <none>
open-test-59fd6fdfc4-drcph   1/1     Terminating   0          35m   10.244.2.81   node02   <none>           <none>
open-test-59fd6fdfc4-k85jj   1/1     Terminating   0          33m   10.244.2.82   node02   <none>           <none>
open-test-59fd6fdfc4-mnz6v   1/1     Running       0          12s   10.244.1.64   node01   <none>           <none>
open-test-59fd6fdfc4-snk8l   1/1     Terminating   0          35m   10.244.2.79   node02   <none>           <none>
open-test-59fd6fdfc4-srxx5   1/1     Running       0          12s   10.244.1.65   node01   <none>           <none>
open-test-59fd6fdfc4-t2lk5   1/1     Running       0          35m   10.244.0.60   master   <none>           <none>
open-test-59fd6fdfc4-v4ntz   1/1     Running       0          12s   10.244.1.66   node01   <none>           <none>
open-test-59fd6fdfc4-vz4tb   1/1     Terminating   0          35m   10.244.2.80   node02   <none>           <none>
open-test-59fd6fdfc4-w2dq7   1/1     Running       0          35m   10.244.0.61   master   <none>           <none>
open-test-59fd6fdfc4-xlkdm   1/1     Running       0          33m   10.244.0.63   master   <none>           <none>
open-test-59fd6fdfc4-xt5b8   1/1     Running       0          35m   10.244.0.62   master   <none>           <none>

官方默认的参数:节点大概 1m 会变成 NotReady,5m 左右开始 Pod 发生漂移,修改上述参数后速度明显变快。需要注意的是节点 NotReady 时间,Pod 漂移时间和集群规模,网络延迟等都有影响,不能一概而论。

3. 修改 Pod 文件添加容忍设置

toleration-custom.yaml

spec:
  template:
    spec:
      tolerations:
      - effect: NoExecute
        key: node.kubernetes.io/not-ready
        operator: Exists
        tolerationSeconds: 40
      - effect: NoExecute
        key: node.kubernetes.io/unreachable
        operator: Exists
        tolerationSeconds: 20

使用 patch 的方式添加到指定 deployment 文件

kubectl patch deploy nginx-check --patch "$(cat  toleration-custom.yaml)"

这是只对需要的 pod 应用修改参数,kube-apiserver.yaml 是全局设置


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Kubernetes中,硬盘到达一定使用量后会驱逐Pod,以避免磁盘空间不足的情况。默认情况下,硬盘使用量达到80%时,Kubernetes会开始清理不需要的数据以释放磁盘空间。如果硬盘使用量达到85%,Kubernetes会开始驱逐Pod。如果需要更改这些默认配置,可以通过修改kubelet的启动参数来实现。 以下是修改kubelet启动参数的步骤: 1. 编辑kubelet的启动配置文件,例如: ``` vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ``` 2. 找到“ExecStart=/usr/bin/kubelet”这一行,添加需要更改的参数,例如: ``` ExecStart=/usr/bin/kubelet --eviction-hard="memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<10%" --eviction-soft="memory.available<200Mi,nodefs.available<20%,nodefs.inodesFree<20%" --eviction-soft-grace-period=1m --eviction-pressure-transition-period=5m ``` 在上述示例中,我们添加了4个参数: - `--eviction-hard`:定义硬阈值,即当内存可用空间小于100Mi或节点文件系统可用空间小于10%或节点文件系统可用inode数量小于10%时,将立即驱逐Pod。 - `--eviction-soft`:定义软阈值,即当内存可用空间小于200Mi或节点文件系统可用空间小于20%或节点文件系统可用inode数量小于20%时,将开始驱逐Pod。 - `--eviction-soft-grace-period`:定义软阈值容忍时间,即当软阈值条件满足后,Kubernetes将等待1分钟后再开始驱逐Pod。 - `--eviction-pressure-transition-period`:定义硬阈值到软阈值的过渡时间,即当内存可用空间小于100Mi或节点文件系统可用空间小于10%或节点文件系统可用inode数量小于10%时,Kubernetes将等待5分钟后再开始驱逐Pod。 3. 修改完成后,保存文件并重新加载kubelet的配置文件: ``` systemctl daemon-reload ``` 4. 重启kubelet服务: ``` systemctl restart kubelet ``` 修改完成后,Kubernetes将根据新的配置来判断何时开始驱逐Pod,从而避免磁盘空间不足的情况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值