一直学一直嗨,一直嗨一直学

使用kubectl-debug诊断kubernetes集群

kubectl-debug是K8S中Pod的诊断工具,它通过启动一个排错工具容器,并将其加入到目标业务容器的pid, network, user 以及 ipc namespace 中,这时我们就可以在新容器中直接用 netstat, tcpdump 这些熟悉的工具来解决问题了, 而业务容器可以保持最小化, 不需要预装任何额外的排障工具。

其主要有两部分组成:

  • kubectl-debug工具,是一个二进制文件
  • debug-agent,部署在node节点,用于启动关联的排错容器
一、部署

1、部署kubectl-debug工具

由于其仅仅是一个二进制文件,所以部署很简单,不过由于集群是通过kubeconfig进行授权访问的,所以我们将kubectl-debug工具部署在master上。

项目地址:https://github.com/aylei/kubectl-debug

# install kubectl-debug  export PLUGIN_VERSION=0.1.1  #linux x86_64  curl -Lo kubectl-debug.tar.gz https://github.com/aylei/kubectl-debug/releases/download/v${PLUGIN_VERSION}/kubectl-debug_${PLUGIN_VERSION}_linux_amd64.tar.gz  tar -zxvf kubectl-debug.tar.gz kubectl-debug  sudo mv kubectl-debug /usr/local/bin/

2、部署debug-agent

debug-agent以daemonSet的形式部署。直接执行下面命令即可

kubectl apply -f https://raw.githubusercontent.com/aylei/kubectl-debug/master/scripts/agent_daemonset.yml

然后查看pod的状态,直到其变为running

kubectl get pod  NAME                                     READY   STATUS    RESTARTS   AGE  debug-agent-5prws                        1/1     Running   0          27d  debug-agent-5qm2w                        1/1     Running   1          23d  debug-agent-dd7bt                        1/1     Running   1          27d  debug-agent-nfzqp                        1/1     Running   0          27d  debug-agent-wx4qp                        1/1     Running   0          27d
二、使用

1、pod里只有一个contaienr

kubectl-debug POD_NAME

2、pod里有多个container

kubectl-debug POD_NAME -c CONTAINER_NAME

3、指定namespace

kubectl-debug POD_NAME -n test

4、自定义排除的容器镜像

kubectl-debug POD_NAME --image aylei/debug-jvm

更多可以通过kubectl-debug -h来查看帮助文档。

上面的debug-agent是部署在集群中的,这种方式对于调试频率不高的环境容易造成资源浪费,所以debug-agent还提供一种agentless的模式,kubectl-debug执行命令后,才创建agent pod和排错工具容器,并在退出后删除工具容器和agent pod。由于每次执行都要重新拉起agent,启动会比daemon-set模式稍慢。使用-a, –agentless开启agentless模式。

比如:

kubectl-debug POD_NAME -n NAMESPACE -a --image aylei/debug-jvm --agent-image nicolaka/netshoot:latest

原文出处:coolops -> https://www.coolops.cn/posts/kubernetes-kubectl-debug/