从容器运行时的角度来看,pod 和容器有什么区别?

问题描述

Kubernetes 文档将 pod 描述为围绕一个或多个容器的 wrapper。运行 pod 的 inside 的容器共享一组命名空间(例如网络),这让我认为 namespaces 是嵌套的(我对此表示怀疑)。从容器运行时的角度来看,这里的 wrapper 是什么?

因为容器只是受 namespaces,Cgroups 约束的进程,例如也许,pod 只是 Kubelet 启动的第一个 container,其余的容器都启动并按命名空间分组。

解决方法

主要区别在于网络,网络命名空间由同一 Pod 中的所有容器共享。也可以选择共享进程 (pid) 命名空间。这意味着同一个 Pod 中的容器都看到相同的 localhost 网络(否则它对其他一切都是隐藏的,就像 localhost 的正常情况一样)并且可以选择向其他容器中的进程发送信号。

这个想法是 Pod 是一组相关的容器,它本身并不是真正的包装器,而是一组应始终部署在一起的容器,无论出于何种原因。通常这是一个主容器,然后是一些提供支持服务(网格路由、日志收集等)的边车。

,

Pod 只是一组位于同一位置的容器和一个 Kubernetes 对象。 您可以部署 pod of containers,而不是单独部署它们。

最佳实践是您实际上不应该通过单个容器运行多个进程,这就是 pod 想法出现的地方。因此,通过运行 Pod,您将容器组合在一起并将它们编排为单个对象。

Pod 中的容器运行相同的网络命名空间(IP 地址和端口空间),因此您必须小心不要让两个进程使用相同的端口空间。 例如,当涉及到文件系统时,这会有所不同,因为容器 fs 来自映像 fs。除非它们共享一个卷,否则文件系统是相互隔离的。