Pod常见状态分析

王景迁 / 2023-05-03 / 原文

常见状态和原因

kube-scheduler
Pending:调度不成功

kubelet
ImagePullBackOff:镜像拉取失败
Running:容器已创建并且启动
Ready:容器可以提供服务
CrashLoopBackOff:容器退出后kubelet拉起新容器

如果没有配置livenessProbe或者readinessProbe,那么对应的检查默认成功。
通过livenessProbe和readinessProbe是容器Ready的必要条件。

实验1:Pod重启次数计算方式
创建初始化容器后Pod重启次数是初始化容器重启次数之和

创建业务容器后Pod重启次数是业务容器重启次数之和

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
        - name: busybox1
          image: busybox:1.36
          command: ["sh", "-c", "sleep 10000"]
        - name: busybox2
          image: busybox:1.36
          command: ["sh", "-c", "sleep 10000"]
          readinessProbe:
            tcpSocket:
              port: 100
            initialDelaySeconds: 5
      initContainers:
        - name: check1
          image: busybox:1.36
          command: ["sh", "-c", "cat /test/abc"]
          volumeMounts:
            - mountPath: /test
              name: root
        - name: check2
          image: busybox:1.36
          command: ["sh", "-c", "cat /test/abc"]
          volumeMounts:
            - mountPath: /test
              name: root
      volumes:
      - name: root
        hostPath:
          path: /root

实验2:livenessProbe成功而readinessProbe失败进入不了Ready

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
        - name: busybox1
          image: busybox:1.36
          command: ["sh", "-c", "sleep 10000"]
        - name: busybox2
          image: busybox:1.36
          command: ["sh", "-c", "sleep 10000"]
          readinessProbe:
            tcpSocket:
              port: 100
            initialDelaySeconds: 5

查询异常Pod

kubectl get pod -A | grep -v Completed | tr '/' ' ' | awk '$3!=$4||$5!="Running"'

参考资料

pod常见状态及故障原因