1 node(s) had taint {node.kubernetes.io/disk-pressure: }, that the pod didn‘t tolerate

参考:

         https://kubernetes.io/zh/docs/tasks/administer-cluster/out-of-resource/

        https://kubernetes.io/zh/docs/concepts/scheduling-eviction/taint-and-toleration/

        https://www.jianshu.com/p/29bebed74eda

       

基于污点的驱逐 

        

当某种条件为真时,节点控制器会自动给节点添加一个污点。当前内置的污点包括

  • node.kubernetes.io/not-ready:节点未准备好。这相当于节点状态 Ready 的值为 "False"。
  • node.kubernetes.io/unreachable:节点控制器访问不到节点. 这相当于节点状态 Ready 的值为 "Unknown"。
  • node.kubernetes.io/memory-pressure:节点存在内存压力。
  • node.kubernetes.io/disk-pressure:节点存在磁盘压力。
  • node.kubernetes.io/pid-pressure: 节点的 PID 压力。
  • node.kubernetes.io/network-unavailable:节点网络不可用。
  • node.kubernetes.io/unschedulable: 节点不可调度。
  • node.cloudprovider.kubernetes.io/uninitialized:如果 kubelet 启动时指定了一个 "外部" 云平台驱动, 它将给当前节点添加一个污点将其标志为不可用。在 cloud-controller-manager 的一个控制器初始化这个节点后,kubelet 将删除这个污点。

解决方法:

        node上的kubelet负责采集资源占用数据,并和预先设置的threshold值进行比较,如果超过threshold值,kubelet会杀掉一些Pod来回收相关资源。

使用  systemctl status kubelet查看kubelet状态

 systemctl status kubelet

得知   Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf

 systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
   Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/kubelet.service.d
           └─10-kubeadm.conf
   Active: active (running) since Tue 2021-07-27 20:43:57 CST; 2h 5min ago
     Docs: https://kubernetes.io/docs/home/
 Main PID: 19711 (kubelet)
    Tasks: 24 (limit: 4915)
   CGroup: /system.slice/kubelet.service
           └─19711 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubele

所以修改10-kubeadm.conf

vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

修改配置文件增加传参数,添加此配置项 --eviction-hard=nodefs.available<3%

如下所示:

# Note: This dropin only works with kubeadm and kubelet v1.11+
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf ----eviction-hard=nodefs.available<3%"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/default/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS

重启kubelet,验证修改值是否生效。

bxx@bxx1050ti:~$ systemctl daemon-reload
bxx@bxx1050ti:~$ systemctl  restart kubelet

   

原理补充:

配置资源不足时的处理方式

        使用 kubelet 配置资源不足时的处理方式。

驱逐阈值

kubelet支持指定驱逐阈值,用于触发 kubelet 回收资源。

每个阈值形式如下:

[eviction-signal][operator][quantity]

  • 合法的 eviction-signal 标志如上所示。
  • operator 是所需的关系运算符,例如 <
  • quantity 是驱逐阈值值标志,例如 1Gi。合法的标志必须匹配 Kubernetes 使用的数量表示。 驱逐阈值也可以使用 % 标记表示百分比。

举例说明,如果一个节点有 10Gi 内存,希望在可用内存下降到 1Gi 以下时引起驱逐操作, 则驱逐阈值可以使用下面任意一种方式指定(但不是两者同时)。

  • memory.available<10%
  • memory.available<1Gi

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值