一、不同版本如何使用临时容器

临时容器功能在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文件,声明临时容器的配置,内容如下:

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。