這邊我們就來看一下,ArgoCD如何控制Kubernetes的部署。ArgoCD server建置請參閱官方文檔。
首先ArgoCD可以設定與gitlab綁定。透過connect repo using SSH即可。
接著設定Kubernetes Cluster的綁定。
在settings --> Clusters中去設定。
或者透過argocd command line去設定:
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
argocd官方網站文件內容豐富,可以得到不少幫助。
argocd login localhost:443 --username xxx --password ooo
使用token則先要generate token。
argocd account generate-token --account xxx
argocd app list --auth-token xxxooo --server localhost:443 --insecure --grpc-web
ArgoCD UI介面也可以generate token
這裡--insecure是略過443憑證檢查
--grpc-web是利用rpc方式傳送資料,有更高效的傳輸結果。
但不選擇user login使用token的話,就每一次都要輸入在指令的後面,這樣有點麻煩。
所以也可以將token和server name用環境變數固定下來,就不用每次指令都輸入。
ARGOCD_SERVER=$ARGOCD_SERVER ARGOCD_AUTH_TOKEN=$ARGOCD_AUTH_TOKEN argocd --grpc-web app sync $APP_NAME --force
argocd cluster list
argocd cluster add CONTEXT_NAME
argocd app create demo --repo git@gitlab.com:xxx.git --path manifests/deploy --dest-name CONTEXT_NAME --dest-namespace default
如上圖所示。該APP會與CONTEXT_NAME同步顯示狀態。
其中--path是git放置k8s yaml檔案的地方,argocd會自動同步指定path yaml檔案內容與部署的kubernetes context。
最後才是上幾篇文章提到的,透過Jenkins pipeline指令去控制argocd指令,來更版kubernetes context中的image版本。
stage('Replace k8s image in cluster') {
steps {
withCredentials([string(credentialsId: "argocd-deploy-role", variable: 'ARGOCD_AUTH_TOKEN')]) {
sh '''
ARGOCD_SERVER="xxx.xxx.xxx.xxx:xxxxx"
APP_NAME="demo"
# Deploy to ArgoCD
ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app sync $APP_NAME --force
ARGOCD_SERVER=$ARGOCD_SERVER argocd --grpc-web app wait $APP_NAME --timeout 600
'''
}
}
}
這樣就大功告成,全部串連在一起。