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
。