天天看點

Kubernetes全棧架構師(資源排程下)--學習筆記

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/

Kubernetes全棧架構師(資源排程下)--學習筆記

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。

歡迎轉載、使用、重新釋出,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。