一、不同版本如何使用临时容器¶
临时容器功能在Kubernetes 1.16后的版本才可以使用,并且在1.16~1.18版本和1.18+版本的使用方法不太一致。
1.1 1.16~1.18(包括1.18)版本中临时容器的使用方法¶
临时容器是使用Pod的ephemeralcontainers子资源创建的,可以使用kubectl --raw向一个正在运行的Pod注入一个临时容器,假如向kube-system命名空间下的metrics-server容器添加一个busybox的临时容器。
首先查看metrics-server的Pod名称
[root@k8s-master01 ]# kubectl get po -n kube-system -l k8s-app=metrics-server
NAME READY STATUS RESTARTS AGE
metrics-server-89786cd84-t9dwm 1/1 Running 4 (5d3h ago) 97d
接着创建一个ec.json文件,声明临时容器的配置,内容如下:

需要注意的地方:
- metadata.name:被注入容器的名字
- ephemeralContainers[].image:临时容器使用的镜像。
- ephemeralContainers[].name:临时容器的名称。
之后使用kubectl replace --raw命令更新已运行的临时容器metrics-server-6bf7dcd649-v7gqt
$ kubectl replace --raw /api/v1/namespace/kube-system/pods/ metrics-server-89786cd84-t9dwm/ephemeralcontainers -f ec.json
执行成功后将返回临时容器的新列表(部分代码)

添加成功后,可以使用describe命令查看新创建的临时容器的状态
$ kubectl describe po metrics-server-89786cd84-t9dwm -n kube-system

然后就可以使用以下exec或者attach命令连接新的临时容器(-c指定为临时容器的名称)
$ kubectl attach -it metrics-server-89786cd84-t9dwm -n kube-system -c debugger
1.2 1.18~1.19版本中临时容器的使用方法¶
Kubernetes版本低于1.18时,使用临时容器在线Debug的过程还是比较麻烦的,在1.18版本之后(包括1.18),使用临时容器在线Debug就相对简单了,可以直接使用kubectl alpha debug进行调试,比如上述操作可以用一条命令代替:
$ kubectl alpha debug metrics-server-89786cd84-t9dwm -n kube-system -i --image=busybox
注意:1.18版本也需要开启临时容器功能。1.19以上版本kubectl命令不用再加alpha字段!!!
1.3 1.19+版本中临时容器的使用方法¶
在1.19版本之后,kubectl命令不用再加alpha字段。此时添加临时容器一般有两种:
第一种给Pod添加临时容器:
$ kubectl debug redis-new-5b577b46c7-2jv4j -ti --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/debug-tools
第二种给节点添加临时容器:
$ kubectl debug node/k8s-node01 -it --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/debug-tools
二、临时容器怎么删除¶
一般临时容器不会自动删除,需要手动重新启动Pod或者删除Pod。