日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenKruise v0.7.0 版本发布:新增周期任务分发控制器

發(fā)布時(shí)間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenKruise v0.7.0 版本发布:新增周期任务分发控制器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 | 王思宇(酒祝)
來源|阿里巴巴云原生公眾號(hào)

前言

OpenKruise 是阿里云開源的大規(guī)模應(yīng)用自動(dòng)化管理引擎,在功能上對(duì)標(biāo)了 Kubernetes 原生的 Deployment/StatefulSet 等控制器,但 OpenKruise 提供了更多的增強(qiáng)功能,如:優(yōu)雅原地升級(jí)、發(fā)布優(yōu)先級(jí)/打散策略、多可用區(qū) workload 抽象管理、統(tǒng)一 sidecar 容器注入管理等,這些都是經(jīng)歷了阿里巴巴超大規(guī)模應(yīng)用場(chǎng)景打磨出的核心能力,這些 feature 幫助我們應(yīng)對(duì)了更加多樣化的部署環(huán)境和需求、為集群維護(hù)者和應(yīng)用開發(fā)者帶來了更加靈活的部署發(fā)布組合策略。

目前在阿里巴巴內(nèi)部云原生環(huán)境中,應(yīng)用全部統(tǒng)一使用 OpenKruise 的能力做 Pod 部署、發(fā)布管理,而不少業(yè)界公司和阿里云上的客戶由于 K8s 原生 Deployment 等負(fù)載不能完全滿足需求,也轉(zhuǎn)而采用 OpenKruise 作為應(yīng)用部署載體。我們希望 OpenKruise 可以讓每一位 Kubernetes 開發(fā)者和阿里云上的用戶,都能便捷地使用上阿里巴巴內(nèi)部云原生應(yīng)用所統(tǒng)一使用的部署發(fā)布能力!

附:OpenKruise 在阿里巴巴的應(yīng)用參考文章

新版本概覽

Kruise 在 2020 年 11 月 16 日發(fā)布了最新的 v0.7.0 版本,包括了一些主體功能和優(yōu)化迭代。以下內(nèi)容將對(duì)新版本做一個(gè)整體的概覽介紹。

1. Advanced StatefulSet

Advanced StatefulSet 基于原生 StatefulSet 上增強(qiáng)了發(fā)布能力,比如 maxUnavailable 并行發(fā)布、原地升級(jí)等。

官網(wǎng)文檔:https://openkruise.io/zh-cn/docs/advanced_statefulset.html

1)OpenKruise 中首個(gè)進(jìn)入 v1beta1 版本的?CRD

過去 OpenKruise 中提供的自定義 workload 均是 v1alpha1 版本,隨著阿里巴巴內(nèi)部和眾多社區(qū)用戶的大規(guī)模使用,我們會(huì)逐漸將穩(wěn)定的能力升級(jí)到更高的版本。本次 Advanced StatefulSet 是首個(gè)進(jìn)入 v1beta1 的 CRD,后續(xù) CloneSet、SidecarSet 等資源也會(huì)逐漸跟進(jìn)。

那么對(duì)于過去使用 v1alpha1 版本 Advanced StatefulSet 的用戶,升級(jí)到 v1beta1 版本是否會(huì)有問題呢?這里明確地告訴大家:是沒有風(fēng)險(xiǎn)的。不僅存量的 Advanced StatefulSet 對(duì)象會(huì)自動(dòng)轉(zhuǎn)到 v1beta1 版本,而且用戶還可以繼續(xù)沿用 v1alpha1 的接口和客戶端來操作新版本的對(duì)象。

首先看圖中新版本 Advanced StatefulSet 的 CRD 定義:

  • 設(shè)置了 conversion 字段,其中指定通過 kruise-webhook-service 來提供 convert 服務(wù),這個(gè) service 后端掛載的其實(shí)就是 kruise-controller-manager 節(jié)點(diǎn)。Kruise 的 MutatingWebhookConfiguration/ValidationWebhookConfiguration 中配置的也是這個(gè) service。

  • versions 列表中目前有 v1alpha1 和 v1beta1 兩個(gè)版本,其中后者的 storage 設(shè)置為 true,表示在 etcd 中存儲(chǔ)的是這個(gè)版本。

再來看圖中的 conversion 鏈路:

  • 當(dāng)用戶直接使用 v1beta1 接口操作 Advanced StatefulSet,不需要 conversion 轉(zhuǎn)換,apiserver 直接和 etcd 交互。

  • 如果用戶使用老版本的 v1alpha1 接口操作 Advanced StatefulSet:

    • 寫操作:apiserver 會(huì)先調(diào)用 webhook 將用戶寫的 v1alpha1 對(duì)象轉(zhuǎn)為 v1beta1,并寫入 etcd。
    • 讀操作:apiserver 將來自于 etcd 的 v1beta1 對(duì)象通過 webhook 轉(zhuǎn)為 v1alpha1,再返回給用戶。

對(duì)多版本 conversion 的邏輯有興趣的同學(xué)可以閱讀源碼:https://github.com/openkruise/kruise/blob/master/apis/apps/v1alpha1/statefulset_conversion.go

2)Ordinal 序號(hào)保留

通常來說,不管是社區(qū)原生 StatefulSet 或是 Advanced StatefulSet,擴(kuò)容出來的 Pod 以及 PVC 都是連續(xù)序號(hào)。比如,對(duì)于一個(gè) replicas=4 的 StatefulSet,那么創(chuàng)建出來的 Pod 序號(hào)則是 [0,1,2,3]。
但有些情況下,用戶需要指定刪除一個(gè)序號(hào)的 Pod,并希望 StatefulSet 暫時(shí)跳過這個(gè)序號(hào)。這種需求在使用 Local PV 的場(chǎng)景下尤為突出:當(dāng)一些節(jié)點(diǎn)出現(xiàn)故障的時(shí)候,如果只是刪除原 Pod,那么當(dāng)重建出相同序號(hào)的 Pod 復(fù)用了原有的 PVC/PV,還是會(huì)調(diào)度到原來的節(jié)點(diǎn)上。

從 Advanced StatefulSet 的 v1beta1 版本開始(對(duì)應(yīng) Kruise 版本 >= v0.7.0),我們提供了序號(hào)保留功能:

apiVersion: apps.kruise.io/v1beta1 kind: StatefulSet spec:# ...replicas: 4reserveOrdinals:- 1

通過在 reserveOrdinals 字段中寫入需要保留的序號(hào),Advanced StatefulSet 會(huì)自動(dòng)跳過創(chuàng)建這些序號(hào)的 Pod。如果 Pod 已經(jīng)存在,則會(huì)被刪除。注意,spec.replicas 是期望運(yùn)行的 Pod 數(shù)量,spec.reserveOrdinals 是要跳過的序號(hào)。

因此,對(duì)于一個(gè) replicas=4, reserveOrdinals=[1] 的 Advanced StatefulSet,實(shí)際運(yùn)行的 Pod 序號(hào)為 [0,2,3,4]。

  • 如果要把 Pod-3 做遷移并保留序號(hào),則把 3 追加到 reserveOrdinals 列表中。控制器會(huì)把 Pod-3 刪除并創(chuàng)建 Pod-5(此時(shí)運(yùn)行中 Pod 為 [0,2,4,5])。

  • 如果只想刪除 Pod-3,則把 3 追加到 reserveOrdinals 列表并同時(shí)把 replicas 減一修改為 3。控制器會(huì)把 Pod-3 刪除(此時(shí)運(yùn)行中 Pod 為 [0,2,4])。

2. CloneSet

CloneSet 控制器提供了高效管理無狀態(tài)應(yīng)用的能力,它可以對(duì)標(biāo)原生的 Deployment,但相比之下,CloneSet 提供了很多增強(qiáng)功能。

官網(wǎng)文檔:http://openkruise.io/zh-cn/docs/cloneset.html

1)partition 支持百分比

CloneSet 中支持使用 partition 字段控制發(fā)布時(shí)的灰度數(shù)量,過去版本中這個(gè)字段只能設(shè)置為一個(gè)絕對(duì)值,而從 v0.7.0 開始可以設(shè)置為百分比。它的語義是:保留舊版本 Pod 的數(shù)量或百分比,默認(rèn)為 0。

apiVersion: apps.kruise.io/v1alpha1 kind: CloneSet spec:# ...updateStrategy:partition: 80% # 表示只將 20% 比例的 Pod 升級(jí)為新版本;或者也可以設(shè)置為保留舊版本數(shù)量的絕對(duì)值

如果在發(fā)布過程中設(shè)置了 partition:

  • 如果是數(shù)字,控制器會(huì)將 (replicas - partition) 數(shù)量的 Pod 更新到最新版本。

  • 如果是百分比,控制器會(huì)將 (replicas * (100% - partition)) 數(shù)量的 Pod 更新到最新版本。

2)其他優(yōu)化點(diǎn)

解決了過去一些邊緣場(chǎng)景下的 bug(其中要感謝社區(qū)同學(xué)們的反饋和貢獻(xiàn)):

  • 不滿足 selector 匹配條件的 Pod 自動(dòng)去除 owner reference。

  • 解決 resourceVersionExpectation 偶發(fā)的 race condition。

  • 解決使用了 gracePeriodSeconds 優(yōu)雅原地升級(jí)時(shí)連續(xù)升級(jí)的版本覆蓋問題。

3. AdvancedCronJob(新增控制器)

AdvancedCronJob 是 v0.7.0 中新增的控制器,它一個(gè) CronJob 的擴(kuò)展版本,感謝來自 Spectro Cloud 的 rishi-anand 的貢獻(xiàn)!

原生 CronJob 只支持創(chuàng)建 Job 執(zhí)行任務(wù),而 AdvancedCronJob 允許用戶設(shè)置多種不同類型的 template,即用戶可以配置 schedule 規(guī)則周期性創(chuàng)建 Job 或 BroadcastJob 來執(zhí)行任務(wù)(后者可以分發(fā) Job 到所有或特定 node 上執(zhí)行任務(wù))。

apiVersion: apps.kruise.io/v1alpha1 kind: AdvancedCronJob spec:template:# Option 1: use jobTemplate, which is equivalent to original CronJobjobTemplate:# ...# Option 2: use broadcastJobTemplate, which will create a BroadcastJob object when cron schedule triggersbroadcastJobTemplate:# ...# Options 3(future): ...
  • jobTemplate:與原生 CronJob 一樣創(chuàng)建 Job 執(zhí)行任務(wù)。

  • broadcastJobTemplate:周期性創(chuàng)建 BroadcastJob?執(zhí)行任務(wù)。

4. Webhook 自運(yùn)維控制器

Kruise 運(yùn)行的 kruise-controller-manager 組件,其中包含了多個(gè) controller 和 webhook。

了解 webhook 的同學(xué)應(yīng)該知道,它需要生成一套完整的 TLS cert 證書,webhook server 端的 HTTPS 服務(wù)啟動(dòng)時(shí)使用這個(gè)證書,同時(shí)要把 ca 證書寫到 MutatingWebhookConfiguration、ValidatingWebhookConfiguration、CRD conversion 的 caBundle 中。

因此,對(duì)于如何自動(dòng)生成證書、配置到上述 configuration 資源中,以及如果 configuration 被重置后如何重新寫入,都是當(dāng)前寫 webhook 會(huì)遇到的運(yùn)維難題。

Kruise 最新版本中實(shí)現(xiàn)了一個(gè) webhook controller,這個(gè)控制器支持對(duì) Kruise 自身的 TLS certs 以及相關(guān)配置資源做自運(yùn)維。即:自動(dòng)生成證書 -> 存儲(chǔ)到 secret -> 寫到本地供 HTTPS 服務(wù)啟動(dòng)使用 -> 將 ca cert 寫入 MutatingWebhookConfiguration / ValidatingWebhookConfiguration / CRD conversion,并持續(xù) list watch 這些資源,一旦發(fā)生變化,重新刷入 ca 證書。

有興趣的同學(xué)可以看源碼:https://github.com/openkruise/kruise/blob/master/pkg/webhook/util/controller/webhook_controller.go

后續(xù)我們也會(huì)將這部分功能抽出到一個(gè)公共倉庫中,大家在編寫 webhook 的時(shí)候可以很方便地復(fù)用這套 webhook 自運(yùn)維能力。

總結(jié)

后續(xù),OpenKruise 還會(huì)持續(xù)在應(yīng)用自動(dòng)化上做出更深的優(yōu)化,本月底會(huì)開放 OpenKruise 下一步的 Roadmap 規(guī)劃,我們將不再局限于 workload 應(yīng)用管理能力,而會(huì)擴(kuò)展到更多風(fēng)險(xiǎn)防控、operator 增強(qiáng)等領(lǐng)域。

同時(shí)也歡迎每一位云原生愛好者共同參與 OpenKruise 的建設(shè)。與其他開源項(xiàng)目不同,OpenKruise 并不是阿里內(nèi)部代碼的復(fù)刻,恰恰相反,OpenKruise Github 倉庫是阿里內(nèi)部代碼庫的 upstream。因此,你貢獻(xiàn)的每一行代碼,都將運(yùn)行在阿里內(nèi)部的所有 Kubernetes 集群中、都將共同支撐阿里巴巴全球頂尖規(guī)模的云原生應(yīng)用場(chǎng)景!釘釘搜索群號(hào):23330762,即可加入交流群!

總結(jié)

以上是生活随笔為你收集整理的OpenKruise v0.7.0 版本发布:新增周期任务分发控制器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。