Argo CD入門、實戰指南
1. Argo CD概述
1.1 什麼是 Argo CD
Argo CD 是針對 Kubernetes 的宣告式 GitOps 持續交付工具。
1.2 為什麼選擇 Argo CD
應用程式定義、配置和環境應具有宣告性並受版本控制。應用程式部署和生命週期管理應自動化、可審計且易於理解。
2. Argo CD基礎知識
在有效使用 Argo CD 之前,有必要了解該平臺所基於的底層技術。還需要了解提供給您的功能及其使用方法。以下部分提供了一些有用的連結來幫助您加深這種理解。
2.1 學習基礎知識
-
• 閱讀線上 Docker 和 Kubernetes 教程: -
• 適合初學者的容器、虛擬機器和 Docker 簡介 -
• Kubernetes 簡介 -
• 教程 -
• 根據您計劃如何模板化您的應用程式: -
• Kustomize -
• helm -
• 如果您要與 CI 工具整合: -
• GitHub Actions 文件 -
• Jenkins 使用者指南
3. Argo CD核心概念
到此,您應該已經熟悉核心 Git、Docker、Kubernetes、持續交付和 GitOps 概念。以下是一些特定於 Argo CD 的概念。
-
• 應用程式:清單定義的一組 Kubernetes 資源。這是一個自定義資源定義 (CRD)。 -
• 應用程式源型別使用哪種工具來構建應用程式。 -
• 目標狀態應用程式的所需狀態,以 Git 儲存庫中的檔案表示。 -
• 即時狀態該應用程式的即時狀態。部署了哪些 pod 等。 -
• 同步狀態即時狀態是否與目標狀態匹配。部署的應用程式是否與 Git 所說的一致? -
• 同步使應用程式移動到其目標狀態的過程。例如透過將更改應用於 Kubernetes 叢集。 -
• 同步操作狀態同步是否成功。 -
• 重新整理 將Git 中的最新程式碼與即時狀態進行比較。找出不同之處。 -
• 健康應用程式的健康狀況,是否正常執行? 是否可以處理請求? -
• 工具從檔案目錄建立清單的工具。例如 Kustomize。請參閱應用程式源型別。 -
• 配置管理工具請參閱工具。 -
• 配置管理外掛自定義工具。
4. 架構
4.1 架構概述

Argo CD 被實現為 Kubernetes 控制器,它持續監控正在執行的應用程式並將當前的即時狀態與所需的目標狀態(如 Git 儲存庫中指定)進行比較。已部署的應用程式的即時狀態與目標狀態有偏差,則被視為已部署應用程式
OutOfSync
。Argo CD 報告並可視化差異,同時提供將即時狀態自動或手動同步回所需目標狀態的功能。對 Git 儲存庫中所需目標狀態所做的任何修改都可以自動應用並反映在指定的目標環境中。4.2 組成
4.2.1 API 伺服器
API 伺服器是一個 gRPC/REST 伺服器,用於公開 Web UI、CLI 和 CI/CD 系統使用的 API。它具有以下職責:
-
• 應用程式管理和狀態報告 -
• 呼叫應用程式操作(例如同步、回滾、使用者定義的操作) -
• 儲存庫和叢集憑證管理(儲存為 K8s 機密) -
• 身份驗證和授權委託給外部身份提供商 -
• RBAC 實施 -
• Git webhook 事件的監聽器/轉發器
4.2.2 儲存庫伺服器
儲存庫伺服器是一項內部服務,它維護儲存應用程式清單的 Git 儲存庫的本地快取。它負責在提供以下輸入時生成並返回 Kubernetes 清單:
-
• 儲存庫 URL -
• 修訂(提交、標記、分支) -
• 應用程式路徑 -
• 模板特定設定:引數、helm values.yaml
4.2.3 應用程式控制器
應用程式控制器是一個 Kubernetes 控制器,它持續監控正在執行的應用程式,並將當前即時狀態與所需的目標狀態(如儲存庫中指定)進行比較。它檢測
OutOfSync
應用程式狀態並選擇性地採取糾正措施。它負責呼叫任何使用者定義的生命週期事件鉤子(PreSync、Sync、PostSync)4.3 怎麼執行的
Argo CD 遵循
GitOps
模式,使用 Git 儲存庫作為定義所需應用程式狀態的真實來源。Kubernetes 清單可以透過多種方式指定:
• 自定義應用程式部署 • helm charts • jsonnet檔案 • YAML/json 清單的純目錄 • 任何配置為配置管理外掛的自定義配置管理工具
Argo CD 可自動在指定的目標環境中部署所需的應用程式狀態。應用程式部署可以跟蹤 Git 提交時對分支、標籤或固定到特定版本清單的更新。有關可用的不同跟蹤策略的更多詳細資訊,後續會博文會繼續講解。
5. Argo CD入門
要求
• 已安裝kubectl命令列工具。 • 有一個kubeconfig檔案(預設位置是 ~/.kube/config
)。• 已安裝CoreDNS外掛。
5.1 安裝 Argo CD
kubectl create namespace argocdkubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
這將建立一個新的名稱空間
argocd
,Argo CD 服務和應用程式資源將儲存在其中。注意:安裝清單包含ClusterRoleBinding
引用名稱空間的資源argocd
。如果您要將 Argo CD 安裝到不同的名稱空間,請確保更新名稱空間引用。
此預設安裝將具有自簽名證書,如果不進行額外操作則無法訪問。請執行以下任一操作:
-
• 按照說明配置證書(並確保客戶端作業系統信任它)。 -
• 配置客戶端作業系統以信任自簽名證書。 -
• 在本指南的所有 Argo CD CLI 操作中使用 –insecure 標誌。
注意:kubectl
必須將配置的預設名稱空間設定為argocd
。這隻對以下命令有用,因為前面的命令已經有 -n argocd 了:kubectl config set-context --current --namespace=argocd
用於
argocd login --core
配置CLI訪問並跳過步驟 3-5。注意:argocd-redis
Redis 的預設安裝使用密碼驗證。Redis 密碼與金鑰一起儲存在auth
安裝 Argo CD 的名稱空間中的 Kubernetes 機密中。
5.2 下載 Argo CD CLI
從github中下載最新的 Argo CD 版本。可以透過CLI 安裝文件找到更詳細的安裝說明。
也可在 Mac、Linux 和 WSL Homebrew 中使用:
brew install argocd
5.3 訪問 Argo CD API 伺服器
預設情況下,Argo CD API 伺服器不會透過外部 IP 公開。要訪問 API 伺服器,請選擇以下三種技術之一來暴露 Argo CD API 服務:
-
• 將 argocd-server 服務型別更改為 LoadBalancer
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
-
• ingress
按照Argo CD ingress 文件瞭解如何使用入口配置 Argo CD。
-
• 轉發埠
Kubectl 埠轉發也可用於連線 API 伺服器而無需公開服務。
kubectl port-forward svc/argocd-server -n argocd 8080:443
然後可以使用 https://localhost:8080 訪問 API 伺服器
5.4 使用 CLI 登入
帳戶的初始密碼
admin
是自動生成的,並以明文形式儲存在 Argo CD 安裝名稱空間中password
命名的機密欄位中。您可以使用CLI 快速的檢索此密碼
argocd admin initial-password -n argocd
提示:更改密碼後,您應該從 Argo CD 名稱空間中刪除argocd-initial-admin-secret
。該金鑰除了以明文形式儲存最初生成的密碼外,沒有其他用途,並且可以隨時安全地刪除。如果必須重新生成新的管理員密碼,Argo CD 將根據需要重新建立它。
使用上面的使用者名稱
admin
和密碼登入 Argo CD 的 IP 或主機名:argocd login <ARGOCD_SERVER>
注意:CLI 環境必須能夠與 Argo CD API 伺服器通訊。如果無法按照上述步驟 5.3 中的說明直接訪問,您可以透過以下機制之一告訴 CLI 使用埠轉發來訪問它
• 向每個 CLI 命令新增 --port-forward-namespace argocd
標誌。• 設定 ARGOCD_OPTS
環境變數:export ARGOCD_OPTS='--port-forward-namespace argocd'
。
使用以下命令更改密碼:
argocd account update-password
5.5 註冊叢集以部署應用程式(可選)
此步驟將叢集的憑據註冊到 Argo CD,並且僅在部署到外部叢集時才需要。在內部部署時(部署到 Argo CD 正在執行的同一叢集),應使用 https://kubernetes.default.svc 作為應用程式的 K8s API 伺服器地址。
首先列出當前 kubeconfig 中的所有叢集上下文:
kubectl config get-contexts -o name
從列表中選擇一個上下文名稱並將其提供給
argocd cluster add CONTEXTNAME
。例如,對於 docker-desktop 上下文,執行:argocd cluster add docker-desktop
上述命令將 ServiceAccount (
argocd-manager
) 安裝到該 kubectl 上下文的 kube-system 名稱空間中,並將服務帳戶繫結到管理員級別的 ClusterRole。Argo CD 使用此服務帳戶令牌執行其管理任務(即部署/監控)。注意:可以修改角色規則argocd-manager-role
,使其僅對有限的名稱空間、組、種類具有create
、update
、patch
、許可權。但是,Argo CD 需要在叢集範圍內具有 、 、許可權才能正常執行。delete``get``list``watch
5.6 從 Git 儲存庫建立應用程式
包含留言簿應用程式的示例儲存庫可在 https://github.com/argoproj/argocd-example-apps.git上找到,以演示 Argo CD 的工作原理。
-
• 透過 CLI 建立應用程式
首先,我們需要執行以下命令將當前名稱空間設定為 argocd:
kubectl config set-context --current --namespace=argocd
使用以下命令建立示例留言簿應用程式:
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default
-
• 透過 UI 建立應用程式
開啟瀏覽器進入 Argo CD 外部 UI,透過訪問瀏覽器中的 IP/主機名並使用步驟 4 中設定的憑據登入。
登入後,點選 + New App 按鈕,如下圖:

為您的應用命名
guestbook
,使用該專案default
,並保留同步策略Manual
:
透過將儲存庫 URL 設定為 github 儲存庫 URL,將https://github.com/argoproj/argocd-example-apps.git儲存庫連線到 Argo CD,將修訂保留為
HEAD
,並將路徑設定為guestbook
:
對於目標,將叢集 URL 設定為
https://kubernetes.default.svc
(或in-cluster
叢集名稱),並將名稱空間設定為default
:
填寫完以上資訊後,點選UI頂部的Create
guestbook
來建立應用程式:
5.7 同步應用程式
-
• 透過 CLI 同步
一旦建立了留言簿應用程式,您現在可以檢視其狀態:
$ argocd app get guestbookName: argocd/guestbookProject: defaultServer: https://kubernetes.default.svcNamespace: defaultURL: https://192.168.1.241:30786/applications/guestbookRepo: https://github.com/argoproj/argocd-example-apps.gitTarget:Path: guestbookSyncWindow: Sync AllowedSync Policy: <none>Sync Status: OutOfSync from (d7927a2)Health Status: MissingGROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service default guestbook-ui OutOfSync Missingapps Deployment default guestbook-ui OutOfSync Missing
應用程式狀態最初處於
OutOfSync
狀態,因為應用程式尚未部署,並且尚未建立任何 Kubernetes 資源。要同步(部署)應用程式,請執行:$ argocd app sync guestbookTIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE2024-07-09T15:23:49+08:00 Service default guestbook-ui OutOfSync Missing2024-07-09T15:23:49+08:00 apps Deployment default guestbook-ui OutOfSync Missing2024-07-09T15:23:50+08:00 Service default guestbook-ui OutOfSync Missing service/guestbook-ui created2024-07-09T15:23:50+08:00 apps Deployment default guestbook-ui OutOfSync Missing deployment.apps/guestbook-ui created2024-07-09T15:23:50+08:00 Service default guestbook-ui Synced Healthy service/guestbook-ui created2024-07-09T15:23:50+08:00 apps Deployment default guestbook-ui Synced Progressing deployment.apps/guestbook-ui createdName: argocd/guestbookProject: defaultServer: https://kubernetes.default.svcNamespace: defaultURL: https://192.168.1.241:30786/applications/guestbookRepo: https://github.com/argoproj/argocd-example-apps.gitTarget:Path: guestbookSyncWindow: Sync AllowedSync Policy: <none>Sync Status: Synced to (d7927a2)Health Status: ProgressingOperation: SyncSync Revision: d7927a27b4533926b7d86b5f249cd9ebe7625e90Phase: SucceededStart: 2024-07-09 15:23:49 +0800 CSTFinished: 2024-07-09 15:23:50 +0800 CSTDuration: 1sMessage: successfully synced (all tasks run)GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service default guestbook-ui Synced Healthy service/guestbook-ui createdapps Deployment default guestbook-ui Synced Progressing deployment.apps/guestbook-ui created
此命令從儲存庫檢索清單並執行
kubectl apply
清單。留言簿應用程式現已執行,您現在可以檢視其資源元件、日誌、事件和評估的健康狀況。接下來可以使用如下命令到K8S叢集中檢視服務部署情況:
root@k8s-master01:~# kubectl get pods -o wide -n defaultNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESguestbook-ui-76f97c94c-gnznn 1/1 Running 0 10m 10.233.125.49 k8s-worker01 <none> <none>
-
• 透過 UI 同步


連結:https://blog.csdn.net/u010589700/article/details/140299197?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-2-140299197-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-2-140299197-null-null.nonecase
(版權歸原作者所有,侵刪)
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組





······



以上所有資料獲取請掃碼
備註:最新運維資料

100%免費領取
(後臺不再回復,掃碼一鍵領取