Kubernetes 工作负载和 Pod
你可以使用两种基本结构(pod 和工作负载)在 Kubernetes 中构建复杂的容器化应用程序。构建应用程序后,你可以使用第三种结构(service)在集群中或互联网上公开应用程序。
Pod
Pod 是一个或多个共享网络命名空间和存储卷的容器。大多数 pod 只有一个容器。因此,我们讨论的 pod 通常等同于 容器。扩展 pod 的方式与扩展容器的方式相同,即配置实现服务的同一 pod 的多个实例。通常,Pod 会根据工作负载进行扩展和管理。
工作负载
工作负载 是为 pod 设置部署规则的对象。Kubernetes 基于这些规则执行部署,并根据应用程序的当前状态来更新工作负载。 工作负载让你可以定义应用程序调度、扩展和升级的规则。
工作负载类型
Kubernetes 将工作负载分为不同的类型。Kubernetes 支持的最流行的类型是:
-
Deployment 最适合用于无状态应用程序(即不需要维护工作负载的状态)。由 Deployment 类型工作负载管理的 Pod 是独立且一次性的。如果 pod 中断了,Kubernetes 会删除该 pod 然后重新创建它。一个示例应用程序是 Nginx Web 服务器。
-
与 Deployment 相比,StatefulSet 最适合在需要维护身份和存储数据的应用程序中使用。适用的应用程序类似于 Zookeeper(一个需要数据库进行存储的应用程序)。
-
Daemonset 确保集群中的每个节点都运行 pod 的副本。如果你需要收集日志或监控节点性能,这种类似 daemon 的工作负载效果是最好的。
-
Job 启动一个或多个 Pod 并确保指定数量的 Pod 能成功终止。Job 最好用于运行有限任务至完成状态,而不是管理正在进行的应用程序的所需状态。
-
CronJobs 与 Job 类似。但是,CronJob 会基于 cron 的计划运行到完成状态。
Services
在许多用例中,工作负载必须:
- 由集群中的其他工作负载访问。
- 暴露给外部。
你可以通过创建一个 Service 实现这些目的。Service 使用选择器/标签(查看代码示例)来映射到底层工作负载的 pod。Rancher UI 使用你选择的服务端口和类型来自动创建 service 以及工作负载,从而简化此映射过程。
Service 类型
Rancher 中有几种可用的 Service 类型。以下描述来自 Kubernetes 文档。
ClusterIP
在集群内部 IP 上公开 Service。如果你选择此值,Service 只能从集群内访问。这是默认的
ServiceType
。NodePort
在每个节点 IP 上的静态端口(
NodePort
)上暴露 Service。ClusterIP
service 是自动创建的,而NodePort
service 会路由到 ClusterIP service。你可以通过请求<NodeIP>:<NodePort>
在集群外部联系NodePort
service。LoadBalancer
使用云提供商的负载均衡器向外部公开服务。
NodePort
和ClusterIP
service 是自动创建的,外部负载均衡器会路由到这些 service。
工作负载选项
以下文档介绍了如何部署工作负载和使用工作负载选项。