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 工具集成:
?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 清單可以通過多種方式指定:
?自定義應用程序部署
?helmcharts
?jsonnet文件
? YAML/json 清單的純目錄
? 任何配置為配置管理插件的自定義配置管理工具
Argo CD 可自動在指定的目標環境中部署所需的應用程序狀態。應用程序部署可以跟蹤 Git 提交時對分支、標簽或固定到特定版本清單的更新。有關可用的不同跟蹤策略的更多詳細信息,后續會博文會繼續講解。
5. Argo CD入門
要求
? 已安裝kubectl命令行工具。
? 有一個kubeconfig文件(默認位置是~/.kube/config)。
? 已安裝CoreDNS插件。
5.1 安裝 Argo CD
kubectl create namespace argocd kubectl 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
注意:
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頂部的Createguestbook來創建應用程序:
5.7 同步應用程序
?通過 CLI 同步
一旦創建了留言簿應用程序,您現在可以查看其狀態:
$ argocd app get guestbook Name: argocd/guestbook Project: default Server: https://kubernetes.default.svc Namespace: default URL: https://192.168.1.241:30786/applications/guestbook Repo: https://github.com/argoproj/argocd-example-apps.git Target: Path: guestbook SyncWindow: Sync Allowed Sync Policy:Sync Status: OutOfSync from (d7927a2) Health Status: Missing GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service default guestbook-ui OutOfSync Missing apps Deployment default guestbook-ui OutOfSync Missing
應用程序狀態最初處于OutOfSync狀態,因為應用程序尚未部署,并且尚未創建任何 Kubernetes 資源。要同步(部署)應用程序,請運行:
$ argocd appsyncguestbook TIMESTAMP GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE 2024-07-09T1549+08:00 Service default guestbook-ui OutOfSync Missing 2024-07-09T1549+08:00 apps Deployment default guestbook-ui OutOfSync Missing 2024-07-09T1550+08:00 Service default guestbook-ui OutOfSync Missing service/guestbook-ui created 2024-07-09T1550+08:00 apps Deployment default guestbook-ui OutOfSync Missing deployment.apps/guestbook-ui created 2024-07-09T1550+08:00 Service default guestbook-ui Synced Healthy service/guestbook-ui created 2024-07-09T1550+08:00 apps Deployment default guestbook-ui Synced Progressing deployment.apps/guestbook-ui created Name: argocd/guestbook Project: default Server: https://kubernetes.default.svc Namespace: default URL: https://192.168.1.241:30786/applications/guestbook Repo: https://github.com/argoproj/argocd-example-apps.git Target: Path: guestbook SyncWindow: Sync Allowed Sync Policy:Sync Status: Synced to (d7927a2) Health Status: Progressing Operation: Sync Sync Revision: d7927a27b4533926b7d86b5f249cd9ebe7625e90 Phase: Succeeded Start: 2024-07-09 1549 +0800 CST Finished: 2024-07-09 1550 +0800 CST Duration: 1s Message: successfully synced (all tasks run) GROUP KIND NAMESPACE NAME STATUS HEALTH HOOK MESSAGE Service default guestbook-ui Synced Healthy service/guestbook-ui created apps Deployment default guestbook-ui Synced Progressing deployment.apps/guestbook-ui created
此命令從存儲庫檢索清單并執行kubectl apply清單。留言簿應用程序現已運行,您現在可以查看其資源組件、日志、事件和評估的健康狀況。
接下來可以使用如下命令到K8S集群中查看服務部署情況:
root@k8s-master01:~# kubectl get pods -o wide -n default NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES guestbook-ui-76f97c94c-gnznn 1/1 Running 0 10m 10.233.125.49 k8s-worker01
?通過 UI 同步
在這里插入圖片描述
鏈接:https://blog.csdn.net/u010589700/article/details/140299197
-
容器
+關注
關注
0文章
507瀏覽量
22353 -
虛擬機
+關注
關注
1文章
962瀏覽量
28965 -
Argo
+關注
關注
0文章
4瀏覽量
4168 -
kubernetes
+關注
關注
0文章
239瀏覽量
8953
原文標題:5分鐘上手Argo CD:從零到生產級的實戰指南
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
評論