StatefulSet擴容縮容
StatefulSet更新政策
StatefulSet灰階釋出
StatefulSet級聯删除和非級聯删除
守護程序服務DaemonSet
DaemonSet的使用
DaemonSet的更新和復原
Label&Selector
什麼是HPA?
自動擴縮容HPA實踐
檢視nginx副本
StatefulSet副本啟動順序按照名稱0,1,2,隻有web-0完全啟動之後才會啟動web-1,web-1完全啟動之後才會啟動web-2
删除的時候順序與啟動相反,從最後一個序号開始,2,1,0,如果web-2删除過程中,web-0挂掉了,那麼web-1不會被删除,必須等待web-0啟動狀态變為ready之後,才會删除web-1
打開另一個視窗監控StatefulSet
擴容到5個副本
監控情況(可以看到按順序啟動)
縮容到2個副本
監控情況(可以看到删除的順序與啟動的順序相反)
StatefulSet滾動更新的時候會先删除舊的副本,再建立新的副本,如果隻有一個副本的話,會導緻業務不可用,是以要根據自己的實際情況選擇使用StatefulSet或者Deployment,如果必須固定主機名或者pod名稱,建議使用StatefulSet
檢視主機名稱
RollingUpdate
OnDelete
StatefulSet和Deployment一樣,有幾種更新方式
檢視更新方式
擴容到3個副本
檢視pod
滾動更新順序是web-2,web-1,web-0,從下往上更新,如果更新過程中web-0挂掉了,則會等待web-0恢複到狀态為ready之後再繼續從下往上滾動更新
修改鏡像位址觸發更新
檢視更新過程
檢視監控
修改更新狀态為OnDelete
修改鏡像位址
檢視pod,可以看到沒有更新
手動删除pod觸發更新
檢視web-2鏡像,可以看到更新成功
檢視web-1鏡像,可以看到沒有更新,是以隻有删除的時候才會更新鏡像
删除兩個pod
檢視監控,可以看到按照删除順序建立
檢視所有pod鏡像,可以看到三個pod的鏡像都更新了
修改配置
打開另一個視窗監控
修改鏡像(nginx:1.15.2 -> nginx:1.15.3)
檢視監控,可以看到隻有大于2的在更新
檢視鏡像,可以看到web-2的鏡像是nginx:1.15.3,另外兩個是nginx:1.15.2
可以使用這種機制實作灰階機制,先釋出一兩個執行個體,确認沒有問題之後再釋出所有執行個體,這就是stateful的分段更新,相當于灰階釋出的機制,也可以使用其它的方式,比如服務網格,或者myservices
級聯删除:删除sts時同時删除Pod
非級聯删除:删除sts時不删Pod
擷取sts
級聯删除
建立pod
非級聯删除
檢視sts,可以看到sts被删除了
檢視pod,可以看到pod依然存在,隻是沒有sts管理了,再次删除pod不會被重新建立
删除web-1,web-0
檢視pod,可以看到沒有sts管理的pod,删除之後不會重新建立
DaemonSet:守護程序集,縮寫為ds,在所有節點或者是比對的節點上都部署一個Pod。
使用DaemonSet的場景
運作叢集存儲的daemon,比如ceph或者glusterd
節點的CNI網絡插件,calico
節點日志的收集:fluentd或者是filebeat
節點的監控:node exporter
服務暴露:部署一個ingress nginx
建立DaemonSet
建立一個ds,因為沒有配置notselect,所有它會在每個節點啟動一個
給需要部署的容器打标簽
檢視容器标簽
修改nginx-ds.yaml
更新配置
檢視pod,可以看到不符合标簽的pod被删除了
Statefulset 和 DaemonSet 更新復原和 Deployment 一緻
更新政策推薦使用 OnDelete
因為 DaemonSet 可能部署在 k8s 叢集的很多節點上,一開始先在一些節點上進行測試,删除後觸發更新不影響其他節點
檢視更新記錄
Label:對k8s中各種資源進行分類、分組,添加一個具有特别屬性的一個标簽
Selector:通過一個過濾的文法進行查找到對應标簽的資源
當Kubernetes對系統的任何API對象如Pod和節點進行“分組”時,會對其添加Label(key=value形式的“鍵-值對”)用以精準地選擇對應的API對象。而Selector(标簽選擇器)則是針對比對對象的查詢方法。注:鍵-值對就是key-value pair
例如,常用的标簽tier可用于區分容器的屬性,如frontend、backend;或者一個release_track用于區分容器的環境,如canary、production等
定義 Label
通過Selector對其篩選
在Deployment或其他控制器中指定将Pod部署到該節點
對Service進行Label
檢視Labels
檢視所有Version為v1的svc
Selector主要用于資源的比對,隻有符合條件的資源才會被調用或使用,可以使用該方式對叢集中的各類資源進行配置設定
假如對Selector進行條件比對,目前已有的Label如下
選擇app為reviews或者productpage的svc
選擇app為productpage或reviews但不包括version=v1的svc
選擇labelkey名為app的svc
在實際使用中,Label的更改是經常發生的事情,可以使用overwrite參數修改标簽
修改标簽,比如将version=v1改為version=v2
删除标簽,比如删除version
Horizontal Pod Autoscaler
水準 pod 自動伸縮器
k8s 不推薦使用 VPA,因為節點有很多,推薦将流量分發到不同的節點上,而不是分發到同一個節點上
HPA v1為穩定版自動水準伸縮,隻支援CPU名額
V2為beta版本,分為v2beta1(支援CPU、記憶體和自定義名額)
v2beta2(支援CPU、記憶體、自定義名額Custom和額外名額ExternalMetrics)
必須安裝metrics-server或其他自定義metrics-server
必須配置requests參數
不能擴容無法縮放的對象,比如DaemonSet
dry-run導出yaml檔案,以便于進行二次修改
編輯檔案 hpa-nginx.yaml,containers 添加參數
建立
暴露一個服務
配置autoscale
循環執行提高cpu,暫停後cpu下降
http://www.kubeasy.com/

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。
歡迎轉載、使用、重新釋出,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。