天天看點

使用ArgoCD實作GitOps

什麼是Argo CD?

Argo CD是一個為Kubernetes而生的、遵循聲明式GitOps理念的持續部署工具,其優勢為:

1、應用定義、配置和環境資訊是聲明式的,并且可以進行版本控制;

2、應用部署和生命周期管理是全自動化的,是可審計的,清晰易懂;

3、Argo CD是一個獨立的部署工具,支援對多個環境、多個Kubernetes叢集上的應用進行統一部署和管理。

Argo CD與其他CD工具(例如Spinnaker、Tekton、Jenkins X)等的具體對比請參下圖:

使用ArgoCD實作GitOps

檢視argocd中定義的K8S叢集:

#argocd cluster list

使用ArgoCD實作GitOps

在将應用程式配置到Argo CD之前,我們需要配置Git存儲庫,該存儲庫包含用于部署應用程式的清單将存儲庫添加到Argo CD:

argocd repo add http://gogs.2886795312-80-host04nc.environments.katacoda.com/student/gitops-lab.git

驗證存儲庫已加載到Argo CD中:

argocd repo list

使用ArgoCD實作GitOps

在Argo CD中定義應用程式

Git存儲庫已經定義好了,現在該繼續在Argo CD上配置應用程式。

使用先前定義的git倉庫建立應用程式:

argocd app create --project default --name reverse-words-app \

--repo http://gogs.2886795312-80-host04nc.environments.katacoda.com/student/gitops-lab.git \

--path simple-app/reversewords_app/ \

--dest-server https://kubernetes.default.svc \

--dest-namespace reverse-words \

--revision master --sync-policy automated

--project将在其中建立應用程式的Argo CD項目

--name Argo CD應用程式名稱

--repo使用Argo CD定義的Git存儲庫,它将用作代碼來源

--path Git存儲庫中存儲應用程式清單的路徑

--dest-server Kubernetes部署應用的目标K8S叢集

--dest-namespace部署應用的K8S叢集中的目标namespaces

--revision用于擷取應用程式源的Git branch/reference 

--sync-policy如果自動Argo CD将執行定期檢查以確定Kubernetes中的應用程式狀态與Git中的應用程式定義比對

列出新定義的應用程式:

argocd app list

等待Argo CD将應用程式報告為“Healthy”,

argocd app get reverse-words-app

使用ArgoCD實作GitOps

驗證應用程式正在運作,應用程式包括:

A namespace

A Deployment

A Service

使用ArgoCD實作GitOps

curl應用,驗證效果(将輸入的字元串反過來顯示):

curl -X POST http://$(oc -n reverse-words get route reverse-words -o jsonpath='{.spec.host}') -d '{"word":"PALC"}'

使用ArgoCD實作GitOps

接下來,我們删除應用的deployment,并觀察Argo CD是否可以重新建立deployment。

oc -n reverse-words delete deployment reverse-words

使用ArgoCD實作GitOps

強制進行同步應用(由于同步政策設定為“Automated”,是以Argo CD可能已經同步了該應用程式):

argocd app sync reverse-words-app

使用ArgoCD實作GitOps

上圖中的報錯,是由我們運作oc Exposure指令時建立的OpenShift Route引起的,因為它沒有存儲在Git存儲庫中。如果啟用了 auto-pruning 功能,則該路由将被删除。

該錯誤說明了将所有Kubernetes對象保留在Git中的重要性,以確定沒有配置漂移。驗證同步完成後是否建立了deployment:

使用ArgoCD實作GitOps

在之前的實驗中,我們已經看到Argo CD如何檢測到由oc Exposure指令建立的OpenShift Route在Git存儲庫中不可用,我們将通過将路由定義添加到Git存儲庫來解決此問題。

探索OpenShift Route定義檔案:

使用ArgoCD實作GitOps

将route.yaml添加到git存儲庫:

cp ~/route.yaml ~/gitops-lab/simple-app/reversewords_app/

送出新更改并将其推送到Git remote

cd ~/gitops-lab/

git add simple-app/reversewords_app/route.yaml

git commit -m "Added application route definition"

git push origin master

我們清除現有的實驗環境(部署的項目和應用)。在接下來的步驟中,通過UI部署應用。

在Argo UI中部署應用

登入ArgoCD UI:

連接配接到repo:

連接配接成功:

在Argo CD WebUI中定義應用程式,輸入參數如下:

使用ArgoCD實作GitOps
使用ArgoCD實作GitOps

檢視建立好的應用:

使用ArgoCD實作GitOps

如果單擊該應用程式,将進入詳細視圖:

使用ArgoCD實作GitOps

驗證是否在叢集中建立了不同的對象(尤其關注自動建立了路由),并通過curl驗證應用。

使用ArgoCD實作GitOps

我們進一步檢視應用對應的資源:

使用ArgoCD實作GitOps

可以對應用做多種操作:

使用ArgoCD實作GitOps