文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Kubernetes中如何使用临时容器进行故障排查

2023-06-29 14:10

关注

小编给大家分享一下Kubernetes中如何使用临时容器进行故障排查,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言

容器及其周围的生态系统改变了工程师部署、维护和排查工作负载故障的方式。但是,在 Kubernetes 集群上调试应用程序有时可能会很困难,因为你可能在容器中找不到所需的调试工具。许多工程师使用基于精简、发行版构建无发行版的基础镜像,其中甚至没有包管理器或shell。甚至一些团队使用 scratch 作为基础镜像,并且只添加应用程序运行所需的文件。这种常见做法的一些原因是:

这些精简的基础镜像不包括用于对应用程序或其依赖项进行故障排查的工具。这是 Kubernetes 临时容器功能最大用途。临时容器允许创建包含可能需要的所有调试工具的容器镜像。一旦需要调试,就可以将临时容器部署到所选的正在运行的 Pod 中。

我们不能将容器添加到已部署的容器;您需要更新spec,并重新创建资源。但是,可以将临时容器添加到现有 Pod 中,以便对线上问题进行故障排查。

本文介绍如何使用临时容器进行Kubernetes上工作负载的问题排查。

什么是临时容器? 

临时容器与其他容器的不同之处在于,它们缺少对资源或执行的保证,并且永远不会自动重启, 因此不适用于构建应用程序。 临时容器使用与常规容器相同的 ContainerSpec 节来描述,但许多字段是不兼容和不允许的。

临时容器是使用 API 中的一种特殊的 ephemeralcontainers 处理器进行创建的, 而不是直接添加到 pod.spec 段,因此无法使用 kubectl edit 来添加一个临时容器。

与常规容器一样,将临时容器添加到 Pod 后,将不能更改或删除临时容器。

临时容器的配置

临时容器与常规容器共享相同的spec。但是,某些字段被禁用,并且某些行为被更改。下面列出了一些重大变化;检查临时容器规范以获取完整列表。

启动临时容器

首先,检查是否启用了临时容器功能。

kubectl debug -it <POD_NAME> --image=busybox

如果未启用该功能,您将看到类似下面的消息。

Defaulting debug container name to debugger-wg54p.
error: ephemeral containers are disabled for this cluster (error from server: "the server could not find the requested resource").

将 EphemeralContainers=true 附加到 kubelet、kube-apiserver、kube-controller-manager、kube-proxy、kube-scheduler 参数中的--feature-gates=后, 例如:

...--feature-gates=RemoveSelfLink=false,EphemeralContainers=true...

使用临时容器

现在,集群支持临时容器功能,让我们来试试吧。要创建临时容器,使用 kubectl 命令行工具的 debug 子命令。首先,创建一个Deployment

kubectl create deployment nginx-deployment --image=nginx

获取需要debug的Pod的名称

$ kubectl get podsNAME                                READY   STATUS    RESTARTS   AGEnginx-deployment-66b6c48dd5-frsv9   1/1     Running   6          62d

以下命令将在 pod nginx-deployment-66b6c48dd5-frsv9 中创建一个新的临时容器。临时容器的镜像是busybox。-i 和 -t 参数允许我们附加到新创建的容器。

$ kubectl debug -it pods/nginx-deployment-66b6c48dd5-frsv9 --image=busybox

现在我们可以debug了

/ # ping 8.8.8.8PING 8.8.8.8 (8.8.8.8): 56 data bytes64 bytes from 8.8.8.8: seq=0 ttl=112 time=9.797 ms64 bytes from 8.8.8.8: seq=1 ttl=112 time=9.809 ms^C/ # nc --helpBusyBox v1.34.1 (2021-11-11 01:55:05 UTC) multi-call binary.Usage: nc [OPTIONS] HOST PORT  - connectnc [OPTIONS] -l -p PORT [HOST] [PORT]  - listen...

当使用 kubectl describe pod <POD_NAME> 命令时,可以看到一个新字段 "Ephemeral Containers",此部分包含临时容器及其属性。

$ kubectl describe pods <POD_NAME>......Ephemeral Containers:  debugger-thwrn:    Container ID:   containerd://eec23aa9ee63d96b82970bb947b29cbacc30685bbc3418ba840dee109f871bf0    Image:          busybox    Image ID:       docker.io/library/busybox@sha256:e7157b6d7ebbe2cce5eaa8cfe8aa4fa82d173999b9f90a9ec42e57323546c353    Port:           <none>    Host Port:      <none>

与临时容器共享进程命名空间

进程命名空间共享一直是一个很好的故障排查选项,此功能可用于临时容器。进程命名空间共享不能应用于现有容器,因此必须创建目标容器的副本。--share-processesflag 在与 --copy-to 一起使用时,可实现进程命名空间共享。这些标志将现有的 Pod spec定义复制到新定义中,并在spec中启用了进程命名空间共享。

$ kubectl debug -it <POD_NAME> --image=busybox --share-processes --copy-to=debug-pod

运行 ps 命令以查看正在运行的进程。正如您所期望的那样,您可以从 busybox 容器中看到 /pause,从 nginx-deployment 容器中看到 nginx 进程。

# ps auxPID   USER     TIME  COMMAND    1 root      0:00 /pause    6 root      0:00 nginx: master process nginx -g daemon off;   11 101       0:00 nginx: worker process   12 root      0:00 sh   17 root      0:00 ps aux

使用进程命名空间,共享容器文件系统也是可访问的,这对于调试非常有用。您可以使用 /proc//root 链接访问容器。从上面的输出中,我们知道nginx的PID为6。

# ls /proc/6/root/etc/nginxconf.d koi-utf mime.types nginx.conf uwsgi_params fastcgi_params koi-win modules scgi_params win-utf

在这里,我们可以看到目标容器上的Nginx目录结构和配置文件。

以上是“Kubernetes中如何使用临时容器进行故障排查”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯