k8s是用的阿里的ACK集群,版本是1.20.11,docker版本19.03.15
当我创建多个deployment文件的时候,node节点就会NotReady
  • 1.
下面是报错
[root@iZyx001bql7ikaghtczcucZ resource]# kubectl get nodes  | awk '/Ready/'
NAME                           STATUS   ROLES                  AGE    VERSION
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
*******************   NotReady <none>                 113d   v1.20.11-aliyun.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
查看pod的日志,无法查看

阿里云ACK K8s Node节点NotReady-内存和cpu被打爆排错解决方式_K8s

阿里云ACK K8s Node节点NotReady-内存和cpu被打爆排错解决方式_kubernetes_02

这时候NotReady的节点是无法通过ssh远程连接到的,但是ping包是可以回应的,22端口也可以通,通过监控查看资源配置

阿里云ACK K8s Node节点NotReady-内存和cpu被打爆排错解决方式_K8s_03

会发现cpu和内存会短时间骤增骤降,直接飙升到100%把内存和cpu打爆

阿里云ACK K8s Node节点NotReady-内存和cpu被打爆排错解决方式_K8s_04

这时候我们查看下Node节点有没有做资源配额,如果做了资源配额那么内存和cpu应该不会被打爆

--eviction-hard=imagefs.available<15%...:驱逐策略(磁盘/内存不足阈值)。
--system-reserved=cpu=200m,memory=1765Mi:为系统预留资源。
--kube-reserved=cpu=200m,memory=1765Mi:为 Kubernetes 组件预留资源。
# 也就是说阿里云的ack是预留资源的,但还是被打爆了,这就很奇怪了
  • 1.
  • 2.
  • 3.
  • 4.

后续查看了下deployment文件,我们在deployment的文件上加上了资源限制,这样启动就不会直接打爆node的cpu和内存了,这样node节点就不会NotReady了。

apiVersion: apps/v1
kind: Deployment
metadata:
spec:
  template:
    metadata:
    spec:
      containers:
......
        resources:  #资源限制   当最大与最小设置为相等时 优先级最高
          limits: #最大限制
            memory: "32768Mi"
            cpu: "16000m"    #1000m=1核
          requests: #最小限制
            memory: "32768Mi"   #32G内存
            cpu: "16000m"       #16核
......
......
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

这样Node资源就不会被打爆了

没有立即发现cpu和内存飙高也是因为新业务还没有上线,只是测试阶段,并没有上监控导致的没有告警并迅速定位出问题,生产上一定要加监控并配置告警!!!!!!!!!!