「Kubernetes Objects」- Init Containers(学习笔记)

问题描述

影响 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