问题描述
影响 Pod 的启动行为,在某个 POD 启动后再启动另外换一个 POD 实例:
解决方案
有关内容参考官方「Init Containers」手册。
向往常一样创建一个普通的POD,然后以如下方式定义一个依赖的POD:
kind: Deployment apiVersion: apps/v1beta1 metadata: name: nginx spec: relicas: 1 template: metadata: lable: app: nginx spec: containers: - name: webserver image: nginx ports: - containerPort: 80 initContainers: - name: checkabackend image: busybox command: ["sh", "-c", "until nslookup..........."]
常用调试方法
查看 initContainers 日志
kubectl logs "<pod-name>" -c "<init-container-2>"
常见问题(FAQ)
Kubernetes 会为每个 Pod 执行 initContainers
kubernetes – Init container to be ran only once per deployment – Stack Overflow
initContainers 是 Pod 的组成部分,因此 Kubernetes 会为每个 Pod 执行 initContainers 定义。
因此无法:让在 StatefulSet 中 initContainers 只执行一次,同理也无法让 Deployment 中 initContainers 只执行一次。因此我们希望「在 kubectl apply StatefulSet.yaml 时,只执行一次 initContainers,在后续 Pod 启动时不再执行 initContainers 的」做法是不可能的。
参考文献
Init Containers | Kubernetes
Debug Init Containers | Kubernetes