您可以使用以下两种基本结构在 Kubernetes 中构建任何复杂的容器化应用程序:Pod 和工作负载。构建应用程序后,可以使用第三个结构:服务(Kubernetes Service)将其暴露以供在同一集群中或外网上访问。
Pods
Pod 是共享网络命名空间和存储卷的一个或多个容器。大多数 Pod 只有一个容器。因此,当我们讨论 Pod 时,该术语通常与容器同义。您可以通过扩容 Pod 来增加这个 Pod 中定义的那组容器的实例。这些容器就是您的业务实现。通常,Pod 由工作负载进行扩缩容和管理。
工作负载
工作负载 是设置 Pod 部署规则的对象。根据这些规则,Kubernetes 将执行部署并使用应用程序的当前状态更新工作负载对应字段。工作负载使您可以定义应用程序的调度,扩展和升级规则。
工作负载类型
Kubernetes 将工作负载分为不同类型。Kubernetes 支持的最受欢迎的类型是:
-
部署最好用于无状态应用程序(即,您不必维护工作负载的状态)。由部署工作负载管理的 Pod 被视为独立且可处理的。如果 Pod 发生了问题,Kubernetes 会将其删除,然后重新创建一个新的 Pod。一个示例应用程序是 Nginx Web 服务器。
-
有状态集与部署相反,当您的应用程序需要维护其身份并存储数据时,最好使用它。类似的应用程序如 Zookeeper,即,需要存储状态的应用程序。
-
守护程序集确保集群中的每个节点都运行一个 Pod 副本。对于要收集日志或监控节点性能的用例,这种类似于守护进程的工作负载效果最佳。
-
任务启动一个或多个 Pod,并确保指定数量的 Pod 已成功终止。与管理需要一直运行的应用程序相反,任务最好用于完成特定任务,例如生成报表等。
-
定时任务与任务相似。但是,定时任务会按基于定义的
cron
时间表自动运行。
服务
在许多用例中,工作负载须是:
- 由集群中的其他工作负载访问。
- 暴露给外界。
您可以通过创建服务来实现这些目标。服务使用选择器/标签方法(查看代码示例)将服务映射到工作负载底层所对应的 Pod。在您通过 Rancher UI 创建工作负载时,Rancher 会根据您选择的服务端口和类型自动创建服务,从而简化了此映射过程。当然,您也可以手动创建自己的服务。
服务类型
Rancher 中有几种可用的服务。以下说明来自 Kubernetes 文档。
ClusterIP
通过集群内部 IP 暴露服务。选择此类型的服务时,服务仅可从集群内部访问。这是默认的
ServiceType
。NodePort
通过静态端口(
NodePort
)在每个节点的 IP 上暴露服务。创建NodePort
时,Kubernetes 也会自动分配一个ClusterIP
供集群内部使用。您可以通过请求<NodeIP>:<NodePort>
从集群外部访问NodePort
服务。LoadBalancer
使用云提供商的负载均衡器对外公开服务。不是所有的云提供商都支持这种类型的服务。如果您在自己的数据中心中部署的集群,那么您需要提供您自己的负载均衡实现,例如MetalLB。
工作负载选项
文档的此部分包含有关部署工作负载和使用工作负载选项的说明。