问题描述
影响 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