kubectl 不支持用--user root的方式进入 pod,那怎么办呢?
如果是 docker runtime,那可以用docker exec -it --user root,和本地一样进入 Pod。但是 Kubernetes 在 1.23 之后就去掉了 docker,使用 containerd 作为 runtime。而 containerd 的 cli 工具是 crictl 也不支持crictl exec -it --user root。比如Kubernetes 官网压根就没有提这个。
解决方案是用runc。
- ssh 进入 pod 所在的节点
- 运行
crictl ps | grep {pod-name}找到对应的 container crictl inspect {container_id}找到 container 的完整 ID。当然你也可以通过kubectl get pod nginx -n nginx-test -o jsonpath="{.status.containerStatuses[].containerID}".runc --root /run/containerd/runc/k8s.io/ exec -t -u 0 6d100587c71c60facd6d6ef4e18bd4e085b29453d1866bfc736a9035d9848820 sh就可以以root身份进入 pod 了。其中,-u 0就是root的uid。