亚洲一区精品自拍_2021年国内精品久久_男同十八禁gv在线观看_免费观看a级性爱黄片

Article / 文章中心

專訪 OpenKruise 負(fù)責(zé)人:現(xiàn)在的云原生應(yīng)用自動(dòng)化發(fā)展到什么程度了?

發(fā)布時(shí)間:2022-01-25 點(diǎn)擊數(shù):1024

2021 年 12 月,CNCF 開源項(xiàng)目 OpenKruise 正式宣布了 v1.0 大版本的發(fā)布。


OpenKruise 是一個(gè)基于 Kubernetes 的擴(kuò)展套件,主要聚焦在云原生應(yīng)用的自動(dòng)化,例如部署、發(fā)布、運(yùn)維以及可用性防護(hù)等。更新到 v1.0 版本后,OpenKruise 目前主要提供應(yīng)用工作負(fù)載、Sidecar 管理、增強(qiáng)運(yùn)維能力、分區(qū)部署彈性策略、應(yīng)用可用性防護(hù)等功能,為云原生應(yīng)用提供落地能力。


目前,OpenKruise 官方登記的 Adopter 數(shù)量達(dá)到 35+,阿里巴巴、螞蟻集團(tuán)、美團(tuán)、攜程、網(wǎng)易、小米、OPPO、蘇寧等都在生產(chǎn)環(huán)境使用了 OpenKruise 功能,國外如北美的 Lyft、以色列的 Bringg、面向東南亞市場的 Shopee 等也都使用了 OpenKruise。

OpenKruise


01

為更復(fù)雜的場景而生

Cloud Native


OpenKruise 源于阿里巴巴經(jīng)濟(jì)體應(yīng)用過去多年的大規(guī)模應(yīng)用部署、發(fā)布與管理的最佳實(shí)踐。阿里擁有超大規(guī)模的互聯(lián)網(wǎng)應(yīng)用場景,而如此豐富的業(yè)務(wù)線和龐大數(shù)量的應(yīng)用實(shí)例絕大部分都是以容器的方式運(yùn)行在阿里云云原生平臺維護(hù)的容器集群中。


在 2011 年,阿里就開始發(fā)展基于 LXC 的容器技術(shù),隨后逐漸完成了集團(tuán)業(yè)務(wù)部署的全面容器化。近幾年,隨著云技術(shù)發(fā)展和云原生的興起,阿里將過去的 T4 容器遷移到了新的架構(gòu)系統(tǒng) --ASI(Alibaba Serverless Infrastructure)。ASI 在原生 Kubernetes 的基礎(chǔ)上,通過標(biāo)準(zhǔn)化擴(kuò)展的方式提供了更多增強(qiáng)功能和適配阿里集團(tuán)場景的落地能力,支撐了各種各樣的復(fù)雜場景和需求。


隨著越來越多樣化的業(yè)務(wù)遷移到了 ASI 云原生集群中,阿里開始考慮將這些組件功能開放給全球的 Kubernetes 用戶,于是便有了 OpenKruise 開源項(xiàng)目。2019 年 6 月,OpenKruise 的第一個(gè)預(yù)覽版本發(fā)布,并在 KubeCon 云原生技術(shù)峰會上宣布開源。


在阿里云技術(shù)團(tuán)隊(duì)看來,開源絕不是僅僅將代碼拷貝后開放出來?!拔覀冊?jīng)看到一些開源項(xiàng)目,僅僅是每隔幾個(gè)月甚至更久的時(shí)間將內(nèi)部代碼選擇性地拿出一部分更新到 GitHub 上。這絕不是一種健康、可持續(xù)的開源方式,無法形成社區(qū)凝聚力。”阿里云技術(shù)專家王思宇說道。


因此,在最初構(gòu)想到首個(gè)開源版本發(fā)布的兩個(gè)多月時(shí)間里,阿里云技術(shù)團(tuán)隊(duì)主要在解決以下兩件事:


  • 設(shè)計(jì)開放的開源與內(nèi)部協(xié)作流程。經(jīng)過反復(fù)斟酌,團(tuán)隊(duì)最終決定將 OpenKruise 的基礎(chǔ)倉庫完全托管在社區(qū),內(nèi)部僅維護(hù)一個(gè) fork 倉庫,并不斷從 GitHub 上游同步代碼進(jìn)來。因此,OpenKruise 所有功能的開發(fā)都是基于 GitHub 協(xié)作、提交和評審,所有過程對社區(qū)開放,任何人都可以參與。阿里內(nèi)部的 fork 倉庫只保留了少量適配接口,并將內(nèi)外代碼的一致率維持在 95% 以上。


  • 制定合理的功能開源路徑。ASI 中的擴(kuò)展功能非常豐富,但并非所有功能都適配任意的原生 Kubernetes,此外很多功能也不夠完善,可能存在更好的設(shè)計(jì)與實(shí)現(xiàn)方式。因此,阿里選擇先從一些既足夠成熟、易用,又能保證足夠通用性和向后兼容性的特性開始,逐步將其開放到社區(qū)。


2020 年 11 月,阿里將 OpenKruise 捐贈給 CNCF 基金會托管,并將于 2022 年初提出 CNCF Incubation 申請。


02

為什么說是一次大升級

Cloud Native


2021 年 3 月,OpenKruise 發(fā)布了 v0.8.0 版本。在這個(gè)版本之前,OpenKruise 更多地專注在工作負(fù)載(Workload)領(lǐng)域,CloneSet、Advanced StatefulSet、SidecarSet 等功能滿足了各種各樣業(yè)務(wù)和容器的部署場景。


但阿里云技術(shù)團(tuán)隊(duì)認(rèn)為,OpenKruise 作為一個(gè)面向 Kubernetes 應(yīng)用自動(dòng)化管理的項(xiàng)目,不應(yīng)該僅僅局限在應(yīng)用“部署”上。因此,團(tuán)隊(duì)在 2021 年提出了“More than Workloads”的規(guī)劃,從 v0.8.0 到 v1.0 大版本,OpenKruise 應(yīng)用管理的支持范圍不斷擴(kuò)大。


1 多種增強(qiáng)的 Workload 類型


首先,在最新的 v1.0 大版本中,OpenKruise 提供了多種增強(qiáng)的 Workload 類型。

王思宇介紹,Kubernetes 原生的 Workload 在真實(shí)的生產(chǎn)環(huán)境下只能滿足 40%~60% 較為簡單和通用的場景,但這些不包括來自阿里巴巴等互聯(lián)網(wǎng)公司的許多超大規(guī)模和復(fù)雜業(yè)務(wù)場景。因此,OpenKruise 針對這些場景做了很多改進(jìn),比如有對標(biāo) Deployment 的無狀態(tài)應(yīng)用管理負(fù)載 CloneSet 。


下表是 CloneSet 和 Deployment 在擴(kuò)縮容彈性和發(fā)布能力上的差異對比??梢钥吹剑珻loneSet 滿足了很多真實(shí)生產(chǎn)場景下的業(yè)務(wù)訴求,而這些是 Deployment 所不具備的。


Deployment



2 原地升級大幅加強(qiáng)


在 v1.0 版本中,OpenKruise 還對原地升級這一核心功能做了大幅加強(qiáng)。


相比現(xiàn)在開發(fā)者使用 Deployment 升級時(shí)刪除、新建 Pod 的方式,原地升級可以使 Pod 對象、所在 Node、IP、Volume 掛載卷和數(shù)據(jù)等都不發(fā)生任何變化,甚至 Pod 中一個(gè)容器進(jìn)行原地升級時(shí),其他容器保持正常運(yùn)行。

Deployment


據(jù)了解,在超大規(guī)模集群和業(yè)務(wù)發(fā)布高峰的情況下,原地升級相比大量的 Pod 重建升級,不僅保證了發(fā)布的穩(wěn)定性,還優(yōu)化了 60%~80% 的發(fā)布效率。目前有兩種主流的原地升級方式:


  • 對于容器鏡像的原地升級。由 Kruise controller 修改 Pod 中的 image 字段,修改后,kubelet 會感知到 Pod 中對應(yīng)容器的 hash 值發(fā)生了變化,隨后把舊的容器停掉,然后用 Pod 中的新容器(鏡像)再次執(zhí)行拉取、創(chuàng)建、啟動(dòng)等操作。


  • 對于通過 Downward API 定義的容器環(huán)境變量等字段的原地升級。每個(gè)節(jié)點(diǎn)上的 kruise-daemon 組件將 Downward API 帶入容器計(jì)算真實(shí)的 hash 值。當(dāng) hash 值發(fā)生變化,也就是 Downward API 引用的 labels/annotations 值被更新,kruise-daemon 就會通過 CRI 接口停掉當(dāng)前運(yùn)行的容器,kubelet 發(fā)現(xiàn)容器停止后再根據(jù) Pod 將新容器重建出來,從而生效了新的環(huán)境變量等配置。


據(jù)王思宇介紹,考慮到對企業(yè)架構(gòu)和設(shè)計(jì)的改動(dòng),Kubernetes 社區(qū)目前只有針對 VPA,即資源原地升級的提案,而更多的如鏡像原地升級等在云原生社區(qū)只有 OpenKruise 在做。截至 v1.0 版本,OpenKruise 通過 Downward API 方式,提供了針對容器 image 和 env/command/args 等字段的原地升級。


3 高可用性防護(hù)提升


眾所周知,Kubernetes 的面向終態(tài)自動(dòng)化是一把 “雙刃劍”,它既為應(yīng)用帶來了聲明式的部署能力,同時(shí)也潛在地會將一些誤操作行為被終態(tài)化放大。例如“級聯(lián)刪除”機(jī)制,正常情況(非 orphan 刪除)下,一旦父類資源被刪除,那么所有子類資源都會被關(guān)聯(lián)刪除:


刪除一個(gè) CRD,其所有對應(yīng)的 CR 都被清理掉;
刪除一個(gè) namespace,這個(gè)命名空間下包括 Pod 在內(nèi)所有資源都被一起刪除;
刪除一個(gè) Workload(Deployment/StatefulSet/...),則下屬所有 Pod 被刪除。


任何一家企業(yè)的生產(chǎn)環(huán)境中發(fā)生大規(guī)模誤刪除都是不可承受的,因此不少社區(qū) Kubernetes 用戶和開發(fā)者都在抱怨類似 “級聯(lián)刪除” 帶來的問題。因此,OpenKruise 開源的首個(gè)防護(hù)功能,就是對“級聯(lián)刪除”機(jī)制的兜底保護(hù)。


簡單來說,用戶在給 CRD、namespace、Workloads 打上防級聯(lián)刪除的標(biāo)簽后,這些資源被調(diào)用刪除時(shí),Kruise 會幫助用戶校驗(yàn)本次刪除是否存在級聯(lián)風(fēng)險(xiǎn),比如一個(gè) namespace 下還有正在運(yùn)行和服務(wù)的 Pod,那么 Kruise 會禁止直接刪除該 namespace,避免誤刪業(yè)務(wù) Pod。


除此之外,OpenKruise 還提供了原生 Pod Disruption Budget(PDB)的增強(qiáng)版本 Pod Unavailable Budget(PUB)。PDB 只是防護(hù) Pod 驅(qū)逐操作,而 PUB 防護(hù)了所有會導(dǎo)致 Pod 不可用的操作,包括了驅(qū)逐操作和更多的 Pod 刪除、原地升級等。


4 運(yùn)維升級


當(dāng)前,Kubernetes 在應(yīng)用運(yùn)維方面被“吐槽”很多的一點(diǎn)就是,將下層的容器運(yùn)行時(shí)(Container Runtime)封裝得太嚴(yán)實(shí)。


Runtime 層的容器創(chuàng)建只有一個(gè) Pod 資源,此外沒有任何接口可以讓用戶能夠通過 Kubernetes API 層面來執(zhí)行一些 Runtime 相關(guān)操作,比如拉取鏡像、重啟容器等,但這些都是來自業(yè)務(wù)場景的現(xiàn)實(shí)訴求。


由于 kubelet 缺乏類似于 plugin 的擴(kuò)展機(jī)制,OpenKruise 便創(chuàng)建了一個(gè)名為 kruise-daemon 的節(jié)點(diǎn)組件。kruise-daemon 可以理解 OpenKruise 定義的一些 CRD 和擴(kuò)展協(xié)議,并與自己所在節(jié)點(diǎn)上的 CRI(Container Runtime Interface)通信,傳遞對節(jié)點(diǎn)容器的操作。通過這種方式,OpenKruise 提供了鏡像預(yù)熱、容器重啟等 CRD,用戶可以通過提交 YAML 來指定需要下發(fā)預(yù)熱的 image 鏡像,或指定 Pod 中的一個(gè)或多個(gè)容器執(zhí)行重啟。


除此之外,OpenKruise 的最新版本還支持資源跨 namespace 分發(fā)、容器啟動(dòng)順序控制等運(yùn)維功能。前者支持將一份 ConfigMap、Secret 配置分發(fā)到一批 namespace 之下,后者則能夠幫助用戶控制 Pod 中有強(qiáng)依賴關(guān)系的多個(gè)容器的啟動(dòng)順序。


03

下一步:運(yùn)行時(shí)

Cloud Native


據(jù)王思宇介紹,不同的用戶使用 OpenKruise 的側(cè)重點(diǎn)也會不一樣。


阿里巴巴、攜程等公司實(shí)際上已經(jīng)把 OpenKruise 作為業(yè)務(wù)部署的統(tǒng)一應(yīng)用負(fù)載。比如阿里巴巴的電商、生活服務(wù)等多數(shù)業(yè)務(wù)都是通過 CloneSet 部署和發(fā)布管理,而 Nacos 等中間件則是通過 Advanced StatefulSet 部署。有的公司按需使用了部分 OpenKruise 提供的功能,如有的使用 SidecarSet 獨(dú)立管理、注入和升級 sidecar 容器,也有的只依賴了一些增強(qiáng)運(yùn)維能力,如鏡像預(yù)熱、容器重啟等。


在王思宇看來,目前 OpenKruise 在 Workload 領(lǐng)域已經(jīng)趨向成熟,可以滿足大部分較通用的應(yīng)用部署發(fā)布場景,但圍繞 Kubernetes 運(yùn)行時(shí)方面的問題,還有不少值得提升和完善的地方。


“我們已經(jīng)不止一次收到用戶反饋,他們在使用原生 Kubernetes 的 LivenessProbe 探針時(shí)出現(xiàn)了 probe 配置錯(cuò)誤或探測有誤,導(dǎo)致整個(gè)應(yīng)用下的所有 Pod 都發(fā)生了異常重啟,但在 Pod 中的進(jìn)程是正常的,從而使得整個(gè)應(yīng)用停止了服務(wù),觸發(fā)了比較大的故障?!蓖跛加畋硎荆琌penKruise 接下來會定義一套旁路的 LivenessProbe,并能夠讓用戶定義觸發(fā)重啟時(shí)的限流策略,從而避免對應(yīng)用的全量 Pod 造成不可用的影響。


王思宇透露,OpenKruise 正在研發(fā)一個(gè)探索性項(xiàng)目——ControllerMesh。該項(xiàng)目使用一個(gè)代理容器攔截用戶的 operator(controller)與 kube-apiserver 的通信,通過在 Proxy 層對請求 / 返回?cái)?shù)據(jù)修改和轉(zhuǎn)發(fā),從而實(shí)現(xiàn) operator 的多租部署、動(dòng)態(tài)隔離、灰度升級、故障注入、客戶端側(cè)的限流熔斷等策略。


“這是一個(gè)對 Kubernetes controller 運(yùn)行時(shí)前所未有的強(qiáng)大擴(kuò)展,并且對于用戶 operator 自身無任何侵入?!蓖跛加钫f道。


嘉賓介紹:


王思宇(花名:酒祝),阿里云技術(shù)專家,OpenKruise maintainer,Kubernetes member,多屆 KubeCon 等云原生峰會講師,有多年超大規(guī)模容器和云原生領(lǐng)域的調(diào)度編排和管理經(jīng)驗(yàn)。