kubernetes中有状态Exited的container,删除之后会自动创建,但是查看服务却都是正常的
之前对initcontainer概念的理解一直有误区,在 Pod 启动过程中,每个 Init 容器在网络和数据卷初始化之后会按顺序启动。 每个 Init 容器成功退出后才会启动下一个 Init 容器。这里退出 我理解成了 退出容器并删除容器,其实发现它仅仅是退出 并不会删除container
https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/
例如 flannel的pod
如上图看到flannel的pod 处于exit状态 查看flannel的yaml会发现这个pod是initcontainer
测试一下initcontainer的生命周期
创建
cat >>init.yaml <<EOF
---
apiVersion: v1
kind: Pod
metadata:
name: init-demo
labels:
app: init
spec:
initContainers:
- name: init
image: busybox
command:
- wget
- "-O"
- "/tmp/index.html"
- http://www.baidu.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: {}
EOF
# 运行yaml
kubectl apply -f init.yaml
启动pod成功
在op-k8s-n003上执行docker ps -a 查看
curl 一下cluster ip:80 结果就是百度的主页的内容 证明initcontain已经成功完成并退出
删除该pod查看
kubectl delete -f init.yaml
发现initcontainer只有在应用容器退出删除的时候 container才会被删除