首页 > 其他分享 >从 K8s 的 “临时容器” 看 K8s 设计的厉害之处

从 K8s 的 “临时容器” 看 K8s 设计的厉害之处

时间:2024-10-21 17:47:16浏览次数:7  
标签:容器 -- 厉害 Host 命令行 镜像 K8s

大家好,这里是G-LAB IT实验室。

在这里插入图片描述

从一个容器的不足说起

容器概念出现时,有个非常重要的理念:容器中极简。

即容器里面只保留需要运行的进程就可以,其他一律不要安装。这也是为什么 Docker 出现的那时,有一篇文章《为什么不需要在 Docker 容器中运行 sshd》经常被提及的原因。

但有时候 Docker 容器中缺少需要的软件。比如 curl,wget,ifconfig,ip,tcpdump 等基础软件包,遇到问题时,什么命令都敲不了,很是让人抓狂。平时定位问题的技术(各种 Linux 命令行工具),一点都用不上了。自己打的镜像倒还好,大不了重新打镜像把需要的工具也安装后,重新打镜像。但是如果是开源镜像就比较棘手。

如何在没有安装软件包的容器里面,执行需要的命令行(二进制工具)进行调试,一直是 K8s 平台的一个小遗憾。

以前想 K8s 可以补充的功能

以前想着:可以利用 Host 上面的命令行呀,通过 nsenter 跳到容器里面,不就可以执行了么。

当年还幻想可以给 K8s 提点 proposal:让 exec 命令增加 --from-host 参数,当带上这个参数的时候,让 kubelet 直接从 Host 执行 nsenter 运行主机上面的二进制,这样就绕过了容器里面没有命令行的约束。方便管理员调试容器中相关问题。

想法似乎挺好,后面转战上层 AI 平台,并没有继续关注这么底层的了。直到最近看到 K8s 的新功能:“临时容器” (ephemeral containers)。发现 K8s 对某个特性的设计还是非常值得点赞的。

结果 K8s 实现的功能

K8s 为了能在容器里面,执行不存在的命令行,增加了一个 kubectl debug 命令

大致流程如下图:

其中红色容器,就是一个 “临时容器”,它与目标容器共享各种 namespace,所以与直接在目标容器中执行命令的效果是一样的。通过指定镜像地址,来控制这个新启动的 “临时容器” 里面包含自己所需要的各类命令行。

这样就可以在任意 K8s 的容器里面,执行不存在的命令行工具了。比如,对某 Pod 里面的名为 app 的容器执行调试:

kubectl debug -it -c debugger --target=app --image=busybox {POD_NAME}

–target 参数,是指定 Pod 中需要调试的目标 Container(有时 Pod 有多个 Container)。

果然还是人家的更厉害

看完 K8s 的实现,明显比早期想的 “借用 Host” 方法更好:其仍然保持 Host 节点的 “极简”,而是将需要的工具仍然保持由容器来承载。这样可以借用任意的容器镜像,而不必在 Host 节点上面安装各种工具包。非常优雅。

更 “过分” 的是,在节点上没有的命令行工具,也不需要给节点安装软件包,也可以通过临时容器来执行。

kubectl debug node/mynode -it --image=ubuntu

扩展性也很赞,确实考虑的挺周全。

So,启动 “临时容器” 来在目标容器中 “整活” 走起~

标签:容器,--,厉害,Host,命令行,镜像,K8s
From: https://blog.csdn.net/mengmeng_921/article/details/143116508

相关文章

  • HarmonyOS:AbilityStage组件容器介绍
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • 容器间访问
    同一主机下的不同服务间访问最近又部署了一个前后端分离项目,但是还是学艺不精,折腾了半天最后一个遇到的问题就是,前端容器启动了,但是始终无法连接后端的接口版本1这是当时的配置信息#nginxworker_processes1;events{worker_connections1024;}http{include......
  • Docker 的网络模式 + 容器间通讯 + TC 流量控制工具
    写在前面:        近期在忙一个两端通讯的任务,想用一定的流量控制工具来模拟不同网络下的运行情况。这里记录下学到的内容。主要包含Docker的网络配置情况和容器间通讯以及限速工具TC的介绍。一、TrafficControl工具引入TC(TrafficControl)是Linux系统中的流量......
  • 华为鸿蒙 AbilityStage 组件容器:Stage模型的舞台中心
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。华为鸿蒙系统的阶段模型为开发者提供了......
  • 在K8S中,有一家公司想要修改它的部署方法,并希望建立一个更具可扩展性和响应性的平台。
    在Kubernetes(K8s)中,一家公司想要修改其部署方法,并建立一个更具可扩展性和响应性的平台,这是一个明智且可行的目标。以下是对该公司如何实现这一目标以满足客户需求的详细分析:1.技术层面的实现策略分解单体应用:将大型的单体应用拆分成多个独立的、小型的、松耦合的服务,每个服务......
  • 在K8S中,有一种情况,即公司希望通过维持最低成本来提高其效率和技术运营速度。你认为公
    在Kubernetes(K8s)环境中,公司若希望通过维持最低成本来提高其效率和技术运营速度,可以采取一系列策略。以下是一些详细建议:1.优化资源配置与利用设置资源请求与限制:为容器设置合理的资源请求(Requests)和限制(Limits),确保它们在不浪费资源的同时获得必要的计算资源。这有助于防止......
  • 在K8S中,有家拥有分布式系统的跨国公司,拥有大量数据中心,虚拟机和许多从事各种任务的员
    对于拥有分布式系统的跨国公司,且该公司拥有大量数据中心、虚拟机以及众多从事各种任务的员工,采用Kubernetes(K8s)来管理所有任务是一种高效且灵活的方式。以下是一些建议,说明该公司如何以与Kubernetes一致的方式管理所有任务:1.利用Kubernetes的容器化特性容器化应用程序:将公司......
  • 在K8S中,从单片到微服务的转变解决了开发方面的问题,但却增加了部署方面的问题。公司如
    在Kubernetes(K8s)环境中,从单片应用到微服务的转变确实解决了开发方面的问题,如代码可维护性、可扩展性和团队协作等,但同时也增加了部署方面的复杂性。为了解决这些部署方面的问题,公司可以采取以下策略:1.容器化微服务首先,公司需要将每个微服务打包成Docker容器。容器化提供了应用......
  • 在K8S中,有一家拥有非常分散的系统的跨国公司,期待解决整体代码库问题。你认为公司如何
    在K8S中,公司可以通过以下方式修改其部署方法并建立一个更具可扩展性和响应性的平台,以满足客户需求:采用微服务架构:将应用程序分解为一组小型、独立的服务,每个服务都运行在自己的容器中。这种架构使得应用程序更加模块化,易于扩展和维护。同时,微服务可以独立部署和更新,从而提高了......
  • K8s-Service详解
    Service介绍在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的......