Pod
Pod 是 Kubernetes 中可以創建和管理的最小部署單元。Pod 代表集群上運行的一個進程。Pod 可以包含一個或多個容器,這些容器共享存儲、網絡、以及如何運行的規范。Pod 內的容器共享 IPC、網絡、UTS 以及可能的其他命名空間。Pod 也可以有一個或多個 Volume,它們定義為 Pod 的一部分,并為 Pod 中的容器所共享。
Pod 是一種低級的“工作負載”資源,主要用于支持更高級別的控制結構。
ReplicaSet
ReplicaSet 確保指定數量的 Pod “副本”正在運行。與直接創建 Pod 不同,ReplicaSet 會自動替換任何已刪除或終止的 Pod,以確保 Pod 副本的總數始終保持為用戶所期望的值。
ReplicaSet 是基于標簽選擇器來識別其應該管理哪些 Pod。在 Kubernetes 中,標簽是用于組織 Pod 的一種關鍵方式。一個標簽是一個附加到對象的鍵值對。
盡管您可以直接操作 ReplicaSet 來創建和管理 Pod,但在實踐中,您通常會使用更高層次的控制結構(如 Deployment 或 StatefulSet)來管理 ReplicaSet。
Deployment
Deployment 為 Pods 和 ReplicaSet 提供了聲明式更新。您只需要在 Deployment 中描述您想要的狀態,Deployment 控制器就會更改實際狀態以匹配您所期望的狀態。您可以定義多個不同的更新策略,包括滾動更新,以便在推出新版本的 Pod 時不會中斷服務。
在實踐中,您通常不會直接操作 ReplicaSet,而是使用 Deployment 來管理 ReplicaSet。Deployment 擁有創建和更新 ReplicaSet 的規范。
StatefulSet
StatefulSet 是用于管理有狀態應用的工作負載 API 對象。有狀態應用是需要保留其狀態的應用,并且狀態獨立于運行該應用的 Pod。
StatefulSet 用于部署和擴展有狀態應用。它確保每個 Pod 的持久標識符是唯一的,并且基于這個標識符,它提供了穩定的網絡標識和持久的存儲。StatefulSet 中的 Pod 是按順序啟動的,并且是按順序終止的。在縮放 StatefulSet 時,操作會按 Pod 名稱的字典順序進行。
StatefulSet 對于需要唯一標識符、有序部署、有序擴展和有序終止的應用來說是非常有用的,例如數據庫集群。
DaemonSet
DaemonSet 確保在每個 Kubernetes 節點上運行一個 Pod 副本。作為守護進程集運行的 Pod 通常用于執行系統任務,這些任務需要在每個節點上且僅在一個節點上運行。
DaemonSet 的一些典型用例包括:
- 在集群的每個節點上運行存儲守護進程,例如 glusterd、ceph。
- 在每個節點上運行日志收集守護進程,例如 fluentd、logstash。
- 在每個節點上運行監控守護進程,例如 Prometheus Node Exporter、collectd、Dynatrace OneAgent。
Job
Job 代表一次性的任務,當任務完成時,Job 對象也就完成了它的工作。例如,你可以使用 Job 來運行一個 Pod,直到它成功完成。當 Pod 成功終止時,Job 將被視為完成。如果 Pod 因為某種原因失敗了,Job 可以根據重啟策略來重啟 Pod。
簡單的批處理作業和并行處理作業都是 Job 的理想用例。
CronJob
CronJob 表示基于時間的 Job,用于在給定時間點定期運行。
CronJob 使用 Cron 格式的時間表來調度 Job 的運行時間。例如,您可以創建一個 CronJob,在每天中午運行一個 Job。
CronJob 對象類似于 Unix crontab (cron table) 文件,它使您能夠為周期性任務設置基于時間的調度。
總結
Kubernetes 提供了多種工作負載對象,每種都有自己的用例和優勢。選擇正確的工作負載對象對于在 Kubernetes 集群上成功運行您的應用或服務至關重要。通過了解每種工作負載對象的特性和用法,您可以構建出高效、可靠且可擴展的 Kubernetes 集群。