ArgoCD + KubeVela:以开发者为中心的 GitOps
來源|阿里巴巴云原生公眾號
作者 |?
鄧洪超,阿里云高級技術專家
Ed Lee,Argo 項目創始人
介紹
Argo CD 是為 Kubernetes 提供的 GitOps 持續交付工具。它是 CNCF Argo 項目的一部分,該項目是一組 Kubernetes 原生工具,用于在 Kubernetes 上運行和管理作業和應用程序。
KubeVela 是一個基于 Kubernetes 和 OAM(開放應用程序模型,Open Application Model)的開源應用程序引擎。KubeVela 主要是為平臺和運營團隊設計的,以便在 Kubernetes 上輕松創建簡單但面向開發人員的高度可擴展的抽象。對開發人員(也就是最終用戶)隱藏了在 Kubernetes 上配置應用程序清單的很多復雜性,比如伸縮策略、部署策略和入口,但允許平臺團隊基于組織策略獨立定制和控制這些配置。
在這篇博文中,我們將分享基于阿里云的用例,使用 Argo CD 和 KubeVela 構建以開發者為中心的持續應用交付流水線的經驗。
以開發者為中心的 GitOps 體驗
理想情況下,開發人員希望專注于編寫應用程序并將其代碼推送到 git 倉庫上,而不必擔心 CI/CD 流水線以及配置和運行應用程序時的其他操作問題。Kubernetes 上一個非常流行的模式是將應用程序從 git 自動部署到生產環境中。這就是 Argo CD 的用武之地。它會持續監視 git 倉庫的新提交,并自動將它們部署到生產環境中。Argo CD 應用倉庫中預定義的 Kubernetes 部署清單文件來創建或升級在 Kubernetes 上運行的應用程序。這種模式被稱為 GitOps,是在阿里巴巴的現代云原生堆棧中實現持續自動應用交付的關鍵。
雖然概念上很簡單,但在將 GitOps 應用到更廣泛的最終用戶場景時,會出現幾個重要的問題:
-
第一個問題是:實際的生產應用程序是復雜的,需要開發人員理解如何配置許多不同類型的 Kubernetes 資源。
-
第二個問題(與第一個問題相關)是:對于每個開發人員來說,學習如何正確配置和維護所有這些對象,同時遵守組織安全、遵從性和操作策略變得非常具有挑戰性。即使是簡單的錯誤配置也可能導致部署失敗,甚至服務不可用。
-
第三個問題是:當 Kubernetes 規范或組織策略發生變化時,必須更新所有應用程序清單以反映這些變化。對于一個可能擁有數千個應用程序和數百萬行 Kubernetes 清單文件的 YAML 的組織來說,這是一項巨大的任務。
這些問題產生了對應用程序抽象的強烈需求,該抽象將開發人員與不會直接影響其應用程序的平臺和操作關注點隔離開來,并提供了一個錨來避免配置漂移。Kubernetes 的核心抽象,通過有意的設計,并沒有為抽象應用程序提供一個標準的機制。
考慮到這個目標,KubeVela 被創建和設計為一個最小的、可擴展的應用程序引擎,供平臺構建人員在 Kubernetes 上創建“類似 PaaS”的體驗。具體來說,KubeVela 提供了簡單而有效的抽象,將應用程序配置問題與平臺和操作問題分離開來。下面是一個名為 appfile 的工件示例:
通過使用 appfile 并將其與 Argo CD 一起部署,開發人員只需要編寫一個簡單的應用配置,并將代碼推送到 git。然后,他們的應用程序將被自動部署,并開始在目標 Kubernetes 集群上處理實時流量。在幕后,平臺和運營團隊有能力用 CUElang 模板預先定義和/或修改這些抽象的行為,并確保它們滿足組織的安全性、遵從性和其他運營需求。
在下面,我們將更詳細地解釋上述 GitOps 工作流是如何工作的。
KubeVela 搭配 Argo CD
1. 先決條件
對于平臺運營者來說,唯一的“技巧”是使 KubeVela 成為 Argo CD 的自定義插件,這樣它就能“理解”appfile 格式。
2. 注冊插件
Argo CD 允許通過編輯 argocd-cm ConfigMap 集成額外的配置管理插件,如 Kubevela。
將以下文件保存為 argo-cm.yaml:
data:configManagementPlugins: |- name: velainit:command: ["sh", "-xc"]args: ["vela traits"]generate:command: ["sh", "-xc"]args: ["vela export"]然后執行以下命令更新argocd-cm ConfigMap:
kubectl -n argocd patch cm/argocd-cm -p "$(cat argo-cm.yaml)"3. 配置 argo-repo-server
Argo CD 有一個名為 argo-repo-server 的組件,它從 Git 中提取部署清單文件并呈現最終輸出。在這里,我們將使用 vela cli 解析 appfile 并將其呈現到 Kubernetes 資源中。
首先,使用所需的 kubeconfig 證書創建 ConfigMap,以便與已經安裝了 KubeVela 的目標 Kubernetes 集群進行通信:
apiVersion: v1 kind: ConfigMap metadata:name: vela-kubeconfignamespace: argocd data:config: |# fill your kubeconfig here當創建了上面的 ConfigMap,更新 argo-repo-server 以保存 vela cli 和憑證。
將以下補丁文件保存為 deploy.yaml:
spec:template:spec:# 1. Define an emptyDir volume which will hold the custom binariesvolumes:- name: custom-toolsemptyDir: {}- name: vela-kubeconfigconfigMap:name: vela-kubeconfig# 2. Use an init container to download/copy custom binariesinitContainers:- name: download-toolsimage: oamdev/argo-tool:v1command: [sh, -c]args:- cp /app/vela /custom-tools/velavolumeMounts:- mountPath: /custom-toolsname: custom-tools# 3. Volume mount the custom binary to the bin directorycontainers:- name: argocd-repo-serverenv:- name: KUBECONFIGvalue: /home/argocd/.kube/configvolumeMounts:- mountPath: /usr/local/bin/velaname: custom-toolssubPath: vela- mountPath: /home/argocd/.kube/name: vela-kubeconfig然后執行以下命令更新 argocd-repo-server 部署:
kubectl -n argocd patch deploy/argocd-repo-server -p "$(cat deploy.yaml)"到目前為止,vela 插件應該已經注冊,argo-repo-server 應該可以訪問 vela cli,將 appfile 呈現到 Kubernetes 資源中。
在 Argo CD 中使用 KubeVela
現在,作為應用程序開發人員,你可以通過 GitOps 部署使用 KubeVela 指定的應用程序。通過 argocd 命令行創建應用時,要記住指定插件名:
argocd app create <appName> --config-management-plugin vela讓我們用 Argo CD UI 來演示一下。這里是一個包含 appfile 的倉庫示例。
配置 Argo CD 來監視 Git 推送的倉庫,包括初始狀態:
任何推到倉庫現在將自動檢測和部署:
就是這樣!現在你可以創建/修改 appfile,推送到 git,Argo CD 會自動將它們部署到你的 Kubernetes 集群,所有這些都是通過神奇的 GitOps!
了解更多
所有上述設置和配置均可在此倉庫中獲得。KubeVela core 和 Argo CD 目前正在阿里巴巴的 web 應用平臺上生產應用,并已用于內部和公共云服務上的數萬個應用程序。請嘗試一下,讓我們知道你的想法!
-
CNCF Slack #kubevela 頻道:
https://slack.cncf.io/ -
ArgoCD Slack 頻道:
https://argoproj.github.io/community/join-slack -
KubeVela?地址:
https://github.com/oam-dev/kubevela
如果你有任何疑問,歡迎釘釘搜索群號:23310022,和近 2000?名開發者互動交流!
總結
以上是生活随笔為你收集整理的ArgoCD + KubeVela:以开发者为中心的 GitOps的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再见 2020!Apache Rocke
- 下一篇: Dubbo 版 Swagger 来啦!D