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

What's the difference between pod and container from container runtime's perspective?

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

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

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

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

Pod 只是一组位于同一位置的容器和一个 Kubernetes 对象。 您可以部署 pod of containers.

而不是单独部署它们

最佳实践是您实际上不应该 运行 通过单个容器进行多个进程,这就是 pod idea 的用武之地。因此,使用 运行ning pods,您将容器组合在一起并将它们编排为单个对象。

pod 中的容器 运行 具有相同的网络名称space(IP 地址和端口 space),因此您必须注意不要使用相同的端口 space 被两个进程使用。 这在文件系统方面有所不同,因为容器 fs 来自图像 fs。文件系统是隔离的,除非它们共享一个卷。