Kubernetes Kubectl调试

2024-01-02 43

Kubectl是Kubernetes的命令行工具,可以用于与Kubernetes集群进行交互和操作。在开发和调试过程中,我们经常需要使用Kubectl来诊断和解决节点的问题。本教程将介绍如何使用Kubectl来调试Kubernetes节点。

一、准备

必须拥有一个 Kubernetes 的集群,同时必须配置 kubectl 命令行工具与集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 如果还没有集群,可以通过 Minikube 构建一个自己的集群,或者可以使用下面的 Kubernetes 练习环境之一:

  • Killercoda
  • 玩转 Kubernetes

Kubernetes 服务器版本必须不低于版本 1.2. 要获知版本信息,请输入 kubectl version.
需要有权限创建 Pod 并将这些新 Pod 分配到任意节点。 还需要被授权创建能够访问主机上文件系统的 Pod。

二、调试节点

使用 kubectl debug node 命令将 Pod 部署到要排查故障的节点上,此命令在无法使用 SSH 连接节点时比较有用。 当 Pod 被创建时,Pod 会在节点上打开一个交互的 Shell。 要在名为 “mynode” 的节点上创建一个交互式 Shell,运行:

kubectl debug node/mynode -it --image=ubuntu
Creating debugging pod node-debugger-mynode-pdx84 with container debugger on node mynode.
If you don't see a command prompt, try pressing enter.
root@mynode:/#

调试命令有助于收集信息和排查问题。 可能使用的命令包括 ip、ifconfig、nc、ping 和 ps 等等。 还可以从各种包管理器安装 mtr、tcpdump 和 curl 等其他工具。

这些调试命令会因调试 Pod 所使用的镜像不同而有些差别,并且这些命令可能需要被安装。

用于调试的 Pod 可以访问节点的根文件系统,该文件系统挂载在 Pod 中的 /host 路径。 如果在 filesystem 名字空间中运行 kubelet, 则正调试的 Pod 将看到此名字空间的根,而不是整个节点的根。 对于典型的 Linux 节点,可以查看以下路径找到一些重要的日志:

/host/var/log/kubelet.log:负责在节点上运行容器的 kubelet 所产生的日志。
/host/var/log/kube-proxy.log:负责将流量导向到 Service 端点的 kube-proxy 所产生的日志。
/host/var/log/containerd.log:在节点上运行的 containerd 进程所产生的日志。
/host/var/log/syslog:显示常规消息以及系统相关信息。
/host/var/log/kern.log:显示内核日志。

当在节点上创建一个调试会话时,需谨记:

  • kubectl debug 根据节点的名称自动生成新 Pod 的名称;
  • 节点的根文件系统将被挂载在 /host;
  • 尽管容器运行在主机 IPC、Network 和 PID 名字空间中,但 Pod 没有特权。 这意味着读取某些进程信息可能会失败,这是因为访问这些信息仅限于超级用户 (superuser)。 例如,chroot /host 将失败。如果需要一个有特权的 Pod,请手动创建。

三、清理

当使用正调试的 Pod 完成时,将其删除:

kubectl get pods
NAME READY STATUS RESTARTS AGE
node-debugger-mynode-pdx84 0/1 Completed 0 8m1s
# 相应更改 Pod 名称
kubectl delete pod node-debugger-mynode-pdx84 --now
pod "node-debugger-mynode-pdx84" deleted

注意:如果节点停机(网络断开或 kubelet 宕机且无法启动等),则 kubectl debug node 命令将不起作用。 这种情况下请检查调试关闭/无法访问的节点。

  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。
Kubernetes Kubectl调试
上一篇: Debian aptitude操作
Kubernetes Kubectl调试
下一篇: PHP枚举方法