如何用root用户进入pod

Database and Ruby, Python, History


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

  1. ssh 进入 pod 所在的节点
  2. 运行crictl ps | grep {pod-name}找到对应的 container
  3. crictl inspect {container_id}找到 container 的完整 ID。当然你也可以通过kubectl get pod nginx -n nginx-test -o jsonpath="{.status.containerStatuses[].containerID}".
  4. runc --root /run/containerd/runc/k8s.io/ exec -t -u 0 6d100587c71c60facd6d6ef4e18bd4e085b29453d1866bfc736a9035d9848820 sh 就可以以root身份进入 pod 了。其中,-u 0就是rootuid