Kubernetes 文档将 pod 描述为wrapper
一个或多个容器。运行inside
pod 的容器共享一组命名空间(例如网络),这让我觉得namespaces
是嵌套的(我有点怀疑)。wrapper
从容器运行时的角度来看,这里是什么?
由于容器只是受namespaces, Cgroups
例如 Maybe 约束的进程,因此 Pod 只是container
Kubelet 启动的第一个容器,其余容器由命名空间启动和分组。
Kubernetes 文档将 pod 描述为wrapper
一个或多个容器。运行inside
pod 的容器共享一组命名空间(例如网络),这让我觉得namespaces
是嵌套的(我有点怀疑)。wrapper
从容器运行时的角度来看,这里是什么?
由于容器只是受namespaces, Cgroups
例如 Maybe 约束的进程,因此 Pod 只是container
Kubelet 启动的第一个容器,其余容器由命名空间启动和分组。
主要区别在于网络,网络命名空间由同一个 Pod 中的所有容器共享。可选地,进程 (pid) 命名空间也可以共享。这意味着同一个 Pod 中的容器都可以看到同一个localhost
网络(否则它会被其他所有东西隐藏起来,就像 localhost 一样),并且可以选择向其他容器中的进程发送信号。
这个想法是 Pod 是一组相关的容器,本身并不是真正的包装器,而是一组容器,无论出于何种原因都应该始终部署在一起。通常这是一个主容器,然后是一些提供支持服务(网格路由、日志收集等)的 sidecar。
Pod 只是一组位于同一位置的容器和一个 Kubernetes 对象。您可以部署一个pod of containers
.
最佳实践是,您实际上不应该通过单个容器运行多个进程,这就是 pod 想法出现的地方。因此,通过运行 pod,您可以将容器组合在一起并将它们编排为单个对象。
pod 中的容器运行相同的网络命名空间(IP 地址和端口空间),因此您必须小心不要让两个进程使用相同的端口空间。例如,当涉及到文件系统时,这会有所不同,因为容器 fs 来自映像 fs。文件系统是隔离的,除非它们共享一个卷。