init container初始容器:

基本支持所有普通容器特征;
优先普通容器执行;
一个Pod里面就可以有一个或者多个initC;
应用场景:
控制普通容器启动,初始容器完成后才会启动业务容器;
初始配置,例如下载应用配置文化,注册信息等;

Pod能够具有多个容器,应用运行在容器里面,但是他也可能有一个或多个先于应用容器启动的Init容器;

Init容器与普通的容器非常相似,具有如下两点:
1》Init容器总是运行到成功完成为止;
2》每个Init容器都必须在下一个init容器启动之前成功完成;

如果pod的init容器失败,k8s会不断的重启该pod,知道init容器成功为止,然而如果pod对应的restartPolicy为Never,就不会重启;

如果Pod重启,所有Init容器必须重新执行;

InitC得作用

initC作用:

安全性高 ,可以在业务容器前完成拉取外部代码文件等等一系列的操作,拉取完成之后容器销毁初始容器,将数据发送给业务容器;

InitC实例

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
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
initContainers:
- name: init-myservice
image: busybox
command: ['wget', '-O', "/work-dir/index.html","http://www.baidu.com"]
volumeMounts:
- name: workdir
mountPath: /work-dir
containers:
- name: myapp-container
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: workdir
mountPath: /usr/share/nginx/html
volumes:
- name: workdir
emptyDir: {}

# 官网:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/