Argo CD入門、實(shí)戰(zhàn)指南
1. Argo CD概述
1.1 什么是 Argo CD
Argo CD 是針對 Kubernetes 的聲明式 GitOps 持續(xù)交付工具。
Argo CD 是針對 Kubernetes 的聲明式 GitOps 持續(xù)交付工具
1.2 為什么選擇 Argo CD
應(yīng)用程序定義、配置和環(huán)境應(yīng)具有聲明性并受版本控制。應(yīng)用程序部署和生命周期管理應(yīng)自動化、可審計且易于理解。
2. Argo CD基礎(chǔ)知識
在有效使用 Argo CD 之前,有必要了解該平臺所基于的底層技術(shù)。還需要了解提供給您的功能及其使用方法。以下部分提供了一些有用的鏈接來幫助您加深這種理解。
2.1 學(xué)習(xí)基礎(chǔ)知識
? 閱讀在線 Docker 和 Kubernetes 教程:
?適合初學(xué)者的容器、虛擬機(jī)和 Docker 簡介
?Kubernetes 簡介
?教程
? 根據(jù)您計劃如何模板化您的應(yīng)用程序:
?Kustomize
?helm
? 如果您要與 CI 工具集成:
?Jenkins 用戶指南
3. Argo CD核心概念
到此,您應(yīng)該已經(jīng)熟悉核心 Git、Docker、Kubernetes、持續(xù)交付和 GitOps 概念。以下是一些特定于 Argo CD 的概念。
?應(yīng)用程序:清單定義的一組 Kubernetes 資源。這是一個自定義資源定義 (CRD)。
?應(yīng)用程序源類型使用哪種工具來構(gòu)建應(yīng)用程序。
?目標(biāo)狀態(tài)應(yīng)用程序的所需狀態(tài),以 Git 存儲庫中的文件表示。
?實(shí)時狀態(tài)該應(yīng)用程序的實(shí)時狀態(tài)。部署了哪些 pod 等。
?同步狀態(tài)實(shí)時狀態(tài)是否與目標(biāo)狀態(tài)匹配。部署的應(yīng)用程序是否與 Git 所說的一致?
?同步使應(yīng)用程序移動到其目標(biāo)狀態(tài)的過程。例如通過將更改應(yīng)用于 Kubernetes 集群。
?同步操作狀態(tài)同步是否成功。
?刷新 將Git 中的最新代碼與實(shí)時狀態(tài)進(jìn)行比較。找出不同之處。
?健康應(yīng)用程序的健康狀況,是否正常運(yùn)行? 是否可以處理請求?
?工具從文件目錄創(chuàng)建清單的工具。例如 Kustomize。請參閱應(yīng)用程序源類型。
?配置管理工具請參閱工具。
?配置管理插件自定義工具。
4. 架構(gòu)
4.1 架構(gòu)概述
Argo CD 被實(shí)現(xiàn)為 Kubernetes 控制器,它持續(xù)監(jiān)控正在運(yùn)行的應(yīng)用程序并將當(dāng)前的實(shí)時狀態(tài)與所需的目標(biāo)狀態(tài)(如 Git 存儲庫中指定)進(jìn)行比較。已部署的應(yīng)用程序的實(shí)時狀態(tài)與目標(biāo)狀態(tài)有偏差,則被視為已部署應(yīng)用程序OutOfSync。Argo CD 報告并可視化差異,同時提供將實(shí)時狀態(tài)自動或手動同步回所需目標(biāo)狀態(tài)的功能。對 Git 存儲庫中所需目標(biāo)狀態(tài)所做的任何修改都可以自動應(yīng)用并反映在指定的目標(biāo)環(huán)境中。
4.2 組成
4.2.1 API 服務(wù)器
API 服務(wù)器是一個 gRPC/REST 服務(wù)器,用于公開 Web UI、CLI 和 CI/CD 系統(tǒng)使用的 API。它具有以下職責(zé):
? 應(yīng)用程序管理和狀態(tài)報告
? 調(diào)用應(yīng)用程序操作(例如同步、回滾、用戶定義的操作)
? 存儲庫和集群憑證管理(存儲為 K8s 機(jī)密)
? 身份驗(yàn)證和授權(quán)委托給外部身份提供商
? RBAC 實(shí)施
? Git webhook 事件的監(jiān)聽器/轉(zhuǎn)發(fā)器
4.2.2 存儲庫服務(wù)器
存儲庫服務(wù)器是一項(xiàng)內(nèi)部服務(wù),它維護(hù)保存應(yīng)用程序清單的 Git 存儲庫的本地緩存。它負(fù)責(zé)在提供以下輸入時生成并返回 Kubernetes 清單:
? 存儲庫 URL
? 修訂(提交、標(biāo)記、分支)
? 應(yīng)用程序路徑
? 模板特定設(shè)置:參數(shù)、helm values.yaml
4.2.3 應(yīng)用程序控制器
應(yīng)用程序控制器是一個 Kubernetes 控制器,它持續(xù)監(jiān)控正在運(yùn)行的應(yīng)用程序,并將當(dāng)前實(shí)時狀態(tài)與所需的目標(biāo)狀態(tài)(如存儲庫中指定)進(jìn)行比較。它檢測OutOfSync應(yīng)用程序狀態(tài)并選擇性地采取糾正措施。它負(fù)責(zé)調(diào)用任何用戶定義的生命周期事件鉤子(PreSync、Sync、PostSync)
4.3 怎么運(yùn)行的
Argo CD 遵循GitOps模式,使用 Git 存儲庫作為定義所需應(yīng)用程序狀態(tài)的真實(shí)來源。Kubernetes 清單可以通過多種方式指定:
?自定義應(yīng)用程序部署
?helmcharts
?jsonnet文件
? YAML/json 清單的純目錄
? 任何配置為配置管理插件的自定義配置管理工具
Argo CD 可自動在指定的目標(biāo)環(huán)境中部署所需的應(yīng)用程序狀態(tài)。應(yīng)用程序部署可以跟蹤 Git 提交時對分支、標(biāo)簽或固定到特定版本清單的更新。有關(guān)可用的不同跟蹤策略的更多詳細(xì)信息,后續(xù)會博文會繼續(xù)講解。
5. Argo CD入門
要求
? 已安裝kubectl命令行工具。
? 有一個kubeconfig文件(默認(rèn)位置是~/.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
這將創(chuàng)建一個新的命名空間argocd,Argo CD 服務(wù)和應(yīng)用程序資源將存儲在其中。
注意:
安裝清單包含ClusterRoleBinding引用命名空間的資源argocd。如果您要將 Argo CD 安裝到不同的命名空間,請確保更新命名空間引用。
此默認(rèn)安裝將具有自簽名證書,如果不進(jìn)行額外操作則無法訪問。請執(zhí)行以下任一操作:
? 按照說明配置證書(并確保客戶端操作系統(tǒng)信任它)。
? 配置客戶端操作系統(tǒng)以信任自簽名證書。
? 在本指南的所有 Argo CD CLI 操作中使用 --insecure 標(biāo)志。
注意:
kubectl必須將配置的默認(rèn)命名空間設(shè)置為argocd。這只對以下命令有用,因?yàn)榍懊娴拿钜呀?jīng)有 -n argocd 了:
kubectl config set-context --current --namespace=argocd
用于argocd login --core配置CLI訪問并跳過步驟 3-5。
注意:
argocd-redisRedis 的默認(rèn)安裝使用密碼驗(yàn)證。Redis 密碼與密鑰一起存儲在auth安裝 Argo CD 的命名空間中的 Kubernetes 機(jī)密中。
5.2 下載 Argo CD CLI
從github中下載最新的 Argo CD 版本。可以通過CLI 安裝文檔找到更詳細(xì)的安裝說明。
也可在 Mac、Linux 和 WSL Homebrew 中使用:
brew install argocd
5.3 訪問 Argo CD API 服務(wù)器
默認(rèn)情況下,Argo CD API 服務(wù)器不會通過外部 IP 公開。要訪問 API 服務(wù)器,請選擇以下三種技術(shù)之一來暴露 Argo CD API 服務(wù):
? 將 argocd-server 服務(wù)類型更改為LoadBalancer
kubectl patch svc argocd-server -n argocd -p'{"spec": {"type": "LoadBalancer"}}'
? ingress
按照Argo CD ingress 文檔了解如何使用入口配置 Argo CD。
? 轉(zhuǎn)發(fā)端口
Kubectl 端口轉(zhuǎn)發(fā)也可用于連接 API 服務(wù)器而無需公開服務(wù)。
kubectl port-forward svc/argocd-server -n argocd 8080:443
然后可以使用 https://localhost:8080 訪問 API 服務(wù)器
5.4 使用 CLI 登錄
帳戶的初始密碼admin是自動生成的,并以明文形式存儲在 Argo CD 安裝命名空間中password命名的機(jī)密字段中。
您可以使用CLI 快速的檢索此密碼
argocd admin initial-password -n argocd
提示:
更改密碼后,您應(yīng)該從 Argo CD 命名空間中刪除argocd-initial-admin-secret。該密鑰除了以明文形式存儲最初生成的密碼外,沒有其他用途,并且可以隨時安全地刪除。如果必須重新生成新的管理員密碼,Argo CD 將根據(jù)需要重新創(chuàng)建它。
使用上面的用戶名admin和密碼登錄 Argo CD 的 IP 或主機(jī)名:
argocd login
注意:
CLI 環(huán)境必須能夠與 Argo CD API 服務(wù)器通信。如果無法按照上述步驟 5.3 中的說明直接訪問,您可以通過以下機(jī)制之一告訴 CLI 使用端口轉(zhuǎn)發(fā)來訪問它
? 向每個 CLI 命令添加--port-forward-namespace argocd標(biāo)志。
? 設(shè)置ARGOCD_OPTS環(huán)境變量:export ARGOCD_OPTS='--port-forward-namespace argocd'。
使用以下命令更改密碼:
argocd account update-password
5.5 注冊集群以部署應(yīng)用程序(可選)
此步驟將集群的憑據(jù)注冊到 Argo CD,并且僅在部署到外部集群時才需要。在內(nèi)部部署時(部署到 Argo CD 正在運(yùn)行的同一集群),應(yīng)使用 https://kubernetes.default.svc 作為應(yīng)用程序的 K8s API 服務(wù)器地址。
首先列出當(dāng)前 kubeconfig 中的所有集群上下文:
kubectl config get-contexts -o name
從列表中選擇一個上下文名稱并將其提供給argocd cluster add CONTEXTNAME。例如,對于 docker-desktop 上下文,運(yùn)行:
argocd cluster add docker-desktop
上述命令將 ServiceAccount (argocd-manager) 安裝到該 kubectl 上下文的 kube-system 命名空間中,并將服務(wù)帳戶綁定到管理員級別的 ClusterRole。Argo CD 使用此服務(wù)帳戶令牌執(zhí)行其管理任務(wù)(即部署/監(jiān)控)。
注意:
可以修改角色規(guī)則argocd-manager-role,使其僅對有限的命名空間、組、種類具有create、update、patch、權(quán)限。但是,Argo CD 需要在集群范圍內(nèi)具有 、 、權(quán)限才能正常運(yùn)行。delete``get``list``watch
5.6 從 Git 存儲庫創(chuàng)建應(yīng)用程序
包含留言簿應(yīng)用程序的示例存儲庫可在 https://github.com/argoproj/argocd-example-apps.git上找到,以演示 Argo CD 的工作原理。
?通過 CLI 創(chuàng)建應(yīng)用程序
首先,我們需要運(yùn)行以下命令將當(dāng)前命名空間設(shè)置為 argocd:
kubectl config set-context --current --namespace=argocd
使用以下命令創(chuàng)建示例留言簿應(yīng)用程序:
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 創(chuàng)建應(yīng)用程序
打開瀏覽器進(jìn)入 Argo CD 外部 UI,通過訪問瀏覽器中的 IP/主機(jī)名并使用步驟 4 中設(shè)置的憑據(jù)登錄。
登錄后,點(diǎn)擊+ New App按鈕,如下圖:
為您的應(yīng)用命名guestbook,使用該項(xiàng)目default,并保留同步策略Manual:
通過將存儲庫 URL 設(shè)置為 github 存儲庫 URL,將https://github.com/argoproj/argocd-example-apps.git存儲庫連接到 Argo CD,將修訂保留為HEAD,并將路徑設(shè)置為guestbook:
對于目標(biāo),將集群 URL 設(shè)置為https://kubernetes.default.svc(或in-cluster集群名稱),并將命名空間設(shè)置為default:
填寫完以上信息后,點(diǎn)擊UI頂部的Createguestbook來創(chuàng)建應(yīng)用程序:
5.7 同步應(yīng)用程序
?通過 CLI 同步
一旦創(chuàng)建了留言簿應(yīng)用程序,您現(xiàn)在可以查看其狀態(tài):
$ 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
應(yīng)用程序狀態(tài)最初處于OutOfSync狀態(tài),因?yàn)閼?yīng)用程序尚未部署,并且尚未創(chuàng)建任何 Kubernetes 資源。要同步(部署)應(yīng)用程序,請運(yùn)行:
$ 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
此命令從存儲庫檢索清單并執(zhí)行kubectl apply清單。留言簿應(yīng)用程序現(xiàn)已運(yùn)行,您現(xiàn)在可以查看其資源組件、日志、事件和評估的健康狀況。
接下來可以使用如下命令到K8S集群中查看服務(wù)部署情況:
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
-
容器
+關(guān)注
關(guān)注
0文章
509瀏覽量
22440 -
虛擬機(jī)
+關(guān)注
關(guān)注
1文章
966瀏覽量
29316 -
Argo
+關(guān)注
關(guān)注
0文章
4瀏覽量
4190 -
kubernetes
+關(guān)注
關(guān)注
0文章
243瀏覽量
9062
原文標(biāo)題:5分鐘上手Argo CD:從零到生產(chǎn)級的實(shí)戰(zhàn)指南
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論