作者:周靖峰,青云科技容器顧問,云原生愛好者,目前專注于 DevOps,云原生領(lǐng)域技術(shù)涉及 Kubernetes、KubeSphere、Argo。
前文概述
前面我們已經(jīng)掌握了如何通過 Jenkins + Argo CD 的方式實現(xiàn)單集群的持續(xù)交付,明白了整個 CI/CD 過程中不同工具在流水線中的關(guān)系。所以接下來我們將更深入的了解 Argo CD 的特性。
前文鏈接:KubeSphere DevOps 基于 Jenkins + Argo 實現(xiàn)單集群的持續(xù)交付實踐。
KubeSphere 配置
集群配置
這里我們需要準(zhǔn)備至少 2 個集群,并且需要開啟多集群組件、DevOps 組件。
因為 KubeSphere 已經(jīng)內(nèi)置了 Argo,所以只要被 KubeSphere 所管理的集群會自動注冊上 Argo。
DevOps 配置
這里我們依舊要準(zhǔn)備一個 Git 倉庫, 這里仍然是使用我們之前的倉庫例子。
https://github.com/Feeeenng/devops-maven-sample.git
不過需要注意,這次我們需要選擇 multi-cluster
分支。
Argo CD 部分
ApplicationSet
這里主要介紹 ArgoCD 的一個控制器 ApplicationSet controller
。
此控制器追加了對跨多集群以及 monorepos
的支持。該項目以前是一個獨立項目,后在 Argo CD v2.3 版本中合入主分支。
ApplicationSet 控制器主要應(yīng)用場景:
- 通過 Argo CD 單一 Kubernetes 資源管理應(yīng)用發(fā)布多集群;
- 單一 Kubernetes 資源發(fā)布一個 Git 或者多個 Git 倉庫來部署多個應(yīng)用;
- 增加了 monorepos 的支持;
- 多租戶集群模式下,提高了單個集群租戶使用 Argo CD 部署能力。
Generators
ApplicationSet 主要通過 generators
來實現(xiàn)對資源的定義, 通過 template
來實現(xiàn)參數(shù)值的替換。目前主要支持以下幾種:
- List generator:基于集群名/URL 值的固定列;
- Cluster generator:基于 Argo CD 自定義方式;
- Git generator:基于 Git 存儲中包含的文件或文件夾;
- Matrix generator:基于上述兩種生成器的組合方式。
更多的方式參考地址: https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/
實踐操作
這次我們使用 List generator 的方式生成配置模版。
代碼目錄 deploy 下包含一個文件 applicationset.yaml
。
# 采用 List generator 方式進(jìn)行生成
# 集群信息都注入在配置里面
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: devops-maven-sample
spec:
generators:
- list:
elements:
- cluster: dev
url: https://kubernetes.default.svc
- cluster: test
url: https://172.31.73.92:6443
開啟 OnDeletion 配置
preserveResourcesOnDeletion
參數(shù)表示刪除 ApplicationSet 資源以后,通過模版自動生成出來的 Application 一并刪除。
請注意,生產(chǎn)環(huán)境不建議開啟這個參數(shù)!
syncPolicy:
preserveResourcesOnDeletion: true
更多模版配置參考: https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/
配置同步策略
配置 Application CRD 同步策略。
CreateNamespace 自動創(chuàng)建 namespace。
PrunePropagationPolicy 刪除采用友好刪除方式策略。
prune 默認(rèn)情況下,Argo CD 考慮安全機(jī)制不會自動同步 Git 資源變更操作,這里手動開啟。確保當(dāng)我們 Git 進(jìn)行變更以后,Argo 會自動進(jìn)行 Git 修改部署資源。
syncPolicy:
syncOptions:
- CreateNamespace=true
- PrunePropagationPolicy=foreground
automated:
prune: true
更多描述查看地址: https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/
模版定義
通過上述 List generator 的定義參數(shù),對應(yīng)好模版,這種類型都屬于 Key/Values 類型。
source:
repoURL: https://github.com/Feeeenng/devops-maven-sample.git
targetRevision: multi-cluster
path: deploy/{{cluster}}
destination:
server: '{{url}}'
namespace: multi-demo
最后運行流水行以后,等待流水線執(zhí)行完畢。Argo 自動進(jìn)行 GitOps 觸發(fā)管理同步。
然后進(jìn)入 KubeSphere 界面,配置 Argo 設(shè)置為 NodePort 類型 觀察 web 界面。
打開 Argo CD UI 界面,這里我配置了 Argo CD 對接 KubeSphere 的 LDAP。
所以可以通過 KubeSphere 的賬號密碼進(jìn)行登錄。如果沒有配置的話,默認(rèn)密碼需要執(zhí)行下面命令進(jìn)行查看。
kubectl get secret -n argocd argocd-initial-admin-secret
這個時候我們能夠看到,我們剛才通過 Jenkins pipeline 運行的流水線已經(jīng)成功。并且 Argo CD 也已經(jīng)自動同步發(fā)布應(yīng)用。
回到 KubeSphere 界面上觀察應(yīng)用部署情況能夠看到,我們所發(fā)布的 2 個集群也已經(jīng)正常部署完成。
Dev 集群:
Test 集群:
至此,我們使用 Jenkins 完成了通過 Argo CD 來部署多集群的應(yīng)用發(fā)布。
后續(xù)
當(dāng)前例子使用的是簡單的列表生成器的方式,但 ApplicationSet 的控制器其實也支持更多復(fù)雜的場景。比如通過 Git Generator 的方式只定義一個配置參數(shù),滿足多個應(yīng)用的發(fā)布支持。這樣也能夠把應(yīng)用代碼跟配置代碼進(jìn)行分離。從而開發(fā)跟運維互不影響。文章來源:http://www.zghlxwxcb.cn/news/detail-853993.html
參考文檔:
- https://argo-cd.readthedocs.io/en/stable/
- https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/
- https://argo-cd.readthedocs.io/en/stable/user-guide/application-specification/
- https://argo-cd.readthedocs.io/en/stable/operator-manual/applicationset/Generators/
- https://github.com/Feeeenng/devops-maven-sample
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-853993.html
到了這里,關(guān)于基于Jenkins + Argo 實現(xiàn)多集群的持續(xù)交付的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!