iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
DevOps

玩耍開源k8s30天系列 第 12

day12 : argo gitops服務以及ingress (中)

昨天透過kustomize的方式做了base的yaml和規劃了怎麼應用,那麼今天就來利用這些yaml佈署服務吧。

kustomize在使用上其實可以直接用kubectl -k 的方式去create目錄下的resources,不過這樣就像昨天所說要靠人為去執行,那麼要如何自動化呢?傳統的方式會選擇在cd中加入pipeline自動執行,但是這樣間接遭遇了幾個問題,要如何取得佈署的權限、如果cluster有多座應該怎麼同時,為了一次性的解決這些問題,我使用了argocd 進行gitops的佈屬流程,讓具有deploy權限的帳號放在k8s內,同時讓每座cluster的argo監看同一座git,這樣就可以推送git的同時異動所有cluster了。

那麼什麼是argocd呢? 先用一張官網的架構圖來檢視,那隻可愛的外星章魚就是argo
https://ithelp.ithome.com.tw/upload/images/20210912/20139661hY7txG7HqY.png

官方給的圖,我個人認為其實看起來是滿複雜的,不過對於argo來說其實沒有那麼困難,他的元件主要分成四個 dex、repo-server、application-controller、redis,其中dex負責操作帳號的管理(本次不介紹),repo-server負責argo會監看哪些git repo進行佈署,application-controller會負責真實進行服務create,redis則是提供緩存的功能,並且元件都用pod的方式運行,相關的設定也都會透過crd的方式佈署,所以流程上會比較貼近簡單一點的圖如下
https://ithelp.ithome.com.tw/upload/images/20210912/20139661Lal4TO8iAw.png
瞭解他的運作後,就開始配置argocd吧,argo的配置其實很簡單,因為他都是yaml,所以要應用他甚至可以全部靠yaml去更新,第一步的安裝就是熟悉的create

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

如果想要統一版本,其實也可以把image和yaml拉下來改,並且為了維運的方便,也順便抓取argocd的cli下來使用(https://github.com/argoproj/argo-cd/releases/download/v2.1.0-rc2/argocd-linux-amd64)。

安裝好argo後可以用istio ingress的方法把argo-server的service expose出來使用,介面的使用方法其實還滿簡單的,所以我就介紹如何不透過介面的方式設定好argocd,最簡易的配置會需要設定的有兩個

  1. git repo
  2. listen git的application crd配置

第一個git repo的配置

透過secret拿到密碼
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
argocd --insecure --grpc-web login URL:443 --username admin --password
argocd repo add git_repo_url --username user --password password

第二個listen git的application crd其實是在告訴argocd,我希望他抓取這個git目錄下的檔案,定期去幫我確認有沒有crd要新增,然後再透過更新的crd去確認這個crd所監看的repo有沒有異動,看起來很饒口,其實說簡單了就是用application去管理argocd application有沒有新的或是異動,如圖。
https://ithelp.ithome.com.tw/upload/images/20210912/20139661uOMZccS3DG.png

管理application的crd yaml簡易的寫法如下

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: application-monitor
  namespace: argocd
spec:
  destination:
    namespace: argocd
    server: 'https://kubernetes.default.svc'
  project: default
  source:
    path: argo-application/
    repoURL: >-
      git-repo-url
    targetRevision: HEAD
  syncPolicy:
    automated: {}

這樣之後只要git推送application到git-repo的argo-application/目錄下,就會自動把application crd佈署完成,並且再根據這個佈署好的application配置服務,行成完全自動化的佈署。

推給monitor的application大概長這樣

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: test-hello-world
  namespace: argocd
spec:
  destination:
    namespace: test
    server: 'https://kubernetes.default.svc'
  project: default
  source:
    path: k8s-cluster/test/hello-word
    repoURL: >-
      git-repo-url
    targetRevision: HEAD
  syncPolicy:
    automated: {}

那麼服務就會自動被註冊為新的application : test-hello-world ,然後將k8s-cluster/test/hello-word內定義的yam佈署到test這個namespace 下。
https://ithelp.ithome.com.tw/upload/images/20210912/201396611nI5yqT1zI.png
我這次是佈署在test的ns下(昨天是default),並且重新給一個url。
https://ithelp.ithome.com.tw/upload/images/20210912/20139661kxrTkmU5D2.png


上一篇
day11 : argo gitops服務以及ingress (上)
下一篇
day13 : argo gitops服務以及ingress (下)
系列文
玩耍開源k8s30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言