当前位置: 首页 > 知识库问答 >
问题:

单pod vs docker容器

禹正阳
2023-03-14

我对 k8s 中 pod 的一种行为感到困惑。我拉并运行了我的高山容器,当我看到 docker ps -a 命令时它工作正常,但是当我通过 k8s 运行它时,kubectl get pod 的输出显示完成。尽管在 Dockerfile 中我输入了 CMD [“睡眠”、“3600”],但它不会在 k8s 中Hibernate。我可以使用 kubectl 运行 myalpine 将其发送到睡眠模式 --image=myalpine -- 睡眠无限,pod 工作正常,但我不想使用该命令,我希望当我清楚地在 Dockerfile 中键入 sleep 命令并构建它时,k8s 也应该运行它。如果有人解释 pod 的行为,我真的很感激。

共有2个答案

温浩大
2023-03-14

Pod和Container是两种不同的东西。在Kubernetes中,一个或多个容器被包装成一个容器。换句话说,您可以将pod视为容器的运行时环境

笪智志
2023-03-14

留档有一些有用的解释:

Pod是您可以在库伯内特斯中创建和管理的最小的可部署计算单元。

想象一下“部署”的单元——原谅这里滥用术语,因为部署本身在k8s中也是一个定义明确且精确的概念,即另一种类型的工作负载。Pods被归类为工作负载。

Pod(如鲸鱼或豌豆荚)是一组一个或多个容器,具有共享的存储和网络资源,以及如何运行容器的规范。Pod的内容始终位于同一位置,并在共享上下文中运行。Pod为特定于应用程序的“逻辑主机”建模:它包含一个或多个相对紧密耦合的应用程序容器。在非云环境中,在同一物理或虚拟机上执行的应用程序类似于在同一逻辑主机上执行的云应用程序

因此,这是您正在寻找的答案的一部分:pod模拟了一个“逻辑主机”,您可以在其中从一个或几个容器中组装功能相当全的应用程序(如果您愿意,可以称为“微服务”,做一件基本的事情,但要做得好)。

我喜欢将其视为某种形式的组合,但通过 sidecar 和适配器等模式提升到应用程序级别。类似于在 DDD 中实现横切关注点(如日志记录)的方式,通过抽象它们并提供一个通用实现,该实现在任何类使用时应该工作相同(“附加到”任何主容器),尽管需要一些接线工作。正是PodSpec将这些容器连接起来。

除了应用程序容器,Pod 还可以包含 Pod 启动期间运行的初始化容器。如果群集提供此功能,还可以注入临时容器进行调试

继续支持我上面对 OOP/DDD 中组合的类比。

官方文档继续添加更多的解释。

就Docker概念而言,Pod类似于一组具有共享命名空间和共享文件系统卷的Docker容器。

最后,当你想通过 kubectl run 在 Kubernetes 中运行一个容器(必须通过一个 pod)时,请注意不要覆盖容器入口点/命令参数:

覆盖默认入口点和 Cmd 时,以下规则适用:

  • 如果您不为容器提供命令args,则使用Docker映像中定义的默认值。
  • 如果您提供命令但没有为Container提供args,则仅使用提供的命令。Docker映像中定义的默认Entry Point和默认Cmd将被忽略。
  • 如果您只为容器提供args,则Docker映像中定义的默认入口点将使用您提供的args运行。
  • 如果您提供命令args,则忽略Docker映像中定义的默认Entry point和默认Cmd。您的命令与您的args一起运行。
 类似资料:
  • 使用Compose,如果我运行,它将重建所有容器: 即使在使用缓存重建时,这也需要时间。所以我的问题是: 有没有办法只重建一个特定的容器?

  • 在本章中,我们将研究Joomla content下的菜单。 单击“ Content Menu时会显示一个下拉Content Menu 。 文章经理 在文章管理器中,您可以创建由图像,文本和超链接组成的标准页面。 点击Joomla管理面板上的Content → Article Manager菜单,您将看到以下屏幕 - 在这里,我们已经提到了有关Article Manager页面上的列标题的详细信息。

  • 我想减少Azure Cosmos DB SQL-API上的负载,它是从具有依赖注入的.NET Core Web API调用的。 在App Insights中,我注意到对Web API的每次调用都会导致对Cosmos的GetDatabase和GetCollection调用,当Cosmos负载较重时,这些调用可能需要5秒才能运行。 我已经将作为单例(例如这里的建议 - https://docs.mic

  • 4、存储单元的内容 上面,我们讲述了16位微机的内存管理及其相关知识,知道了内存单元物理地址的计算方法,这使我们能很容易地指定所要访问的存储单元。但存储单元里的内容是如何存放的呢?下面就能描述数值在内存的存放形式。 存储单元中所存放的二进制信息通常称为该存储单元的内容或值,并且规定: 一个字节的内容是该字节单元内存放的二进制信息; 一个字的内容是该字地址所指向的单元及其后继一个单元的内容拼接而成;

  • 老师操作指南-发布教学单元内容 a. 添加新章节 点击“+添加章节”会出现编辑框,添加章节的名字和日期以后点保存。 创建完章节后添加课件内容、测验内容和作业内容 b. 添加小节 点击上图中的“添加小节”按钮,在弹出的信息栏中,输入小节名称后保存;保存后,点击“编辑教学内容”,即可进入编辑页添加具体课件内容。 编辑之后中可点击“返回教学单元内容”返回发布内容首页。 目前可以添加的课时内容为:视频、文

  • 本文向大家介绍Docker教程:使用容器(简单示例),包括了Docker教程:使用容器(简单示例)的使用技巧和注意事项,需要的朋友参考一下 如果你是Docker的新手,看一下你应该学习的一些基础命令,以便开始管理容器。 Docker对软件开发生命周期产生了巨大影响,使得大规模软件部署变得简单而且安全。这个教程将介绍运行、启动、停止和删除Docker容器的基础知识。 Docker使得在不同的操作系统

  • 本文向大家介绍Laravel 将单例绑定到服务容器,包括了Laravel 将单例绑定到服务容器的使用技巧和注意事项,需要的朋友参考一下 示例 我们可以将一个类绑定为Singleton: 这样,第一次将实例  'my-database'请求到服务容器时,将创建一个新实例。该类的所有后续请求都将返回第一个创建的实例:            

  • 如何在单击项目时更改选项卡? bottom\u菜单。xml 从tabs.xml tabs.java StatTab片段: 无法解析名称newInstance() 谢谢你的任何帮助