k8s叢集安裝學習筆記三 阿新 • • 發佈:2021-09-14 資源控制器 什麼是控制器? Kubernetes 中內建了很多 controller(控制器),這些相當於一個狀態機,用來控制 Pod 的具體狀態和行為。 控制器型別 ReplicationController(基本淘汰了) 和 ReplicaSet Deployment DaemonSet StateFulSet Job/CronJob Horizontal Pod Autoscaling ReplicationController 和 ReplicaSet ReplicationController(RC)用來確保容器應用的副本數始終保持在使用者定義的副本數,即如果有容器異常退 出,會自動建立新的 Pod 來替代;而如果異常多出來的容器也會自動回收; 在新版本的 Kubernetes 中建議使用 ReplicaSet 來取代 ReplicationController 。ReplicaSet 跟 ReplicationController 沒有本質的不同,只是名字不一樣,並且 ReplicaSet 支援集合式的 selector; Deployment Deployment 為 Pod 和 ReplicaSet 提供了一個宣告式定義 (declarative) 方法,用來替代以前的 ReplicationController 來方便的管理應用。典型的應用場景包括; 1.定義 Deployment 來建立 Pod 和 ReplicaSet 2.滾動升級和回滾應用 3.擴容和縮容 4.暫停和繼續 Deployment DaemonSet DaemonSet 確保全部(或者一些)Node 上執行一個 Pod 的副本。當有 Node 加入叢集時,也會為他們新增一個 Pod 。當有 Node 從叢集移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會刪除它建立的所有 Pod 使用 DaemonSet 的一些典型用法: 1.執行叢集儲存 daemon,例如在每個 Node 上執行 glusterd 、 ceph 2.在每個 Node 上執行日誌收集 daemon,例如 fluentd 、 logstash 3.在每個 Node 上執行監控 daemon,例如 Prometheus Node Exporter、 collectd 、Datadog 代理、 New Relic 代理,或 Ganglia gmond Job Job 負責批處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個 Pod 成功結束。 CronJob Cron Job 管理基於時間的 Job,即: 1.在給定時間點只執行一次 2.週期性地在給定時間點執行 * * * * * (分時日月周)和linux的crontab有點類似 使用前提條件:**當前使用的 Kubernetes 叢集,版本 >= 1.8(對 CronJob)。對於先前版本的叢集,版本 <1.8, 啟動 API Server時,通過傳遞選項 --runtime-config=batch/v2alpha1=true可以開啟 batch/v2alpha1API** 典型的用法如下所示: 1.在給定的時間點排程 Job 執行 2.建立週期性執行的 Job,例如:資料庫備份、傳送郵件 StatefulSet StatefulSet 作為 Controller 為 Pod 提供唯一的標識。它可以保證部署和 scale 的順序 StatefulSet是為了解決有狀態服務的問題(對應Deployments和ReplicaSets是為無狀態服務而設計),其應用 場景包括: 1.穩定的持久化儲存,即Pod重新排程後還是能訪問到相同的持久化資料,基於PVC來實現 2.穩定的網路標誌,即Pod重新排程後其PodName和HostName不變,基於Headless Service(即沒有Cluster IP的Service)來實現。 3.有序部署,有序擴充套件,即Pod是有順序的,在部署或者擴充套件的時候要依據定義的順序依次依次進行(即從0到N-1,在下一個Pod執行之前所有之前的Pod必須都是Running和Ready狀態), 基於init containers來實現。 4.有序收縮,有序刪除(即從N-1到0) Horizontal Pod Autoscaling 應用的資源使用率通常都有高峰和低谷的時候,如何削峰填谷,提高叢集的整體資源利用率,讓service中的Pod 個數自動調整呢?這就有賴於Horizontal Pod Autoscaling了,顧名思義,使Pod水平自動縮放。 好記性不如爛筆頭,最難不過堅持