iT邦幫忙

2022 iThome 鐵人賽

DAY 8
0
DevOps

IoT Cloud Computing on robotic vehicle系列 第 8

[前置]Jenkins with Kubernetes + ArgoCD for CD

  • 分享至 

  • xImage
  •  

這邊我們就來看一下,ArgoCD如何控制Kubernetes的部署。ArgoCD server建置請參閱官方文檔

首先ArgoCD可以設定與gitlab綁定。透過connect repo using SSH即可。
https://ithelp.ithome.com.tw/upload/images/20220913/20005722tr5J8Alzny.png

接著設定Kubernetes Cluster的綁定。

在settings --> Clusters中去設定。
https://ithelp.ithome.com.tw/upload/images/20220914/20005722rGU2bSmhjL.png
或者透過argocd command line去設定:

  1. 下載argocd(步驟連結)
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官方網站文件內容豐富,可以得到不少幫助。

  1. ArgoCD用戶身分登入
    可以選擇使用username/password方式登入 或 使用token
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
https://ithelp.ithome.com.tw/upload/images/20220914/20005722c52aPYaWQK.png
這裡--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
  1. 在ArgoCD創建與K8S Cluster sync的APP
    這邊建議在已經設定好k8s config的環境下直接執行cluster add的指令,argocd會直接將在k8s config中相同的cluster name(from kubectl config get-contexts)做綁定,在argocd產生一個新的APP(sync with this context)。
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

https://ithelp.ithome.com.tw/upload/images/20220914/200057222QR5QbnwcP.png
如上圖所示。該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
                        '''
                }
            }
        }

這樣就大功告成,全部串連在一起。


上一篇
[前置]Jenkins connect with Docker Image
下一篇
[前置]web communicate with MQTT
系列文
IoT Cloud Computing on robotic vehicle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言