工作负载管理
Kubernetes 提供了一些内置 API,用于对您的工作负载及其组件进行声明式管理。
最终,您的应用程序以容器的形式运行在Pod中;但是,管理单个 Pod 会非常耗力。例如,如果一个 Pod 出现故障,您可能希望运行一个新的 Pod 来替代它。Kubernetes 可以为您做到这一点。
您可以使用 Kubernetes API 创建代表比 Pod 更高抽象层级的工作负载对象,然后 Kubernetes 控制平面会根据您定义的工作负载对象的规约,代表您自动管理 Pod 对象。
内置的工作负载管理 API 包括:
Deployment(以及,间接的,ReplicaSet),这是在集群上运行应用程序最常见的方式。Deployment 非常适合管理集群上的无状态应用程序工作负载,其中 Deployment 中的任何 Pod 都是可互换的,如果需要可以被替换。(Deployment 替代了旧的ReplicationController API)。
一个StatefulSet允许您管理一个或多个 Pod(它们都运行相同的应用程序代码),其中 Pod 依赖于拥有一个独立的身份。这与 Deployment 不同,Deployment 中的 Pod 预期是可互换的。StatefulSet 最常见的用途是能够在其 Pod 和持久化存储之间建立链接。例如,您可以运行一个 StatefulSet,将每个 Pod 与一个PersistentVolume关联。如果 StatefulSet 中的一个 Pod 失败,Kubernetes 会创建一个替代 Pod,并连接到相同的 PersistentVolume。
一个DaemonSet定义了提供特定节点本地服务的 Pod;例如,一个驱动程序,允许该节点上的容器访问存储系统。当驱动程序或其他节点级服务必须在其发挥作用的节点上运行时,您可以使用 DaemonSet。DaemonSet 中的每个 Pod 都扮演着类似于经典 Unix / POSIX 服务器上的系统守护进程的角色。DaemonSet 可能对集群的操作至关重要,例如允许该节点访问集群网络的插件,它可能帮助您管理节点,或者它可以提供一些不太重要但能增强您正在运行的容器平台的功能。您可以在集群中的每个节点上运行 DaemonSet(及其 Pod),也可以只在部分节点上运行(例如,只在安装了 GPU 的节点上安装 GPU 加速器驱动程序)。
您可以使用Job和/或CronJob来定义那些运行直到完成并停止的任务。Job 代表一次性任务,而 CronJob 则按照计划重复运行。
本节中的其他主题