我的理解是,由于pod被定义为一组容器,这些容器在这些容器之间提供共享的资源(如存储和网络),可以将其视为工作节点中的命名空间,也就是说,不同的pod代表不同的容器工作者节点机器中的命名空间?
否则,pod实际上是一个进程,该进程首先由部署启动(或运行或执行),然后启动其中的容器吗? 我可以通过ps命令看到它吗? (我确实尝试过,只有docker容器正在运行,所以我排除了pod是一个进程)
答案 0 :(得分:5)
如果我们从基础入手
什么是命名空间(以通用方式)?
名称空间是一个声明性区域,它为其内部的标识符(类型,函数,变量等的名称)提供范围。命名空间用于将代码组织到逻辑组中,并防止发生名称冲突,尤其是当您的代码库包含多个库时。
什么是Pod(在K8s中)?
吊舱是一组一个或多个容器(例如Docker容器),具有共享的存储/网络,以及有关如何运行容器的规范。广告连播的内容始终位于同一地点,并在同一时间安排,并在共享上下文中运行。 Pod为特定于应用程序的“逻辑主机”建模-它包含一个或多个相对紧密耦合的应用程序容器-在容器之前的世界中,在同一物理或虚拟机上执行将意味着在同一逻辑主机上执行
尽管Kubernetes不仅支持Docker,而且还支持更多的容器运行时,但是Docker是最常见的运行时,它有助于以Docker术语描述pod。
pod的共享上下文是一组 Linux命名空间,cgroup和潜在的其他隔离方面-隔离Docker容器也是如此。在Pod的上下文中,各个应用程序可能会应用进一步的子隔离。 Some deep dive into Pods
什么是命名空间(用k8s表示)?
命名空间旨在用于具有多个用户的环境,这些用户分布在多个团队或项目中。
命名空间为名称提供了作用域。资源名称必须在名称空间内唯一,但在名称空间之间不唯一。
命名空间是一种在多个用户之间划分群集资源的方法。
所以我认为只需说:
是的,豆荚有一个命名空间:
荚类型代表命名空间,但在容器级别(它们在一组容器之间共享相同的网络,卷/存储上下文)
但是名称空间(就K8而言)是更高的隔离级别-在集群级别上,由所有容器(服务,部署,dns名称,IP,配置映射,机密,角色等)共享
您还应该看到这个link
希望这可以解决这个问题。
答案 1 :(得分:1)
是的,您可以说pod是容器共享的名称空间。使用Docker执行器时,将创建一个pause
容器,该容器将建立网络,文件系统和进程名称空间,以供后续容器使用。
这是因为Docker不将Pod理解为一流的原语,并且不会在其他运行时看到pause
容器。