如何减小k8s node节点宕机后pod的等待调度时间?

在维护公司k8s集群时发现了一个问题:当某台node节点挂掉后,上面的pod要过5~6分钟才会开始往其他节点调度,这个等待时间太长了,如何减小呢(k8s版本:v1.21.0)?

经过调研发现,k8s 1.12版本之后,k8s使用default-not-ready-toleration-seconds和default-unreachable-toleration-seconds两个参数来控制节点宕机后pod的等待调度时间,可以通过修改此配置来减小等待时间。

  1. 进入master节点 修改kubelet.service配置(可选)

    vi /var/lib/kubelet/config.yaml
    #将config.yaml中evictionPressureTransitionPeriod的值改为20s
    #此参数含义是:当节点压力过大,持续超过20s,就驱逐此节点上的部分pod
    evictionPressureTransitionPeriod: 20s
    
  2. 修改kube-apiserver.service配置

    vi /etc/systemd/system/kube-apiserver.service
    
    #在[Service]ExecStart= 下新增两行配置  
    #这里两个参数意思是:节点notReady或者unreachable后20s还未恢复的话,就把此节点上的pod调度到其他节点
      --default-not-ready-toleration-seconds=20 \
      --default-unreachable-toleration-seconds=20 \
    
  3. 修改kube-controller-manager.service配置

    vi /etc/systemd/system/kube-controller-manager.service
    #在[Service]ExecStart= 下新增两行配置
    #这两个参数的意思是:
    #1.控制器每5秒检查一次节点状态  2.在节点被认为是未响应后,等待15秒再将其标记为不可用
      --node-monitor-period=5s \
      --node-monitor-grace-period=15s \
    
  4. 重新加载系统配置

    systemctl daemon-reload
    
  5. 重启三个服务

    systemctl restart kubelet.service
    systemctl restart kube-apiserver.service
    systemctl restart kube-controller-manager.service
    #查看服务状态
    systemctl status kubelet.service   #如果状态为Active: active (running) 表示重启成功 
    systemctl status kube-apiserver.service
    systemctl status kube-controller-manager.service
    
  6. 注意:上述配置只对新创建的pod生效,所以需要手动重启所有的pod来应用此配置

    #快速重启某个名空间下的所有pod,可以用这个命令  kubectl delete pod -n 【namespace】 --all (生产环境不要随便搞)
    #比如重启所有pod
    kubectl delete pod -A --all
    

不知道还没有其他更好的办法,欢迎讨论

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值