新集群容器突然全挂了,一看是node节点无法登录,只有一台还在苟颜残喘,内存和cpu已经到达极限。为避免出现类似情况,需要为系统和kubelet保留一定的cpu和内存资源。
处理思路如下
1、无法登录hang死的机器先关机重启
2、当前节点都配置污点,这样重启以后节点也不会接受任何调度
3、重启后配置kubelet参数
4、取消污点
一、节点资源限制
1.1、配置污点
kubectl taint nodes k8s-node-c31 memory=NotReady:NoSchedule-
kubectl taint nodes k8s-node-c32 memory=NotReady:NoSchedule-
1.2、查看污点
# 查看所有节点的污点
kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints
# 或者查看特定节点的污点
kubectl describe node k8s-node-c31 | grep -A5 Taints
1.3、kubelet配置资源保留参数
/var/lib/kubelet/config.yaml
添加到最尾部
kubeReserved:
memory: "1Gi"
cpu: "500m"
systemReserved:
memory: "1Gi"
cpu: "500m"
evictionHard:
memory.available: "500Mi"
nodefs.available: "10%"
添加后重启服务systemctl restart kubelet
1.4、节点恢复后移除污点
kubectl taint nodes k8s-node-c31 memory=NotReady:NoSchedule-
kubectl taint nodes k8s-node-c32 memory=NotReady:NoSchedule-
最终确认服务的启动状态,节点的调度也会随之变均衡
如果无法使用kubectl top nodes
命令,就需要安装metrics-server
二、安装metrics-server监控节点状态
2.1、首先下载配置文件
curl -L https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml > metrics-server.yaml
2.2、修改deployment参数
不添加的话会出现tls错误,不多考虑修复他,直接用http吧
# 在 Deployment 部分的 args 中添加:
- --kubelet-insecure-tls