初始化容器

容器的健康检查可以用探针来解决,liveness probe(存活探针)和readiness probe(可读性探针), 探针和容器的两个钩子函数是可以影响到容器的生命周期,本篇介绍的是 Init Container (初始化容器)

初始化容器

Init Container 是用来做初始化工作的容器,可以是一个或者多个,这些容器会定义的顺序依次执行,只有所有的Init Container 执行完毕后,主容器才会被启动,由于Pod 里面的所有容器是共享数据卷和网络命名空间的,所以 Init Container 立面产生的数据可以被主容器使用到
pod生命周期

  • PostStartPreStoplivenessreadiness 是属于主容器的生命周期范围内的

  • Init Container 是独立于主容器之外的,他们都属于 Pod 的生命周期范围之内.

Infra 容器

上面图中还包含一个 infra 的容器,集群中的每一个 Pod 对应运行的 Docker 容器,都包含一个 pause-amd64 的镜像,这就是我们的 infra 镜像, Pod 下面的所有容器是共享一个网络命名空间的,这个镜像就是来做这个是的

Init Container 应用场景

  • 等待其他模块Ready: 解决服务之间的依赖问题
  • 初始化配置: 集群中检测所有以存在的成员节点,为主容器准备好就去那的配置信息,这样主容器起来后就能用这个配置信息加入集群

初始化容器定义方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
---
apiVersion: v1
kind: Pod
metadata:
name: init-pod1
labels:
app: init
spec:
containers:
- name: init-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
---
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 6379

---
apiVersion: v1
kind: Service
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 6377