使用临时容器来调试的例子
你可以使用 kubectl debug
命令来给正在运行中的 Pod 增加一个临时容器。 首先,像示例一样创建一个 pod:
1 | kubectl run ephemeral-demo --image=k8s.gcr.io/pause:3.1 --restart=Never |
说明: 本节示例中使用 pause
容器镜像,因为它不包含调试程序,但是这个方法适用于所有容器镜像。
如果你尝试使用 kubectl exec
来创建一个 shell,你将会看到一个错误,因为这个容器镜像中没有 shell。
1 | kubectl exec -it ephemeral-demo -- sh |
你可以改为使用 kubectl debug
添加调试容器。 如果你指定 -i
或者 --interactive
参数,kubectl
将自动挂接到临时容器的控制台。
1 | kubectl debug -it ephemeral-demo --image=busybox:1.28 --target=ephemeral-demo |
此命令添加一个新的 busybox 容器并将其挂接到该容器。--target
参数指定另一个容器的进程命名空间。 这个指定进程命名空间的操作是必需的,因为 kubectl run
不能在它创建的 Pod 中启用共享进程命名空间。
说明: 容器运行时必须支持 --target
参数。 如果不支持,则临时容器可能不会启动,或者可能使用隔离的进程命名空间启动, 以便 ps
不显示其他容器内的进程。
你可以使用 kubectl describe
查看新创建的临时容器的状态:
1 | kubectl describe pod ephemeral-demo |
使用 kubectl delete
来移除已经结束掉的 Pod:
1 | kubectl delete pod ephemeral-demo |