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策略导致无限重启)
Kubernetes 中,容器是独立重启的,不存在"连坐"机制
[root@k8s-master01 ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
lifecycle-pod 0/2 CrashLoopBackOff 5 (63s ago) 5m13s
pod的restart已经是5次了,但pod里面的两个容器:一个重启了5次,一个还仅仅最初的一次,所以不是同时重启的
[root@k8s-node01 ~]# docker ps -a |grep busybox-container
25889b9b0c80 a024bc31a3a6 "/bin/sh -c 'touch /…" About a minute ago Exited (1) 51 seconds ago k8s_busybox-container_lifecycle-pod_default_96be55e2-e9b8-4724-9f99-e652f54ce44b_5
[root@k8s-node01 ~]# docker ps -a |grep myapp-container
74d455a465b8 77d7ec4cd4c0 "/bin/sh -c 'hostnam…" 5 minutes ago Up 5 minutes k8s_myapp-container_lifecycle-pod_default_96be55e2-e9b8-4724-9f99-e652f54ce44b_0
[root@k8s-node01 ~]#