你問阿狗是什麼
GitOps + Kubernetes 的產物,相當不錯的運維工具
先來裝 Argo CD
我們要用 helm 安裝裝起來喔
helm repo add argo-cd https://argoproj.github.io/argo-helm
helm repo update
來準備個 values.yaml
installCRDs: false
global:
image:
tag: v1.8.6
dex:
enabled: false
server:
extraArgs:
- --insecure
# 如果說你有需要用反向代理抓 subpath,可以在這裡設定
# - --basehref=/argo
# - --rootpath=/argo
config:
# 這裡要把你要監看的 git repo 放上來,
# 範例是私有 Gitlab 的設定方式
repositories: |
- name: dev-argo
insecure: true
insecureIgnoreHostKey: true
sshPrivateKeySecret:
name: argocd-secret
key: webhook.gitlab.secret
type: git
url: [email protected]:self_group/dev-argo.git
metrics:
enabled: true
configs:
secret:
# 這裡產生一個 ssh key 來設定 gitlab repo 裡面的 deploy key
# 然後把相應的 private 提供給 Argo 使用
gitlabSecret: |-
first set ssh-public-key in gitlab repo, Settings > Repository > Deploy Keys
and replace the field with ssh-private-key
PS: 後面有說這裏的 Repository 跟 Secret 在哪裡弄 :) 反正先裝等等還能改 XDD
下個安裝指令
helm install argo-cd argo-cd/argo-cd --version 2.11.0 --namespace argocd --values ./values.yaml
你可以把他 port forward 出來看一下
kubectl port-forward svc/argo-cd-argocd-server 8080:443 -n argocd
帳號是 admin,而密碼會自動產生,預設是 Argo-CD server 的 Pod Name
# 醬子拿出來看
kubectl get pods -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
另外,也可以安裝 argo cli 來修改密碼
brew install argocd
argocd login localhost:8080
argocd account update-password
開起來會看到這樣的畫面 (PS: 那兩個方框框還不會有,等一下才要裝)
按到左邊齒輪的 Settings 然後 Repositories,如果說你的 Gitlab Repo 還沒設定的話,這裡不會是綠色勾勾 Success
再來設定 ArgoCD
先來搞定 Gitlab Repo
剛剛上面填了一個 repository 的地址,現在要讓他成真 (? 總之就開一個 self_group/dev-argo Repo 在 gitlab.10oz.tw,請自己依照環境調整齁 開好了之後就點進去吧~~
首先你需要長一個 ssh rsa key 出來
ssh-keygen -f ./argo-deploy-key
然後把你的 Public Key (argo-deploy-key.pub) 設在這裡~
這時候 Argo 有能力去看你的 Gitlab Repo 了,他會告訴你說你的 Repo 裡面是空ㄉ喔喔喔喔
讓我們來塞一點東西進去ㄅ,一個 application 用來設定 Argo 的監看目標,而這次監看的目標是 traefik/ingress-route 這個資料夾底下的一般 kubernetes 設定檔案
.
├── README.md
├── applications
│ ├── traefik-ingress-route.yaml
└── traefik
└── ingress-route
└── argo-route.yaml
applications/traefik-ingress-route.yaml
kind: Application
apiVersion: argoproj.io/v1alpha1
metadata:
name: golang-traefik-ingress-route
namespace: argocd
spec:
project: default
destination:
name: in-cluster
namespace: traefik
source:
path: traefik/ingress-route
repoURL: '[email protected]:self_group/dev-argo.git'
targetRevision: HEAD
syncPolicy:
automated:
prune: true
traefik/ingress-route/argo-route.yaml
kind: IngressRoute
apiVersion: traefik.containo.us/v1alpha1
metadata:
name: argocd-server-route
namespace: argocd
spec:
routes:
- kind: Rule
match: Host(`foo.10oz.tw`) && PathPrefix(`/argo`)
services:
- name: argo-cd-argocd-server
port: 80
Commit 推出去,就醬子就能動了喔 👍👍
Ref
https://argoproj.github.io/argo-cd/#quick-start https://www.qikqiak.com/post/gitlab-ci-argo-cd-gitops/