· cloud

k8s节点资源不足时OutOfcpu错误

环境

k8s: 1.10.2 docker: 17.03

问题

当指定 nodeName 并且节点资源不足时,会创建大量 pod,并显示outofcpu/outofmem 类似下面:

prometheus-slave01-68bd9bc854-slw92 0/2 OutOfcpu 0 1m
prometheus-slave01-68bd9bc854-svxbq 0/2 OutOfcpu 0 20s
prometheus-slave01-68bd9bc854-sw25t 0/2 OutOfcpu 0 1m

相关 issue

https://github.com/kubernetes/kubernetes/issues/38806

解析

Pod设置spec.nodeName会跳过调度,没有对容量做检测分配到节点上显示资源不足,状态变为 outofcpu/outofmem,k8s 判断 replicaset 没有检测到期望 pod 的状态,会重新再起一个 pod,而原 pod 不会主动删除,致使创建大量 pod。

附件

测试 yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: my-nginx
    spec:
      nodeName: tj1-jm-cc-stag05.kscn
      containers:
        - name: my-nginx
          image: nginx
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: 200
            requests:
              cpu: 100