一起學習Kubernetes:工作負載(Workload)

2024年2月6日 27点热度 0人点赞

Kubernetes 提供了幾個內置的 API 來聲明式管理工作負載及其組件。

應用以容器的形式在 Pods 中運行,雖然可以直接通過定義Pod來運行應用,但直接管理單個 Pod 的工作量將會非常繁瑣。例如,如果一個 Pod 失敗了,希望運行一個新的 Pod 來替換它,如果用手工來操作將會非常枯燥和繁瑣。

Kubernetes 工作負載(Workload)對象可以為你完成這些操作。

可以使用 Kubernetes API 創建工作負載對象,這些對象所表達的是比 Pod 更高級別的抽象概念,Kubernetes 控制平面根據你定義的工作負載對象規約自動管理 Pod 對象。

用於管理工作負載的內置 API 包括:

Deployment (也間接包括 ReplicaSet)是在集群上運行應用的最常見方式。Deployment 適合在集群上管理無狀態應用工作負載,其中 Deployment 中的任何 Pod 都是可互換的,可以在需要時進行替換。 (Deployment 替代原來的 ReplicationController API)。

StatefulSet 允許你管理一個或多個運行相同應用代碼、但具有不同身份標識的 Pod。 StatefulSet 與 Deployment 不同,Deployment 中的 Pod 是可互換的,而StatefulSet的Pod是有狀態的,不能隨便互換。 StatefulSet 最常見的用途是能夠建立其 Pod 與其持久化存儲之間的關聯。 例如,你可以運行一個將每個 Pod 關聯到 PersistentVolume 的 StatefulSet。如果該 StatefulSet 中的一個 Pod 失敗了,Kubernetes 將創建一個新的 Pod,並連接到相同的 PersistentVolume。

DaemonSet 定義了在特定節點上提供本地設施的 Pod,例如允許該節點上的容器訪問存儲系統的驅動。當必須在合適的節點上運行某種驅動或其他節點級別的服務時,你可以使用 DaemonSet。DaemonSet 中的每個 Pod 執行類似於經典 Unix / POSIX 服務器上的系統守護進程的角色。DaemonSet 可能對集群的操作至關重要,例如作為插件讓該節點訪問集群網絡,也可能幫助你管理節點,或者提供增強正在運行的容器平臺所需的、不太重要的設施。 你可以在集群的每個節點上運行 DaemonSets(及其 Pod),或者僅在某個子集上運行 (例如,隻在安裝了 GPU 的節點上安裝 GPU 加速驅動)。

Job 定義一次性任務,類似linux at。

CronJob 定義定時任務,根據排期表重復執行,類似於Linux crontab。