0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Argo CD入门实战指南

马哥Linux运维 来源:CSDN技术社区 2025-05-15 17:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Argo CD入门、实战指南

1. Argo CD概述

1.1 什么是 Argo CD

Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。

aad0954e-2fde-11f0-afc8-92fbcf53809c.gif

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 清单可以通过多种方式指定:

•自定义应用程序部署

•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按钮,如下图:

ab007822-2fde-11f0-afc8-92fbcf53809c.png

为您的应用命名guestbook,使用该项目default,并保留同步策略Manual:

ab0e7364-2fde-11f0-afc8-92fbcf53809c.png

通过将存储库 URL 设置为 github 存储库 URL,将https://github.com/argoproj/argocd-example-apps.git存储库连接到 Argo CD,将修订保留为HEAD,并将路径设置为guestbook:

ab1c5dee-2fde-11f0-afc8-92fbcf53809c.png

对于目标,将集群 URL 设置为https://kubernetes.default.svc(或in-cluster集群名称),并将命名空间设置为default:

ab2977cc-2fde-11f0-afc8-92fbcf53809c.png

填写完以上信息后,点击UI顶部的Createguestbook来创建应用程序:

ab37d880-2fde-11f0-afc8-92fbcf53809c.png

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 同步

ab45b040-2fde-11f0-afc8-92fbcf53809c.png

在这里插入图片描述

ab6149ea-2fde-11f0-afc8-92fbcf53809c.png

链接:https://blog.csdn.net/u010589700/article/details/140299197

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 容器
    +关注

    关注

    0

    文章

    521

    浏览量

    22823
  • 虚拟机
    +关注

    关注

    1

    文章

    968

    浏览量

    30183
  • Argo
    +关注

    关注

    0

    文章

    4

    浏览量

    4225
  • kubernetes
    +关注

    关注

    0

    文章

    256

    浏览量

    9412

原文标题:5分钟上手Argo CD:从零到生产级的实战指南

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux Shell脚本入门实战详解

    Linux Shell脚本入门实战详解
    发表于 02-17 15:03 964次阅读

    ARDUINO开发实战指南

    ARDUINO开发实战指南
    发表于 09-21 05:40

    物联网实战指南

    物联网实战指南
    发表于 02-23 10:50

    Android开发入门实战

    Android开发入门实战
    发表于 03-30 13:25

    《STM32 HAL 库开发实战指南—基于H750》

    受限于单个文件不能超过5M,所以分成10个压缩包分别上传。 野火STM32系列丛书《STM32 HAL 库开发实战指南—基于H750》,内容殷实,讲解详细,适合入门和提高,非常不错
    发表于 01-14 10:09

    LabVIEW入门实战开发100例

    LabVIEW入门实战开发100例LabVIEW入门实战开发100例LabVIEW入门实战
    发表于 02-18 11:44 0次下载

    PIC单片机入门实战-扫描版

    PIC单片机入门实战-扫描版,PIC学习入门经典教材
    发表于 11-02 15:44 0次下载

    Scala动手实战入门

    本文档内容介绍了基于Scala动手实战入门,供参考
    发表于 04-13 15:13 8次下载

    树莓派(Raspberry Pi)实战指南.pdf

    树莓派实战指南
    发表于 05-07 15:17 130次下载

    《labview入门实战开发》经典案例

    labview入门实战开发案例100例书中的案例资料供大家学习
    发表于 01-11 18:10 185次下载

    arduino开发实战指南

    arduino开发实战指南
    发表于 02-22 14:56 0次下载

    LabVIEW入门实战开发100例

    LabVIEW入门实战开发100例,实用例子
    发表于 10-26 15:25 57次下载

    STM32库开发实战指南

    STM32库开发实战指南-刘火良,电子 epub格式,清晰非扫描
    发表于 10-27 16:25 25次下载

    emWin 实战指南

    电子发烧友网站提供《emWin 实战指南.pdf》资料免费下载
    发表于 12-22 11:03 6次下载

    LwIP应用开发实战指南—基于野火STM32

    LwIP应用开发实战指南—基于野火STM32—20210122
    发表于 01-17 14:34 9次下载