OpenKruise v0.10.0 版本發(fā)布:新增應(yīng)用彈性拓?fù)涔芾怼?yīng)用防護(hù)等能力
1
背景
2
新功能概覽
1. WorkloadSpread:旁路的應(yīng)用彈性拓?fù)涔芾砟芰?/span>
應(yīng)用部署需要按 node 維度打散,避免堆疊(提高容災(zāi)能力) 應(yīng)用部署需要按 AZ(available zone)維度打散(提高容災(zāi)能力)
按 zone 打散時(shí),需要指定在不同 zone 中部署的比例數(shù),比如某個(gè)應(yīng)用在 zone a、b、c 中部署的 Pod 數(shù)量比例為 1 : 1 : 2 等(由于一些現(xiàn)實(shí)的原因比如該應(yīng)用在多個(gè) zone 中的流量不均衡等) 存在多個(gè) zone 或不同機(jī)型的拓?fù)?,?yīng)用擴(kuò)容時(shí),優(yōu)先部署到某個(gè) zone 或機(jī)型上,當(dāng)資源不足時(shí)再部署到另一個(gè) zone 或機(jī)型上(往后以此類推);應(yīng)用縮容時(shí),要按反向順序,優(yōu)先縮容后面 zone 或機(jī)型上的 Pod(往前以此類推) 存在多個(gè)基礎(chǔ)的節(jié)點(diǎn)池和彈性的節(jié)點(diǎn)池,應(yīng)用部署時(shí)需要固定數(shù)量或比例的 Pod 部署在基礎(chǔ)節(jié)點(diǎn)池,其余的都擴(kuò)到彈性節(jié)點(diǎn)池
apiVersion: apps.kruise.io/v1alpha1kind: WorkloadSpreadmetadata:name: workloadspread-demospec:targetRef:apiVersion: apps/v1 | apps.kruise.io/v1alpha1kind: Deployment | CloneSetname: workload-xxxsubsets:- name: subset-arequiredNodeSelectorTerm:matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues:- zone-amaxReplicas: 10 | 30%- name: subset-brequiredNodeSelectorTerm:matchExpressions:- key: topology.kubernetes.io/zoneoperator: Invalues:- zone-b
如果 Workload 類型是 CloneSet,則已經(jīng)支持了這個(gè) feature,可以實(shí)現(xiàn)縮容優(yōu)先級(jí) 如果 Workload 類型是 Deployment/ReplicaSet,則要求 Kubernetes version >= 1.21,且在 1.21 中要在 kube-controller-manager 上開啟 PodDeletionCost 這個(gè) feature-gate
2. PodUnavailableBudget:應(yīng)用可用性防護(hù)
應(yīng)用 owner 通過 Deployment 正在進(jìn)行版本升級(jí),與此同時(shí)集群管理員由于機(jī)器資源利用率過低正在進(jìn)行 node 縮容
中間件團(tuán)隊(duì)利用 SidecarSet 正在原地升級(jí)集群中的sidecar版本(例如:ServiceMesh envoy),同時(shí)HPA正在對(duì)同一批應(yīng)用進(jìn)行縮容 應(yīng)用 owner 和中間件團(tuán)隊(duì)利用 CloneSet、SidecarSet 原地升級(jí)的能力,正在對(duì)同一批 Pod 進(jìn)行升級(jí)
apiVersion: apps.kruise.io/v1alpha1kind: PodUnavailableBudgetmetadata:name: web-server-pubnamespace: webspec:targetRef:apiVersion: apps/v1 | apps.kruise.io/v1alpha1kind: Deployment | CloneSet | StatefulSet | ...name: web-server# selector 與 targetRef 二選一配置# selector:# matchLabels:# app: web-server# 保證的最大不可用數(shù)量maxUnavailable: 60%# 保證的最小可用數(shù)量# minAvailable: 40%
PodUnavailableBudgetDeleteGate:攔截防護(hù) Pod 刪除、驅(qū)逐等操作 PodUnavailableBudgetUpdateGate:攔截防護(hù) Pod 原地升級(jí)等更新操作
3. CloneSet 支持按拓?fù)湟?guī)則縮容
未調(diào)度 < 已調(diào)度 PodPending < PodUnknown < PodRunning
Not ready < ready 較小 pod-deletion cost < 較大 pod-deletion cost
較大打散權(quán)重 < 較小 處于 Ready 時(shí)間較短 < 較長
容器重啟次數(shù)較多 < 較少 創(chuàng)建時(shí)間較短 < 較長
如果應(yīng)用配置了 topology spread constraints ,則 CloneSet 縮容時(shí)會(huì)按照其中的 topology 維度打散來選擇 Pod 刪除(比如盡量打平多個(gè) zone 上部署 Pod 的數(shù)量) 如果應(yīng)用沒有配置 topology spread constraints ,則默認(rèn)情況下 CloneSet 縮容時(shí)會(huì)按照 node 節(jié)點(diǎn)維度打散來選擇 Pod 刪除(盡量減少同 node 上的堆疊數(shù)量)
4. Advanced StatefulSet 支持流式擴(kuò)容
apiVersion: apps.kruise.io/v1beta1kind: StatefulSetspec:# ...replicas: 100scaleStrategy:maxUnavailable: 10% # percentage or absolute number
5. 其他
SidecarSet 新增 imagePullSecrets、injectionStrategy.paused 等字段支持配置 sidecar 鏡像拉取 secret 以及暫停注入 Advanced StatefulSet 支持配合原地升級(jí)的鏡像提前預(yù)熱
3
最后
評(píng)論
圖片
表情
