我有一个正在运行的k8s集群,其中有两个CoreDNS副本。但是当我尝试输入POD的bash提示符时,它将我抛向以下错误
# kubectl exec -it coredns-5644d7b6d9-285bj -n kube-system sh
error: Internal error occurred: error executing command in container: failed to exec in container: failed to start exec "94f45da89fa5493a8283888464623788ef5e832dc31e0d89e427e71d86391fd6": OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown
但是我可以登录到其他Pod,没有任何问题。我尝试了带有内核进程ID的nsenter,它可以工作,但它只适用于网络相关的OpenRations,如,
# nsenter -t 24931 -n ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1400 qdisc noqueue state UP group default
link/ether 7a:70:99:aa:53:6c brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.0.2/32 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::7870:99ff:feaa:536c/64 scope link
valid_lft forever preferred_lft forever
如何使用kubectl进入此pod并消除该错误?
3条答案
按热度按时间mbyulnm01#
您可以按照以下说明使用边车模式:https://support.rancher.com/hc/en-us/articles/360041568712-How-to-troubleshoot-using-the-namespace-of-a-container#sidecar-container-0-2
简而言之,执行此操作可以查找coredns pod正在运行的节点:
ssh到其中一个节点,然后:
将容器ID复制到剪贴板并运行:
你现在将在“边车”集装箱内,可以四处查看。
lqfhib0f2#
如果您正在尝试检查核心文件,则可以运行以下命令
zbq4xfa03#
有一种方法可以访问Kubernetes中
coredns
pod的文件系统。使用临时容器进行调试是可行的方法,因为映像不包含任何shell。
我使用以下命令更改为
kube-system
命名空间但
-n
选项也可以在命令中使用。使用
--target
选项附加临时容器将启用process namespace sharing访问终端后,您可以使用以下命令查看进程:
coredns进程的
PID
是1
,容器文件系统通过/proc/$pid/root
链接对pod中的其他容器可见。这使得调试更容易,但也意味着文件系统机密仅受文件系统权限保护。(docs)最后,可以在以下位置查看配置文件