spec: containers: - image: wangyanglinux/myapp:v1.0 imagePullPolicy: IfNotPresent name: myapp-1 readinessProbe: failureThreshold: 3 httpGet: path: /index1.html port: 80 scheme: HTTP initialDelaySeconds: 1 periodSeconds: 3 successThreshold: 1 timeoutSeconds: 1 resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /var/run/secrets/kubernetes.io/serviceaccount name: kube-api-access-29fwr readOnly: true dnsPolicy: ClusterFirst enableServiceLinks: true nodeName: k8s-node02 preemptionPolicy: PreemptLowerPriority priority: 0 restartPolicy: Always
1. restartPolicy 只作用于单节点上的 Pod,kubelet 本地重启容器
2. 如果 Pod 被节点删除、驱逐,Deployment/StatefulSet 这类控制器才会在其他节点新建Pod,和 restartPolicy 无关。
只要容器进程停止(不管正常退出exit 0、程序崩溃exit≠0、OOM杀死、被kill),kubelet都会在本机反复重启这个容器。
◦ 现象:Pod名字不变,容器会不断重建,kubectl get pod看到RESTARTS数字持续上涨。
容器反复重启 CrashLoopBackOff(Always策略导致无限重启)
Pod 内所有容器是同生共死的整体,由本机 kubelet 根据 restartPolicy 统一管控:
只要 Pod 里任意一个容器进程退出停止,kubelet 会把 Pod 内全部容器一起杀死,再整组重启。
配合你的 restartPolicy: Always(你现在的配置)
只要任意一个容器死掉 → 全部容器一起重启,无限循环。
四、补充:为什么设计成一起重启?
Pod 是最小调度单元,内部多容器共享网络、存储卷、命名空间,强耦合。
K8s 不支持“只重启Pod里某一个坏容器、保留其他容器”,只能整体重建。