通过初始化容器,也可以方便的做一些类似 postStart 的工作
但是需要明确区分的是,初始化容器的作用目标是 Pod本身,而 postStart 的作用目标则是 container
大多数情况下,这两种方式可以互换
apiVersion: v1
kind: Pod
metadata:
name: init-demo
labels:
app: init
spec:
initContainers:
- name: init
image: busybox
command:
- wget
- "-O"
- "/tmp/index.html"
- https://studyk8s.com
volumeMounts:
- name: initdir
mountPath: "/tmp"
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: initdir
mountPath: /usr/share/nginx/html
volumes:
- name: initdir
emptyDir: {}
Init容器与普通容器非常像,除了以下两点:
- Init容器总是运行到完成 (例如执行wget、curl、ping等命令)
- 如果有多个Init容器的情况下都必须要在下一个启动之前结束运行
如果Pod中的Init容器启动失败,Kubernetes会不断重启该Pod,指导Init容器成功为止,如果Pod对应的restartPolicy
值为Never(只要退出就不再重启)
,则它不会重新启动。