0%

初始化容器(Init Containers)

初始化容器(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;']

初始化容器什么时候运行

  1. 新建Pod的时候
  2. Pod重启之后,所有的初始化容器都需要重新运行
  3. 改变Pod中的配置,导致初始化容器发生变化。改变初始化容器的image将会重启整个Pod, 应用程序image的改变仅仅重启应用程序容器
  4. Pod基础设施容器重新启动。