总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战
一、pod中容器类型
截止目前k8s1.18,K8S已经支持 标准容器,sidecar容器,init容器,ephemeral容器等4种类型的containers。本文我们详细介绍一下这4种容器的特性已经使用场景。
二、标准容器和Sidecar容器
三、init初始化容器
init容器是一种特殊的容器,主要做容器运行前的工作,可以为一个或多个, 只有所有init初始化容器执行完之后,主容器才会启动。
下面的例子定义了一个具有2个Init容器的简单Pod。 第一个等待init-my-backend启动, 第二个等待init-my-db启动。 一旦这两个Init容器都启动完成,Pod将启动spec节中的主容器。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-redis
spec:
# Pod副本数量
replicas: 3
selector:
matchLabels:
app: redis
# Pod模板
template:
metadata:
# 标签信息: 应用的缓存服务
labels:
app: redis
spec:
# 容器信息
containers:
- name: my-app-redis
image: redis:3.2-alpine
# Init容器, 其会在Pod始化期间依次运行各个Init容器
initContainers:
- name: init-my-backend
image: busybox:1.28
# 不停检测default命名空间下名为mybackend的后端服务是否启动完毕
command: ['sh', '-c', "until nslookup mybackend.default.svc.cluster.local; do sleep 5; done"]
- name: init-my-db
image: busybox:1.28
# 不停检测default命名空间下名为mydb的数据库服务是否启动完毕
command: ['sh', '-c', "until nslookup mydb.default.svc.cluster.local; do sleep 5; done"]
四、ephemeral临时容器
临时容器与其他容器的不同之处在于,它们缺少对资源或执行的保证,并且永远不会自动重启,因此不适用于构建应用程序。临时容器,在当前的pod中临时运行,完成使命手自动销毁。
2、1.18~1.19版本中临时容器的使用方法
#注意:1.18版本也需要开启临时容器功能。1.19以上版本kubectl命令不用再加alpha字段!!!
kubectl alpha debug metrics-server-89786cd84-t9dwm -n kube-system -i --image=busybox
3、1.19+版本中临时容器的使用方法
# 在1.19版本之后,kubectl命令不用再加alpha字段。此时添加临时容器一般有两种:
# 第一种给Pod添加临时容器:
kubectl debug metrics-server-54b4b877dc-pz8nb -ti --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/debug-tools
# 第二种给节点添加临时容器:
kubectl debug node/k8s-master-32 -it --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/debug-tools
总结:整理不易,如果对你有帮助,可否点赞关注一下?
更多详细内容请参考:企业级K8s集群运维实战