部署思路踩坑整理
1、ArgoCD和ArgoCD Image Updater是2個不同的程式。"ArgoCD Image Updater小工具"沒有整合在ArgoCD中需要單獨部署。
2、單獨的ArgoCD能夠實現基於git倉庫變更作為應用部署的事實來源 [參考子頁:argocd根據映象tag變化實現自動釋出的2種方式];
ArgoCD +"ArgoCD Image Updater小工具"能夠實現以映象倉庫中映象tag變更作為應用部署的事實來源。
3、"ArgoCD Image Updater小工具"部署略顯繁瑣,並不只是apply官方提供的yaml讓pod執行就可以了,需要打通和argocd的認證等操作。
4、ArgoCD 或"ArgoCD Image Updater小工具"按照官方提供的install.yaml 部署後,如果修改其中的cm或者引數,不要採取在原yaml修改後再提交的方式,應該 用命令修改。因為yaml太長太複雜了!
5、其它
5.1、argocd 配置gitlab,http使用者名稱密碼方式可以實現認證並回寫。
5.2、harbor公開倉庫配置的時候不需要使用者名稱和密碼,可以使用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!