初始化容器(Init Containers)是Pod中在应用程序容器启动之前运行的专用容器。
一个Pod中可以用多个初始化容器。
与正常的应用程序容器的区别
- 正常的应用程序容器可以一直处于运行状态(Running),初始化容器必须要进入一个终结状态(Terminated)。
- 在一个Pod中可以有多个同时运行的应用程序容器,初始化容器必须按序执行,在下一个启动之前,上一个必须运行完成且成功
- 初始化容器不支持readiness探针,因为Pod就绪之前初始化容器必须运行完成。
如何使用?
通过配置PodSpec
中的initContainers
来实现初始化容器。
下面是一个初始化容器的案例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: containers: - name: myapp-container image: busybox:1.28 command: ['sh', '-c', 'echo The app is running! && sleep 3600'] initContainers: - name: init-myservice image: busybox:1.28 command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] - name: init-mydb image: busybox:1.28 command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
|
初始化容器什么时候运行
- 新建Pod的时候
- Pod重启之后,所有的初始化容器都需要重新运行
- 改变Pod中的配置,导致初始化容器发生变化。改变初始化容器的image将会重启整个Pod, 应用程序image的改变仅仅重启应用程序容器
- Pod基础设施容器重新启动。