Kubernetes 中的 Pod 是最小的可部署单元,它包含一个或多个紧密相关的容器,这些容器共享网络和存储资源。
Pod 的特点
-
共享网络命名空间:同一个 Pod 中的容器共享同一个 IP 地址和端口空间,可以通过 localhost 相互通信。
-
共享存储卷:Pod 中的容器可以共享挂载的存储卷,实现数据共享和持久化。
-
原子性调度:Pod 作为一个整体被调度到同一个 Node 上运行。
-
临时性:Pod 是临时的、可替换的,当 Pod 被删除或 Node 发生故障时,Pod 不会自动恢复。
Pod 的生命周期
Pod 的生命周期包括以下阶段:
-
Pending:Pod 已被创建,但容器尚未启动,可能是因为镜像下载中或资源不足。
-
Running:Pod 中的所有容器都已创建,至少有一个容器正在运行。
-
Succeeded:Pod 中的所有容器都已成功终止。
-
Failed:Pod 中的所有容器都已终止,但至少有一个容器以失败状态终止。
-
Unknown:无法获取 Pod 的状态,通常是因为与 Pod 所在的 Node 通信失败。
Pod 的重启策略
Kubernetes 支持三种 Pod 重启策略:
-
Always:容器失败时总是重启,这是默认策略。
-
OnFailure:只有在容器以非零退出码失败时才重启。
-
Never:容器失败时不重启。
Pod 与容器的关系
Pod 是容器的封装,一个 Pod 可以包含:
- 单个主容器(最常见)
- 一个主容器加一个或多个辅助容器(Sidecar 模式)
- 多个协作的容器
最佳实践
-
一个 Pod 一个容器:对于大多数应用,建议一个 Pod 只包含一个容器,这样可以更好地管理和扩展。
-
使用 Sidecar 模式:当需要多个紧密协作的容器时,可以使用 Sidecar 模式,例如日志收集、监控代理等。
-
避免在 Pod 中运行多个不相关的容器:这会增加管理的复杂性,不利于扩展和故障排查。
-
合理设置资源限制:为 Pod 设置 CPU 和内存的 requests 和 limits,避免资源争用。
-
使用健康检查:配置 livenessProbe 和 readinessProbe,确保 Pod 的健康状态。