5分鐘上手ArgoCD:從零到生產級的實戰指南

Argo CD入門、實戰指南

1. Argo CD概述

1.1 什麼是 Argo CD

Argo CD 是針對 Kubernetes 的宣告式 GitOps 持續交付工具。

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架構圖
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-redisRedis 的預設安裝使用密碼驗證。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,使其僅對有限的名稱空間、組、種類具有createupdatepatch、許可權。但是,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頂部的Createguestbook來建立應用程式:

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 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
備註:最新運維資料
100%免費領取
(後臺不再回復,掃碼一鍵領取


相關文章