首页 > 其他分享 >K8S 故障排错新手段:kubectl debug 实战

K8S 故障排错新手段:kubectl debug 实战

时间:2022-12-20 10:37:56浏览次数:44  
标签:kubectl 容器 排错 开启 debug EphemeralContainers K8S

K8S INTERNAL 系列

容器编排之争在 Kubernetes 一统天下局面形成后,K8S 成为了云原生时代的新一代操作系统。K8S 让一切变得简单了,但自身逐渐变得越来越复杂。【K8S Internals 系列专栏】围绕 K8S 生态的诸多方面,将由博云容器云研发团队定期分享有关调度、安全、网络、性能、存储、应用场景等热点话题。希望大家在享受 K8S 带来的高效便利的同时,又可以如庖丁解牛般领略其内核运行机制的魅力。

本文将为大家介绍一个 K8S 故障排错新手段:kubectl debug。

 



一、kubectl debug 起源

开发者喜欢在生产部署中使用极致精简的容器镜像,这也是容器技术中的一个最佳实践。这种精简主义有很多好处,而且在大多数情况下运行良好,但是一旦需要在生产中排除一些故障时,这就变得很困难了,因为精简后的容器普遍缺失常用的排障工具,有些甚至连 bash/sh 解释器都没有。

过去几年,K8S 社区就一直有一个声音,如果有一种方法可以为正在运行的 Pod 启用某种调试模式,再附加一套调试工具能在容器中执行,那就最好不过了。这种新的调试模式涉及的改动面很广,从 16 年就出现了相关的 Issue Support for troubleshooting distroless containers 开始,直至 K8S1.23 版本,kubectl debug 这项功能才逐渐成熟。

kubectl debug 是一款 k8s pod 诊断工具,能够帮助进行 Pod 的排障诊断。在 k8s v1.16 ~ v1.22 中是 Alpha 状态,默认关闭。从 v1.23 开始成为 Beta 状态,默认开启。

 



二、kubectl debug 工作原理

我们知道,容器本质上是带有 cgroup 资源限制和 namespace 隔离的一组进程。因此,我们只要启动一个进程,并且让这个进程加入到目标容器的各种 namespace 中,这个进程就能 “进入容器内部”(注意引号),与容器中的进程 “看到” 相同的根文件系统、虚拟网卡、进程空间了 —— 这也正是 docker exec 和 kubectl exec 等命令的运行方式。

现在的状况是,我们不仅要 “进入容器内部”,还希望带一套工具集进去帮忙排查问题。那么,想要高效管理一套工具集,又要可以跨平台,最好的办法就是把工具本身都打包在一个容器镜像当中。接下来,我们只需要通过这个 “工具镜像” 启动容器,再指定这个容器加入目标容器的的各种 namespace,自然就实现了 “携带一套工具集进入容器内部”。

 



三、kubectl debug 怎么用



1.开启功能

在 V1.23 及以上版本中,该功能默认开启。针对 1.23 以下的 K8S 版本,需要通过以下方式,手动开启。


## 控制面开启 EphemeralContainers featureGate.
### 进入 master 节点,编辑 /etc/kubernetes/manifests/ 下的 kube-apiserver.yaml,kube-controller-manager.yaml 及 kube-scheduler.yaml,在 command 部分添加 - --feature-gates=EphemeralContainers=true;

## Kubelet 服务开启该功能
### 在节点上编辑 /var/lib/kubelet/kubeadm-flags.env,添加 --feature-gates=EphemeralContainers=true;或者设置KUBELET_EXTRA_ARGS="--feature-gates=EphemeralContainers=true"

## 重启 Kubelet:
### systemctl restart kubelet

标签:kubectl,容器,排错,开启,debug,EphemeralContainers,K8S
From: https://blog.51cto.com/u_11976981/5954217

相关文章

  • Kubernetes(k8s) kubectl certificate常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • Debugging techniques for PHP programmers
    Tableofcontents​​Introduction​​​​Settingup​​​​Errormessages​​​​Introducingprintstatements​​​​UsingPHPeclipse​​​​Usingthedebugge......
  • (转)Android studio debug 技巧介绍
    写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 ​​EvaluateExpression​​,......
  • Kubernetes(k8s) kubectl rollout status常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • Microsoft 365 开发:通过Powershell预先排错已删除或者已存在的Site Collection
    Blog链接:​​​https://blog.51cto.com/13969817​​我们都知道SPOAdmin或者网站所有者在删除SiteCollection的时候,默认是softdelete,SiteCollection并没有真正的被删除,......
  • debug software crash
    debugsoftwarecrash​​http://www.eventhelix.com/realtimemantra/Basics/debugging_software_crashes.htm​​​​http://www.eventhelix.com/realtimemantra/basics/de......
  • Web Serial Debug-浏览器串口调试工具
    WebSerialDebug浏览器串口调试工具仅测试了Edge和Chrome浏览器,其他浏览器未测试是否可用在线体验:https://itldg.github.io/web-serial-debug/国内体验:https......
  • Kubernetes(k8s) kubectl rollout resume常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • net5 debug版本iis发布 403.14 错误
    HTTP错误403.14-Forbidden ASPNETCore5.0VS2022发布好网站部署在IIS上就报错了:HTTP错误403.14-Forbidden这个错误出现的次数很多,也就解决过很多次,在N......
  • Kubernetes(k8s) kubectl explain常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......