Argo CD入门、实战指南

news2024/9/20 15:03:02

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 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 <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 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:        <none>
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 app sync guestbook
TIMESTAMP                  GROUP        KIND   NAMESPACE                  NAME    STATUS    HEALTH        HOOK  MESSAGE
2024-07-09T15:23:49+08:00            Service     default          guestbook-ui  OutOfSync  Missing
2024-07-09T15:23:49+08:00   apps  Deployment     default          guestbook-ui  OutOfSync  Missing
2024-07-09T15:23:50+08:00            Service     default          guestbook-ui  OutOfSync  Missing              service/guestbook-ui created
2024-07-09T15:23:50+08:00   apps  Deployment     default          guestbook-ui  OutOfSync  Missing              deployment.apps/guestbook-ui created
2024-07-09T15:23:50+08:00            Service     default          guestbook-ui    Synced  Healthy                  service/guestbook-ui created
2024-07-09T15:23:50+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:        <none>
Sync Status:        Synced to  (d7927a2)
Health Status:      Progressing

Operation:          Sync
Sync Revision:      d7927a27b4533926b7d86b5f249cd9ebe7625e90
Phase:              Succeeded
Start:              2024-07-09 15:23:49 +0800 CST
Finished:           2024-07-09 15:23:50 +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   <none>           <none>
  • 通过 UI 同步

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1923277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL数据库day7.11

一&#xff0c;SQL概述 1.1 SQL语句语法 MySQL 数据库的 SQL 语句不区分大小写&#xff0c;关键字建议使用大写&#xff0c; 以分号结尾。例如&#xff1a; SELECT * FROM user; 使用 /**/ 、 -- 、 # 的方式完成注释 /* 多行注释 */ -- 单行注释 # 单行注释 SELECT * FRO…

296个地级市GDP相关数据(2000-2023年)

GDP相关数据&#xff1a;衡量地区经济活动的综合指标 国内生产总值&#xff08;GDP&#xff09;是衡量一个国家或地区经济规模和发展水平的核心指标。它反映了在一定时期内&#xff0c;所有常住单位生产活动的最终成果。 GDP的种类及其含义&#xff1a; 名义GDP&#xff1a;按…

QT--槽函数和控件篇一

一、自定义信号和槽函数 QT 将信号和槽集成在QObject类中&#xff1b;发送者和接受者都必须继承这个类。Q_OBJECT宏是实现信号和槽机制、属性系统和元对象系统的关键。Q_OBJECT宏必须出现在每个使用信号和槽的类中&#xff0c;因为它为这些类提供了必要的元数据和功能。信号在…

使用 Python 创建你的第一个情绪分析模型

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础 人工智能Python基础 人工智能基础核心知识 人工智能BI核心知识 人工智能CV核心知识 BTS 的《Dynamite》1拥有 15,815,254 条评论&#xff0c;是 YouTube 上评论最多的视频之一。 假设 BTS 成员想知道这些听众对这首…

二、计划任务

1.什么是计划任务 对于一些特定的任务&#xff0c;可以设定任务&#xff0c;让服务在规定时间去执行 2.windows中的计划任务 打开控制面板》管理工具》任务计划程序》创建基本任务 3.linux中的计划任务 周期性的计划crontab crontab -l :显示当前的计划惹怒我 -e&#…

探索JT808协议在车辆远程视频监控系统中的应用

一、部标JT808协议概述 随着物联网技术的迅猛发展&#xff0c;智能交通系统&#xff08;ITS&#xff09;已成为现代交通领域的重要组成部分。其中&#xff0c;车辆远程监控与管理技术作为ITS的核心技术之一&#xff0c;对于提升交通管理效率、保障道路安全具有重要意义。 JT8…

【单片机毕业设计选题24060】-基于ESP8266的燃气浓度监测系统

系统功能: 1. 连接blinker云平台&#xff0c;通过手机控制。 2. 手机界面text&#xff0c;number控件。 3. 通过DHT11采集温湿度。 4. 通过MQ2采集可燃气体。 系统功能框图: 主要功能模块原理图 资料获取地址 https://shop272529339.taobao.com 部分代码: unsigned char…

【linux】进程间通信(IPC)——匿名管道,命名管道与System V内核方案的共享内存,以及消息队列和信号量的原理概述

目录 ✈必备知识 进程间通信概述 &#x1f525;概述 &#x1f525;必要性 &#x1f525;原理 管道概述 &#x1f525;管道的本质 &#x1f525;管道的相关特性 &#x1f525;管道的同步与互斥机制 匿名管道 &#x1f525;系统调用接口介绍 &#x1f525;内核原理 …

Python函数 之 匿名函数

1.概念 匿名函数: 使用 lambda 关键字 定义的表达式&#xff0c;称为匿名函数. 2.语法 lambda 参数, 参数: 一行代码 # 只能实现简单的功能&#xff0c;只能写一行代码 # 匿名函数 一般不直接调用&#xff0c;作为函数的参数使用的 3.代码 4.练习 # 1, 定义匿名函数, 参数…

Python excel知识库批量模糊匹配的3种方法实例(fuzzywuzzy\Gensim)

前言 当然&#xff0c;基于排序的模糊匹配&#xff08;类似于Excel的VLOOKUP函数的模糊匹配模式&#xff09;也属于模糊匹配的范畴&#xff0c;但那种过于简单&#xff0c;不是本文讨论的范畴。 本文主要讨论的是以公司名称或地址为主的字符串的模糊匹配。 使用编辑距离算法进…

【香橙派】Orange pi AIpro开发板评测,看小白如何从0到1快速入门,以及亲测手写数字识别模型训练与推理

作为业界首款基于昇腾深度研发的AI开发板&#xff0c;Orange Pi AIpro无论在外观上、性能上还是技术服务支持上都非常优秀。 接口丰富&#xff0c;扩展能力强。支持Ubuntu、openEuler操作系统&#xff0c;满足大多数AI算法原型验证、推理应用开发的需求。 目录 开发板介绍亮点顶…

APP专项测试之网络测试

背景 当前app网络环境比较复杂&#xff0c;越来越多的公共wifi&#xff0c;网络制式有2G、3G、4G网络&#xff0c;会对用户使用app造成一定影响&#xff1b;当前app使用场景多变&#xff0c;如进地铁、上公交、进电梯等&#xff0c;使得弱网测试显得尤为重要&#xff1b; 网络正…

SpringBootWeb 篇-入门了解 Swagger 的具体使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Swagger 介绍 1.1 Swagger 和 Yapi 的使用场景 2.0 Swagger 的使用方式 2.1 导入 knife4j 的 maven 坐标 2.2 在配置类中加入 knife4j 相关配置 2.3 设置静态资源…

「案例分析」不同发展阶段非人力资源部门的人力资源管理职能

引言&#xff1a; 企业人力资源管理应该是公司全体管理人员都应该承担的责任&#xff0c;是所有管理者日常工作的重要组成成分&#xff0c;非人力资源部门经理&#xff0c;作为公司的重要管理者&#xff0c;也应该参与公司人力资源管理活动&#xff0c;协调配合人力资源部门做…

2024年7月好用的图纸加密软件丨图纸加密软件分享

图纸加密是企业保护技术资产和知识产权的关键措施之一。随着信息技术的飞速发展&#xff0c;图纸作为企业核心竞争力的表现形式&#xff0c;其安全性越来越受到重视。图纸一旦泄露&#xff0c;不仅可能导致企业产品被模仿&#xff0c;市场份额受损&#xff0c;还可能引发法律风…

AI大模型推理过程与优化技术深度剖析

在人工智能的浩瀚星空中&#xff0c;AI大模型以其卓越的性能和广泛的应用前景&#xff0c;成为了推动技术进步的璀璨明星。本文旨在深入探讨AI大模型的推理过程及其背后的优化技术&#xff0c;为理解这一复杂而精妙的技术体系提供一个清晰的视角。 一、AI大模型的推理过程揭秘 …

昇思25天学习打卡营第二十天|基于MobileNetv2的垃圾分类

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第二十天了。 今天是第二十天&#xff0c;从第十天开始&#xff0c;进入了应用实战阶段&#xff0c;前九天都是基础入门阶段&#xff0c;具体的学习内容可以看链接 基础学习部分 昇思25天学习打卡…

Avalonia创建导航菜单

1. 简介 已开源&#xff0c;后续还会继续更新学习到的内容&#xff0c;欢迎Star&#xff0c;GitHub地址 开发Avalonia需要的一些资料&#xff0c;我已经分享到另一篇文章 示意图 涉及到内容&#xff1a; MVVM路由模板 开发&#xff1a; 开发工具&#xff1a;Rider&#x…

Kithara与OpenCV (一)

Kithara使用 OpenCV 库 目录 Kithara使用 OpenCV 库简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 Ope…

Mac数据恢复篇:Mac照片恢复工具

由于更新错误、意外删除或数据覆盖&#xff0c;照片可能会从 Mac 上消失。当您忘记在Mac上启用iCloud时&#xff0c;您也可能会丢失它们。 幸运的是&#xff0c;有多种方法可以从Mac恢复丢失或删除的照片&#xff1a;使用备份文件夹或专业的Mac照片恢复软件。但是&#xff0c;如…