栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【运维心得】竟然还不知道K8S的这个功能?

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【运维心得】竟然还不知道K8S的这个功能?

使用K8S已经快两年多了,期间也碰到了不少涉及调试的场景,一般都是通过kubectl logs 或者 kubectl describe pod 进行问题的查找,有时候,kubectl exec也是经常使用的命令。但这些工具都要求通过 SSH 进入 shell,碰到 Distroless 等容器不能进入的时候该怎么办呢?本文介绍一种新工具,希望能解决这个问题。

目录

kubectl debug

举例说明

进程共享

总结


kubectl debug

这是不久前添加的一个新命令(v1.18),允许调试正在运行的 pod。它会将名为 EphemeralContainer(临时容器)的特殊容器注入到问题 Pod 中,让我们查看并排除故障。

临时容器是个新概念,其实是 Pod 中的子资源,类似普通 container。但不用于构建应用程序,而是用于检查。我们只能使用特殊的 API 将其注入到运的行 Pod 中,来运行命令并检查 Pod 环境。目前仍处于测试阶段,也许将来还有更好的方式,所以必须要手工设定启用才可以。

如下集群的配置中,就启用了临时容器:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.20.2
apiServer:
  extraArgs:
    feature-gates: EphemeralContainers=true

举例说明

下面是网上的一个例子,能够演示如何建立一个测试环境,首先启动一个名为 some-app 的 Pod 来进行“调试”。然后针对这个 Pod 运行 kubectl debug,指定 busybox 为临时容器的镜像,并作为原始容器的目标。

~ kubectl run some-app --image=k8s.gcr.io/pause:3.1 --restart=Never
~ kubectl debug -it some-app --image=busybox --target=some-app
Defaulting debug container name to debugger-tfqvh.
If you don't see a command prompt, try pressing enter.
/ #
# From other terminal...
~ $ kubectl describe pod some-app
...
Containers:
  some-app:
    Container ID:   containerd://60cc537eee843cb38a1ba295baaa172db8344eea59de4d75311400436d4a5083
    Image:          k8s.gcr.io/pause:3.1
    Image ID:       k8s.gcr.io/pause@sha256:f78411e19d84a252e53bff71a4407a5686c46983a2c2eeed83929b888179acea
...
Ephemeral Containers:
  debugger-tfqvh:
    Container ID:   containerd://12efbbf2e46bb523ae0546b2369801b51a61e1367dda839ce0e02f0e5c1a49d6
    Image:          busybox
    Image ID:       docker.io/library/busybox@sha256:ce2360d5189a033012fbad1635e037be86f23b65cfd676b436d0931af390a2ac
    Port:           
    Host Port:      
    State:          Running
      Started:      Mon, 15 Mar 2021 20:33:51 +0100
    Ready:          False
    Restart Count:  0
    Environment:    
    Mounts:         

进程共享

有时候,临时容器也无法解决问题,当故障容器不包括必要的调试工具甚至 shell 时,可以使用 Process Sharing(进程共享)来使用注入的临时容器检查 Pod 的原有容器。这种方式相当于克隆一个新的容器,然后把故障容器的进程共享出来(感觉有点儿奇妙),由于自己也没有能够理解,所以这里就不做阐述,避免引起误解。

总结

感觉kubectl debug的功能十分强大,除了进程共享,其他配置似乎也比较简单,暂时还没有使用到的场景,先记录一下,以免下次真的碰到场景,连这个工具都记不起来了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321169.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号