还在犹豫吗?现在参与 OCM 社区正是时候
作者 | 邱見 馮泳
前言
距離上一篇宣告 OCM 開源并提交 CNCF TOC 項目孵化申請的文章已經有一個多月了。這一個多月來 OCM 社區吸引了越來越多的關注和伙伴們的加入,OCM 自身的研發,相關領域產品和解決方案的應用也取得了快速的發展。如果你還在對云原生環境下多集群管理的技術選型猶豫不決,希望這篇文章能夠答疑解惑。現在參與 OCM 社區正是時候。
OCM 社區研發進展
Open Cluster Management 在七月份發布了 0.4.0 版本,新加入的主要功能包括:
1、插件注冊和生命周期的管理?
通過 ManagedClusterAddon API,用戶可以定義管理插件說明在被管理集群上安裝管理插件,而后通過管理插件實現可擴展的管理能力。例如,用戶可以在中心集群上的 ManagedCluster 資源對應的命名空間中創建名為 submariner 的 ManagedClusterAddon 資源來激活被管理集群中 submariner 的安裝和配置,使用 submariner 作為多集群網絡連通的解決方案。
集群管理插件的注冊和管理如下圖所示:
每個插件需要一個在中心集群上運行的控制器。這個控制器由插件的開發者開發,主要目的是告訴 OCM 這個插件在被管理集群中需要如何被安裝,如何和中心集群通信以及對應的通信權限。OCM 通過這些信息負責插件在被管理集群的部署和與中心集群的通信。為了方便開發者方便的開發基于 OCM 的管理組件,OCM 0.4.0 加入了 addon-framework 的 golang 框架幫助開發者。開發者只需要實現框架透出的接口提供插件的部署和配置信息,同時框架還提供了若干幫助函數,方便開發者在 Kubernetes 平臺添加資源處理邏輯。開發人員可以將 Kuberentes 自定義資源的 Operator 也實現在插件內。
2、集群負載和任意資源調度的新 Placement API?
OCM 0.4.0 引入了一個新的 Placement API,描述如何為多集群的負載或 Kubernetes 的任意自定義資源選擇部署目標的一個或多個集群。Placement 需要在一個或多個特定的 ManagedClusterSet 中選擇集群,并且這些集群必須通過 ManagedClusterSetBinding 綁定到 Placement 對應命名空間內。在 OCM 0.4.0 中用戶可以通過 ManagedCluster 上的標簽或者 ClusterClaims 來選擇集群。例如用戶可以通過以下方式選擇所有標簽為“env=prod”的集群來分發配置信息:
也可以通過以下 Placement 選擇特定數目和特定 Kubernetes 版本的集群來部署應用。
Placement?組件會根據現在集群的信息和 API 的定義產生 PlacementDecision,如下所示
需要注意的是 Placement 只是根據 API 的定義選擇滿足要求的集群,而不關心如何分發配置和部署應用。Placement 需要和其他的應用或配置分發組件,包括應用的管理控制器,例如 ArgoCD 或者 KubeVela,共同完成應用的調度和部署。這也是 OCM “微內核”設計思想的一個體現,調度服務與應用或者資源管理服務完全解耦。
在后續的開發過程中,我們在計劃引入更多的調度策略,如通過集群的資源使用情況調度,taint/toleration 機制和非親和性等。如果有新的調度策略要求,歡迎在 community 子項目提出需求。
3、clusteradm命令行工具(alpha版本)
clusteradm 受 kubeadm 的啟發,主要的目的是簡化 OCM 組件的安裝和集群注冊。用戶可以通過運行“clusteradm init”命令在中心集群上部署 OCM 管理組件。并使用”clusteradm join”命令在被管理集群部署 OCM 本地組件,并將集群注冊到中心集群。clusteradm 也在不斷發展,后續會加入更多的 OCM 管理和監控子命令。
OCM 社區研發計劃
OCM 計劃在 10 月份發布 0.5.0 版本。0.5.0 版本的開發重點主要包括對 Placement API 的進一步完善,提升用戶體驗以及新的網絡通信子項目。
1、更多的 Placement API 調度策略
- 基于集群可分配資源的調度 :
根據集群中可分配的資源選擇集群從兒實現集群中資源的平均分配
- 負載的非親和和親和 :
通過Placement API能夠選擇跨區域的集群部署負載。
- 集群taint/toleration :
引入類似于node taint/toleration的功能
2、增強 clusteradm 的可用性
進一步增強 clusteradm 的功能,主要是通過 clusteradm 部署和管理 OCM 插件的能力。
3、新的 proxy 插件項目
通過反向隧道的方式實現對被管理集群的 Kubernetes API,運行在被管理集群的服務,甚至節點 sshd 的直接訪問。讓管理員或者 controller 可以直接訪問到在防火墻后的被管理集群 。
OCM 與其他項目合作
1、KubeVela
OCM 目前是 KubeVela 多集群管理的核心組件,用戶可以通過 KubeVela 的應用交付工作流一站式的完成集群創建、集群注冊,直到最后的多集群應用部署。這一技術流程滿足了應用在開發、測試、生產不同階段的一致性訴求,用戶可以通過 KubeVela 一鍵式的創建集群環境,使得本地開發能夠與生產部署采用同樣的模式做驗證,保證了軟件交付的成功率和正確性。另一方面,KubeVela 與 OCM 一起構建了豐富的多集群多環境應用交付能力,在 OCM 提供集群調度和資源分發的基礎上,用戶可以通過 KubeVela 對一個應用實現不同環境的差異化配置,使得一個應用部署到不同集群環境可以擁有不同的配置屬性和運維策略。
2、ArgoCD
OCM 也在持續和其他開源項目合作嘗試通過 OCM 來增強其他項目的多集群管理能力。OCM 社區和 ArgoCD 合作推進在 ArgoCD 中使用第三方 API 來進行集群調度并通過 ArgoCD 部署應用用戶可以使用 ArgoCD 的 ApplicationSet 配合 OCM 中的 Placement API 實現多集群應用的部署。
3、Clusternet
OCM 社區也嘗試和 Clusternet 合作?。通過 OCM 的插件管理能力可以將 clusternet 做為插件加載到 OCM 中,從而方便的同時使用 Clusternet 和其他 OCM 插件的功能。
OCM 在產品和解決方案中的落地
1、阿里云專有云敏捷版的企業化容器平臺
阿里云專有云敏捷版的企業化容器平臺在不同類型的用戶場景下,需要管理形態各異的用戶集群,負責這些集群的部署,管理服務的安裝,資源規劃,監控,合規,策略管理,負載分發等工作。隨著功能的不斷豐富,最初的自研架構遇到了擴展性,易用性,研發效率等問題。通過調研發現 OCM 的“微內核”設計不僅很好的解決了上述架構問題,而且對二次開發非常友好,研發人員可以自由選擇 OCM 社區的子項目,并在選擇的原子能力基礎上增加不同場景的業務邏輯。
當前使用和計劃使用的 OCM 子項目和相關能力包括:
- 集群的部署和注冊
容器平臺支持管理自主創建集群,用戶既有集群,邊緣集群,云服務商集群。根據集群類型的不同,在被管理集群上部署的管理服務種類,部署的方式,對集群的配置等都不一樣。
使用 registration 和 work 子項目,容器平臺可以定制集群注冊的自動化流程。根據 registration-agent 收集和報告的集群屬性信息,自動化注冊流程可以決定部署的管理服務種類和集群配置,并通過 work-agent 部署在被管理集群內。特別的,當集群運行在防火墻之后時,容器平臺會部署 proxy 服務實現 Kubernentes 和管理服務 API 的反向代理,甚至在需要時可以代理ssh協議實現技術支持人員的遠程運維。
proxy 服務正在以 addon-framework 子項目支持的 OCM addon 的方式貢獻給 OCM 社區,計劃在 0.5.0 版本發布。
- 集群的服務管理
正如上文中提到的,不同集群類型中部署的管理服務不盡相同。如何有序的管理這些服務,并清楚的展示被管理集群可以提供的管理能力是一個需要解決的問題。使用 addon-framework 子項目,容器平臺可以為每個管理服務在中心集群實現 operator,根據管理員使用 placement 子項目創建的策略,容器平臺可以通過 operator 編排服務的類型和配置,并通過 work 子項目下發到各個被管理集群。
- 集群的策略管理
集群的管理也包括安全策略,網絡策略,訪問策略等的管理。這些策略通常以 Kubernetes 擴展資源的形態出現。容器平臺可以直接使用 governance-policy-propagator 子項目,或者參照它實現自己的策略分發和策略執行狀態的上報機制。
2、阿里云 ACK 的大數據和 AI 作業管理
阿里云容器服務 Kubernetes 版(Alibaba Cloud Container Service for Kubernetes,簡稱容器服務 ACK),提供高性能的容器應用管理服務。隨著客戶對 Kubernetes 容器的深入使用,以及業務的多地域全球化發展,用戶創建管理多個 ACK 集群以及注冊了多云集群來應對持續擴張的業務需求,同時 ACK 對大數據和 AI 作業的調度,隊列和分發做了多項優化工作,越來越多的企業用戶選擇 ACK 運行大數據和 AI 作業。
針對 ACK 的多集群/多云用戶運行大數據/AI 作業,如何在眾多集群中選擇資源容量,污點,地域親和性,作業優先級匹配的集群,通過運維團隊人為判別選擇往往耗時且容易出錯,并需要經過多個團隊協同。多集群大數據/AI 作業統一分發和管理成為了數據科學家/開發工程師面對的棘手問題。
基于 OCM 的開放架構,ACK 作業隊列控制器和多集群調度器可以很容易適配 OCM,結合 OCM 的集群注冊管理,作業分發機制,實現大數據/AI 作業的多集群調度分發管理。
ACK 使用 OCM 的集群注冊管理機制,構建以 OCM Hub 主集群為中心的多集群運行環境,并以 Hub 主集群為統一管控入口。用戶使用 Kubernetes 原生接口提交作業后,ACK 隊列控制器和多集群調度器會根據作業優先級,資源用量要求,結合使用 OCM ManagedCluster API 獲取子集群健康情況,資源容量,親和性等信息,實現基于優先級的作業排隊,出隊,調度,為作業自動選擇合適的子集群。ACK 擴展 OCM Manifestworks API 將作業分發到相應的子集群運行,并使用 OCM Proxy 插件機制獲取作業在子集群上的運行狀態。
通過結合 OCM 和 ACK 作業隊列控制器和多集群作業調度器,ACK 很好地解決了多集群環境中的大數據/AI 作業自動調度,作業分發和狀態追蹤等問題。
相關鏈接:
插件注冊和生命周期的管理?
https://github.com/open-cluster-management-io/enhancements/tree/main/enhancements/sig-architecture/12-addon-manager
集群負載和任意資源調度的新 Placement API?https://github.com/open-cluster-management-io/enhancements/tree/main/enhancements/sig-architecture/6-placements?
clusteradm命令行工具(alpha版本)https://github.com/open-cluster-management-io/clusteradm
?clusternet 插件
https://github.com/skeeey/clusternet-addon
基于集群可分配資源的調度
https://github.com/open-cluster-management-io/enhancements/pull/16
負載的非親和和親和
https://github.com/open-cluster-management-io/community/issues/49
集群taint/toleration
https://github.com/open-cluster-management-io/community/issues/48
新的 proxy 插件項目https://github.com/open-cluster-management-io/enhancements/pull/19
多集群應用部署
https://github.com/oam-dev/kubevela/tree/master/docs/examples/workflow-with-ocm
ArgoCD 部署應用
https://github.com/argoproj-labs/applicationset/pull/231
Clusternet 合作
https://github.com/clusternet/clusternet
原文鏈接:https://developer.aliyun.com/article/788708?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的还在犹豫吗?现在参与 OCM 社区正是时候的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 探索停车黑科技,知位停车破局停车难题!
- 下一篇: 阿里云服务网格 ASM 发布新功能:提供