ArgoCD + ArgoCD Image Updater 部署實現

耿晓芳_旷远野壮發表於2024-10-11

部署思路踩坑整理

1ArgoCDArgoCD Image Updater2個不同的程式。"ArgoCD Image Updater小工具"沒有整合在ArgoCD中需要單獨部署。

2、單獨的ArgoCD能夠實現基於git倉庫變更作為應用部署的事實來源 [參考子頁:argocd根據映象tag變化實現自動釋出的2種方式];

ArgoCD +"ArgoCD Image Updater小工具"能夠實現以映象倉庫中映象tag變更作為應用部署的事實來源。

3、"ArgoCD Image Updater小工具"部署略顯繁瑣,並不只是apply官方提供的yaml讓pod執行就可以了,需要打通和argocd的認證操作。

4ArgoCD 或"ArgoCD Image Updater小工具"按照官方提供的install.yaml 部署後,如果修改其中的cm或者引數,不要採取在原yaml修改後再提交的方式,應該 用命令修改。因為yaml太長太複雜了!

5、其它

5.1argocd 配置gitlabhttp使用者名稱密碼方式可以實現認證並回寫。

5.2harbor公開倉庫配置的時候不需要使用者名稱和密碼,可以使用http請求。

6、配置了回寫時,ArgoCD Image Updater 並不會直接修改git倉庫yaml 檔案的tag,而是會建立一個.開頭的yaml 檔案(此例為".argocd-source-dev-smart-doc.yaml

",每次更新都會覆蓋此檔案的images內容。

ArgoCD + ArgoCD Image Updater 部署步驟

1、安裝ArgoCD

略,線上安裝離線安裝均可,yaml檔案很長。可參考本節其它。

登入argocd UI 會強制修改密碼。

安裝 Argo CD CLI

要與 Argo CD API Server 進行互動,我們需要安裝 CLI 命令:

# wget https://github.com/argoproj/argo-cd/releases/download/v1.7.10/argocd-linux-amd64

或者用win訪問 https://github.com/argoproj/argo-cd/releases 選擇合適的版本下載 argocd-linux-amd64 檔案

# cp argocd-linux-amd64 /usr/local/bin/argocd

# chmod +x /usr/local/bin/argocd

# argocd version

2、部署"ArgoCD Image Updater小工具"部署略顯繁瑣

==================== 2.1、在argocd中建立本地使用者併為使用者建立訪問令牌 ======================

# kubectl -n argocd edit cm argocd-cm

data:

accounts.image-updater: apiKey

##開啟後沒有data欄位,在最後頂格補入以上欄位。注意:apiKey中的K為大寫!!!

##修改儲存後,再檢視格式大概如下,驗證多了data欄位

=================== 2.1.1 為使用者建立訪問令牌,儲存備用(下面配置API訪問令牌秘鑰會用到此處生成的令牌)===============

argocd命令登入認證argocd(地址為argocd-server SVC暴露的埠),需要互動輸入y,忽略tls證書。

# argocd login 10.244.10.55:15471 --username admin --password argocd123

WARNING: server certificate had error: tls: failed to verify certificate: x509: cannot validate certificate for 10.244.10.55 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y

'admin:login' logged in successfully

Context '10.244.10.55:15471' updated

執行下面命令的前提是上面已經用argocd命令登入了argocd

# argocd account generate-token --account image-updater --id image-updater

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJpbWFnZS11cGRhdGVyOmFwaUtleSIsIm5iZiI6MTcyODUyNDUyMCwiaWF0IjoxNzI4NTI0NTIwLCJqdGkiOiJpbWFnZS11cGRhdGVyIn0.QecneA-yvcbU7Eoyi8egWwiAxN4zrf9FCWJXPeu0ick

=================== 2.2、在Argo CD中授予RBAC許可權 =====================

# kubectl -n argocd edit cm argocd-rbac-cm

data:

policy.default: role:readonly

policy.csv: |

p, role:image-updater, applications, get, */*, allow

p, role:image-updater, applications, update, */*, allow

g, image-updater, role:image-updater

##開啟後沒有data欄位,在最後頂格補入以上欄位。

##修改儲存後,再檢視驗證多了data欄位。

================= 2.3、安裝Argo CD Image Update =====================

建議在執行 Argo CD 的同一個 Kubernetes 名稱空間叢集中執行 Argo CD Image Updater,但這不是必需的。事實上,甚至不需要在 Kubernetes 叢集中執行 Argo CD Image Updater 或根本不需要訪問任何 Kubernetes 叢集。但如果不訪問 Kubernetes,某些功能可能無法使用,所以強烈建議使用第一種安裝方法。

執行映象更新程式的最直接方法是將其作為 Kubernetes 工作負載安裝到執行 Argo CD 的名稱空間中。這樣就不需要任何配置,也不會對你的工作負載產生任何影響。

# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml

或者地址:https://github.com/argoproj-labs/argocd-image-updater/tree/master/manifests

================= 2.4、配置映象倉庫(此例為harbor,之前ecr有過實踐) ===============

即使您不打算使用私有映象倉庫,您也需要至少配置一個empty registries.conf

# kubectl -n argocd edit cm argocd-image-updater-config

data:

registries.conf: ""

##沒有此條目argocd-image-updater pod將無法啟動。

如果使用私有映象倉庫可參考以下配置,以harbor映象倉庫為例:

data:

argocd.insecure: "true"

log.level: debug

registries.conf: |

registries:

- name: harbor

api_url: http://reg1.ka.zkj.com

prefix: reg1.ka.zkj.com

ping: yes

insecure: yes

##開啟後沒有data欄位,在最後頂格補入以上欄位。

##修改儲存後,再檢視驗證多了data欄位。

================= 2.5、配置API訪問令牌秘鑰 ============

根據上面生成的令牌設定變數

#YOUR_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJpbWFnZS11cGRhdGVyOmFwaUtleSIsIm5iZiI6MTcyODUyNDUyMCwiaWF0IjoxNzI4NTI0NTIwLCJqdGkiOiJpbWFnZS11cGRhdGVyIn0.QecneA-yvcbU7Eoyi8egWwiAxN4zrf9FCWJXPeu0ick

建立並應用於現有資源,特別注意:命令中的名稱空間要修改為服務實際部署的NS

# kubectl create secret generic argocd-image-updater-secret \

> --from-literal argocd.token=$YOUR_TOKEN --dry-run -o yaml |

> kubectl -n argocd apply -f -

W1010 09:48:58.532655 3478 helpers.go:703] --dry-run is deprecated and can be replaced with --dry-run=client.

secret/argocd-image-updater-secret configured

更改後必須重啟服務

# kubectl -n argocd rollout restart deployment argocd-image-updater

deployment.apps/argocd-image-updater restarted

3、在gitlab倉庫中建立編排檔案

說明:gitlab倉裡有4個檔案。

回寫檔案

.argocd-source-dev-smart-doc.yaml 是argocd 回寫後的檔案,這個是argocd image updater 應用建立後才會生成的!

編排檔案:

dp-smart-doc.yaml

svc-smart-doc.yaml

Kustomize工具檔案:

kustomization.yaml

---------檔案內容如下 -------------------

kustomization.yaml

namePrefix: kustomize-

apiVersion: kustomize.config.k8s.io/v1beta1

kind: Kustomization

resources:

- dp-smart-doc.yaml

- svc-smart-doc.yaml

------------------------------------

dp-smart-doc.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: smart-doc

namespace: wa

labels:

group: service

spec:

replicas: 1

selector:

matchLabels:

app: smart-doc

tier: backend

template:

metadata:

annotations: {}

labels:

app: smart-doc

tier: backend

spec:

nodeSelector:

smart: "true"

dnsPolicy: ClusterFirst

containers:

- image: reg1.ka.zkj.com/dev/smart-doc:v1.241008-68-002

imagePullPolicy: IfNotPresent

name: smart-wealth

ports:

- containerPort: 9800

#command: ["sleep","10000"]

env:

- name: TZ

value: Asia/Shanghai

resources:

limits:

cpu: 1000m

memory: 4Gi

requests:

cpu: 1000m

memory: 4Gi

volumeMounts:

- mountPath: /logs/smart-doc

name: smart-doc

terminationGracePeriodSeconds: 60

volumes:

- hostPath:

path: "/home/zkj/wealth/logs/smart-doc"

type: DirectoryOrCreate

name: "smart-doc"

-----------------------------

svc-smart-doc.yaml

apiVersion: v1

kind: Service

metadata:

name: smart-doc

namespace: wa

spec:

type: NodePort

ports:

- port: 9800

targetPort: 9800

nodePort: 48528

selector:

app: smart-doc

tier: backend

4、登入argocd UI,建立argocd應用。

=======================================================

綜合參考:

https://cloudpods.csdn.net/657807ccb8e5f01e1e447b15.html KubeSphere對接ArgoCD

https://kubesphere.io/zh/blogs/kubesphere-argocd/ KubeSphere + Argo CD,實現真正的 GitOps!

相關文章