一:前言
在很多应用场景中,应用在启动之前都需要进行如下初始化操作
1. 等待其他关联组件正确运行(例如数据库)
2.基于环境变量或配置模版生成配置文件
3.从远程数据库获取本地所需配置,或者将自身注册到某个中央数据库中
4.下载相关依赖包,或者对系统进行一些配置操作
Init container与应用容器本质上是一样的,但他们是仅运行一次就结束的任务,并且必须在成功执行完成后,系统才能继续执行下一个容器。
二:实例
nginx-init-containers.yaml
-
apiVersion: v1
-
kind: Pod
-
metadata:
-
name: nginx
-
spec:
-
initContainers:
-
- name: install
-
image: busybox
-
command:
-
- wget
-
- "-O"
-
- "/work-dir/index.html"
-
- http://kubernetes.io
-
volumeMounts:
-
- name: workdir
-
mountPath: "/work-dir"
-
containers:
-
- name: nginx
-
image: nginx
-
ports:
-
- containerPort: 80
-
volumeMounts:
-
- name: workdir
-
mountPath: /usr/share/nginx/html
-
volumes:
-
- name: workdir
-
emptyDir: {}
kubectl create -f nginx-init-containers.yaml
kubectl describe pod nginx
三:说明
init container与应用容器的区别
1.运行方式不同,它们必须先于应用容器执行完成,当设置了多个init container时,将按顺序逐个运行,当所有init container都成功运行后,kubernetes才会初始化Pod的各种信息。
2.在init container的定义中也可以设置资源限制,volume的使用和安全策略,但与应用容器略有不同
3.init container不能设置readinessProbe探针,因为必须在它们成功运行后才能继续运行Pod中定义的普通容器
4.在Pod重新启动时,init container将会重新运行
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-2154415/
,如需转载,请注明出处,否则将追究法律责任。