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。