KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置
簡介:KubeVela v1.3 在之前的多集群功能上進行了迭代,本文將為你揭示,如何使用 KubeVela 進行多集群應用的部署與管理,實現以上的業務需求。
作者:段威(段少)
在當今的多集群業務場景下,我們經常遇到的需求有:分發到多個指定集群、按業務規劃實現分組分發、以及對多集群進行差異化配置等等。
KubeVela v1.3 在之前的多集群功能上進行了迭代,本文將為你揭示,如何使用 KubeVela 進行多集群應用的部署與管理,實現以上的業務需求。
開始之前
1. 準備一個 Kubernetes 集群作為 KubeVela 的控制平面。
2. 確保 KubeVela v1.3[1] 和 KubeVela CLI v1.3.0 已經安裝成功。
3. 你要管理的子集群列表 kubeconfig。我們將以 beijing-1,beijing-2 和 us-west-1 這 3 個集群為例。
4. 下載并結合 multi-cluster-demo[2] 來更好的理解,如何使用 KubeVela 多集群能力。
分發到多個指定集群
對多個指定集群進行分發是最基本的多集群管理操作。在 KubeVela 中,你將使用一個叫做 topology 的應用策略來實現它。集群以數組的形式,列在其屬性的 clusters 字段里。
首先讓我們確保切換 KUBECONFIG 到準備好的管控集群,使用 vela cluster join 將 ?beijing-1,beijing-2 和 us-west-1 這 3 個集群全部納管進來:
? vela cluster join beijing-1.kubeconfig --name beijing-1 ? vela cluster join beijing-2.kubeconfig --name beijing-2 ? vela cluster join us-west-1.kubeconfig --name us-west-1 ? vela cluster list CLUSTER TYPE ENDPOINT ACCEPTED LABELS beijing-1 X509Certificate https://47.95.22.71:6443 true beijing-2 X509Certificate https://47.93.117.83:6443 true us-west-1 X509Certificate https://47.88.31.118:6443 true接著打開 multi-cluster-demo,查看 basic.yaml:
apiVersion: core.oam.dev/v1beta1 kind: Application metadata:name: example-appnamespace: default spec:components:- name: hello-world-servertype: webserviceproperties:image: crccheck/hello-worldport: 8000traits:- type: scalerproperties:replicas: 3- type: gatewayproperties:domain: testsvc-mc.example.com# classInSpec : true 如果你所下發的集群里有安裝 v1.20 以下版本的 Kubernetes ,請加上這個字段http:"/": 8000policies:- type: topologyname: beijing-clustersproperties:clusters: ["beijing-1","beijing-2"]可以看到,這個應用使用了 webservice 類型的組件,最后通過 topology 的應用策略分別向 beijing-1 和 beijing-2 兩個集群分發 3 副本 Deployment。
請注意,管控集群對子集群下發資源成功的前提是,子集群必須有已經新建的對應命名空間。由于每個集群默認都有 default?命名空間,所以可以正常下發。假設我們將 basic.yaml 的命名空間改成 multi-cluster ,則會收到報錯:
apiVersion: core.oam.dev/v1beta1 kind: Application metadata:name: example-appnamespace: default spec:components:- name: hello-world-servertype: webserviceproperties:image: crccheck/hello-worldport: 8000traits:- type: scalerproperties:replicas: 3- type: gatewayproperties:domain: testsvc-mc.example.com# classInSpec : true 如果你所下發的集群里有安裝 v1.20 以下版本的 Kubernetes ,請加上這個字段http:"/": 8000policies:- type: topologyname: beijing-clustersproperties:clusters: ["beijing-1","beijing-2"]在未來的 KubeVela 版本中,我們將支持使用鑒權系統,更便捷更安全的完成這項操作:通過管控集群一鍵在子集群創建命名空間。
完成子集群命名空間創建后,切回管控集群創建應用并下發資源:
? vela up -f basic.yaml Applying an application in vela K8s object format... "patching object" name="example-app" resource="core.oam.dev/v1beta1, Kind=Application" ? App has been deployed 🚀🚀🚀Port forward: vela port-forward example-appSSH: vela exec example-appLogging: vela logs example-appApp status: vela status example-appService status: vela status example-app --svc hello-world-server我們通過 vela status <應用名> 查看服務相關信息:
? vela status example-app About:Name: example-appNamespace: defaultCreated at: 2022-03-25 17:42:33 +0800 CSTStatus: runningWorkflow:mode: DAGfinished: trueSuspend: falseTerminated: falseSteps- id:wftf9d4exjname:deploy-beijing-clusterstype:deployphase:succeededmessage:Services:- Name: hello-world-serverCluster: beijing-1 Namespace: defaultType: webserviceHealthy Ready:3/3Traits:? scaler ? gateway: Visiting URL: testsvc-mc.example.com, IP: 60.205.222.30- Name: hello-world-serverCluster: beijing-2 Namespace: defaultType: webserviceHealthy Ready:3/3Traits:? scaler ? gateway: Visiting URL: testsvc-mc.example.com, IP: 182.92.222.128beijing-1 和 beijing-2 都下發了對應的資源,它們可供外部訪問的 IP 地址也顯示出來,你因而可以用你希望的方式供用戶訪問了。
使用集群 labels 按需分組分發
除了上述的基本操作,我們常常會遇到另外的情況:跨地域部署到某些集群、指定哪個云廠商的集群等等。為了實現類似這樣的需求,可以使用多集群的 labels 功能。
在這里,假設 us-west-1 集群來自 AWS,我們要額外分發應用到 AWS 的集群,則可以使用 vela cluster labels add 來對集群進行標記。當然,如果還有 us-west-2 等多個 AWS 相關集群,同樣進行標記后,將會統一下發:
? ~ vela cluster labels add us-west-1 provider=AWS Successfully update labels for cluster us-west-1 (type: X509Certificate). provider=AWS ? ~ vela cluster list CLUSTER TYPE ENDPOINT ACCEPTED LABELS beijing-1 X509Certificate https://47.95.22.71:6443 true beijing-2 X509Certificate https://47.93.117.83:6443 true us-west-1 X509Certificate https://47.88.31.118:6443 true provider=AWS接下來我們對 basic.yaml 進行更新,新增一個應用策略 topology-aws:
...policies:- type: topologyname: beijing-clustersproperties:clusters: ["beijing-1","beijing-2"]- type: topologyname: topology-awsproperties:clusterLabelSelector:provider: AWS為了方便你學習,請直接部署基于 basic.yaml 更新后的 intermediate.yaml:
? ~ vela up -f intermediate.yaml再次查看應用的狀態:
? vela status example-app...- Name: hello-world-serverCluster: us-west-1 Namespace: defaultType: webserviceHealthy Ready:3/3Traits:? scaler ? gateway: Visiting URL: testsvc-mc.example.com, IP: 192.168.40.10通過應用策略進行配置差異化
除了在 basic.yaml 里定義的 deploy-beijing 這種應用策略,我們往往有更多的應用策略需求,比如高可用,希望單獨給某些資源分發 5 個副本。這樣的話,使用 override 類型的應用策略即可:
... clusterLabelSelector:provider: AWS- type: overridename: override-high-availabilityproperties:components:- type: webservicetraits:- type: scalerproperties:replicas: 5同時假設,我們希望的是,給 AWS 的應用分發并設置為高可用。那我們可以使用 KubeVela 提供的專門用于定義過程控制的工作流來管理。我們使用如下的一個工作流,它希望將本次應用部署,首先通過 deploy-beijing 的應用策略,分發給北京的集群們,接著給 Label 為 AWS 的集群分發 5 個副本高可用的應用策略:
... properties:replicas: 5workflow:steps:- type: deployname: deploy-beijingproperties:policies: ["beijing-clusters"]- type: deployname: deploy-awsproperties:policies: ["override-high-availability","topology-aws"]接著我們給 intermediate.yaml 加上以上的應用策略和工作流后,更新為 advanced.yaml:
...policies:- type: topologyname: beijing-clustersproperties:clusters: ["beijing-1","beijing-2"]- type: topologyname: topology-awsproperties:clusterLabelSelector:provider: AWS- type: overridename: override-high-availabilityproperties:components:- type: webservicetraits:- type: scalerproperties:replicas: 5workflow:steps:- type: deployname: deploy-beijingproperties:policies: ["beijing-clusters"]- type: deployname: deploy-awsproperties:policies: ["override-high-availability","topology-aws"]然后對其進行部署,并再次查看應用的狀態:
? vela up -f advanced.yaml Applying an application in vela K8s object format... "patching object" name="example-app" resource="core.oam.dev/v1beta1, Kind=Application" ? App has been deployed 🚀🚀🚀Port forward: vela port-forward example-appSSH: vela exec example-appLogging: vela logs example-appApp status: vela status example-appService status: vela status example-app --svc hello-world-serverapplication.core.oam.dev/podinfo-app configured? vela status example-app...- Name: hello-world-serverCluster: us-west-1 Namespace: defaultType: webserviceHealthy Ready:5/5Traits:? scaler ? gateway: Visiting URL: testsvc-mc.example.com, IP: 192.168.40.10以上就是本次的全部分享,感謝你的閱讀和試玩。
歡迎你繼續探索 KubeVela v1.3 正式版[3],這里有更多差異化配置的進階用法等你發現和使用,比如 override 應用策略如何完成資源類型通配還是針對某些特定組件進行覆蓋等等,以滿足更加復雜的場景需求。
相關鏈接
[1] KubeVela v1.3
https://github.com/oam-dev/kubevela/releases/tag/v1.3.0
[2] multi-cluster-demo
https://github.com/oam-dev/samples/tree/master/12.Multi_Cluster_Demo
[3] 繼續探索 KubeVela v1.3 正式版
快速安裝 | KubeVela
原文鏈接
本文為阿里云原創內容,未經允許不得轉載。?
總結
以上是生活随笔為你收集整理的KubeVela v1.3 多集群初体验,轻松管理应用分发和差异化配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【CDS技术揭秘系列 01】阿里云CDS
- 下一篇: PolarDB for PostgreS