Kubernetes Deployment StatefulSet DaemonSet HPA
Replication Controller 和 ReplicaSet
Replication Controller 和 ReplicaSet 都是用於控制pod數量符合期望,ReplicaSet是支援基於集合的標籤選擇器的下一代Replication Controller,它主要用作Deployment協調建立、刪除和更新Pod,ReplicaSet支援標籤選擇器。Replication Controller 和 ReplicaSet 一般不會單獨使用,多數是通過其它資源進行呼叫,如deployment。
Deployment
用於部署無狀態的服務;
更新:kubectl set image deploy nginx nginx=nginx:1.15.3 –record # –record 將更新記錄到歷史中,方便後續進行回滾;
檢視更新過程:kubectl rollout status deploy nginx
檢視更新的歷史版本:kubectl rollout history deploy nginx
回滾到上一版本:kubectl rollout undo deploy nginx
檢視歷史版本的詳細資訊: kubectl rollout history deploy nginx --revision=5
回滾到指定的歷史版本:kubectl rollout undo deploy nginx --to-revision=5
Deployment 暫停和恢復:
Deployment 暫停之後,對Deployment 的修改將不會立即作用到Deployment 上,需要使用恢復的指令將Deployment 恢復,恢復後Deployment 將暫停之後的修改更新到當前的Deployment 上;
應用:需要通過命令多次修改Deployment ,並希望將所有的修改執行之後,再一次性應用到Deployment 上;
暫停:kubectl rollout pause deployment nginx
修改:kubectl set . . . . . .
恢復:kubectl rollout resume deploy nginx
更新策略:
RollingUpdate 滾動更新,可以設定最大不可用數量或者設定更更新過程中可以允許超過期望pod的數量;
Recreate 重建,該更新策略執行後更新後,pod並不會立即更新,而是需要等到pod被刪除之後,新建的pod才會使用更新的版本;
StatefulSet
StatefulSet(有狀態集,縮寫為sts)常用於部署有狀態的且需要有序啟動的應用程式。
使用 StatefulSet 創建出來的pod,名稱規則如下:
StatefulSetName-0、StatefulSetName-1 . . . . . .
StatefulSet建立的Pod一般使用Headless Service進行通訊,Headless一般的格式為:
statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local
示例:使用 StatefulSet 管理redis叢集,從節點配置:
slaveof redis-ms-0.redis-ms.public-service.svc.cluster.local 6379
注意:
StatefulSet目前使用Headless Service(無頭服務)負責Pod的網路身份和通訊,需要提前建立此服務。
刪除一個StatefulSet時,不保證對Pod的終止,要在StatefulSet中實現Pod的有序和正常終止,可以在刪除之前將StatefulSet的副本縮減為0。
更新:
updateStrategy:
rollingUpdate:
partition: 0 # partition 後面的數字,將會和 statefulSetName-{0..N-1} 中的數字比較,只更新 大於等於0的pod
type: RollingUpdate
DaemonSet
DaemonSet 在節點上只能存在一個,一般用於節點資訊收集,如日誌、節點監控,CNI的網路外掛也是 DaemonSet;
也可根據標籤選在某些節點進行DaemonSet 部署;
HPA:Horizontal Pod Autoscaler
HPA v1為穩定版自動水平伸縮,只支援CPU指標
V2為beta版本,分為v2beta1(支援CPU、記憶體和自定義指標)
v2beta2(支援CPU、記憶體、自定義指標Custom和額外指標ExternalMetrics)
注意:
如果是根據CPU或者記憶體進行HPA的話,需要為建立的容器指定cpu和記憶體資源;注意:1顆cpu = 1000m
使用指令建立一個簡單的:kubectl autoscale deployment hpa-nginx --cpu-percent=10 --min=1 --max=10