什么是 Argo CD?

Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群。它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置自动应用到指定的 Kubernetes 集群中,确保集群的实际状态与仓库中的配置保持一致。Argo CD 支持各种 Kubernetes 清单格式,如 Kustomize、Helm Charts、Ksonnet、YAML 和 JSON,允许你通过 Git 仓库管理和部署 Kubernetes 资源。

Argo CD 的好处

  1. 声明式管理:Argo CD 采用声明式的管理方式,开发者只需在 Git 仓库中定义好应用的期望状态,Argo CD 就会自动将集群的实际状态与之同步。这样可以减少人为错误,并使配置管理更加清晰和可审计。

  2. GitOps 工作流:Argo CD 将 Git 仓库作为配置管理的唯一真理来源(Source of Truth),实现了 GitOps 的最佳实践。每一次应用的部署或更新都通过提交代码和合并请求触发,从而保证了自动化和审核跟踪。

  3. 持续同步和自愈:Argo CD 能够持续监控 Kubernetes 集群中的资源状态,并在检测到任何偏离期望状态的情况时自动纠正,使集群的状态始终与 Git 仓库中的配置一致。

  4. 多集群支持:Argo CD 可以管理多个 Kubernetes 集群,使得跨集群的应用部署和管理更加容易。

  5. 细粒度访问控制:Argo CD 提供了细粒度的访问控制机制,允许基于角色的访问控制(RBAC)以及通过 SSO 集成来控制对特定项目和应用的访问权限。

Argo CD 与 Jenkins 的对比

功能 Argo CD Jenkins
架构 专注于 Kubernetes 集群的声明式部署 通用的 CI/CD 工具,支持多种编程语言和环境
GitOps 支持 内置支持 GitOps 工作流,Git 是唯一的真理来源 需要通过插件或自定义脚本来支持 GitOps 工作流
部署自动化 自动同步 Kubernetes 资源配置,持续保持集群一致性 通过流水线(pipeline)手动配置部署过程
可观测性和回滚 内置监控和自动回滚功能 通过第三方工具或插件实现
插件支持 提供基础功能,无需大量插件 通过插件扩展功能,插件种类丰富
CI/CD 整合 专注于 CD 部分,通常与 Argo Workflows 等其他工具整合使用 既支持 CI 又支持 CD,整合度较高

使用 Argo CD 部署一个服务

接下来我们将展示如何使用 Argo CD 部署一个简单的服务。假设我们要在 Kubernetes 集群中部署一个 Nginx 服务。

1. 安装 Argo CD

首先,我们需要在 Kubernetes 集群中安装 Argo CD:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

安装完成后,可以通过以下命令获取 Argo CD API Server 的外部访问地址:

kubectl get svc -n argocd

2. 访问 Argo CD

你可以通过 port-forward 访问 Argo CD 的 Web 界面:

kubectl port-forward svc/argocd-server -n argocd 8080:443

然后在浏览器中访问 https://localhost:8080。默认的用户名是 admin,可以通过以下命令获取初始密码:

kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d

3. 创建 Git 仓库并推送配置

在 GitHub 或其他 Git 服务上创建一个新仓库,并将以下内容保存为 nginx-deployment.yaml 文件,推送到你的 Git 仓库中。

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80

4. 使用 YAML 文件定义 Argo CD 应用

创建一个新的 YAML 文件 argo-nginx-app.yaml,并将以下内容添加到其中:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx-app
namespace: argocd
spec:
project: default
source:
repoURL: '<YOUR_GIT_REPOSITORY_URL>'
targetRevision: HEAD
path: '<YOUR_APP_PATH>'
destination:
server: https://kubernetes.default.svc
namespace: default
syncPolicy:
automated:
prune: true
selfHeal: true

<your-username><your-repo> 替换为你的 GitHub 用户名和仓库名。

5. 应用 YAML 文件

通过以下命令将 Argo CD 应用的定义文件应用到 Kubernetes 集群:

kubectl apply -f argo-nginx-app.yaml

6. 验证部署

回到 Argo CD 的 Web 界面,你应该能看到名为 nginx-app 的应用。如果状态为 “Synced”,说明部署已经成功。

你也可以通过以下命令在 Kubernetes 中验证 Nginx 服务是否正常运行:

kubectl get pods -l app=nginx
kubectl get svc nginx-service

总结

Argo CD 是一个强大的 Kubernetes 持续交付工具,能够简化和自动化 Kubernetes 集群中的应用管理。通过 GitOps 工作流,Argo CD 使得应用部署和配置更具透明性和可追溯性。与 Jenkins 等传统 CI/CD 工具相比,Argo CD 更专注于 Kubernetes 环境,尤其适合微服务和容器化应用的持续交付。

Argo CD初体验的更多相关文章

  1. Xamarin.iOS开发初体验

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0

  2. win7升win10,初体验

    跟宿舍哥们聊着聊着,聊到最近发布正式版的win10,听网上各种评论,吐槽,撒花的,想想,倒不如自己升级一下看看,反正不喜欢还可以还原.于是就开始了win10的初体验了,像之前装黑苹果双系统一样的兴奋, ...

  3. node.js 初体验

    node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...

  4. Git 使用初体验

    http://my.oschina.net/moooofly/blog/228608 很久之前在 http://git.oschina.net/ 上创建了一个私有项目 modb ,目的主要是用来学习如 ...

  5. ipython及Python初体验

    阅读目录: Python环境体验 Python编辑器 ipython安装 Python提示符 Python初体验 print和变量 变量操作 内建函数:方法 数学运算:简单算术.随机数 关于模块 一. ...

  6. cucumber java从入门到精通(1)初体验

    cucumber java从入门到精通(1)初体验 cucumber在ruby环境下表现让人惊叹,作为BDD框架的先驱,cucumber后来被移植到了多平台,有cucumber-js以及我们今天要介绍 ...

  7. Python+Flask+Gunicorn 项目实战(一) 从零开始,写一个Markdown解析器 —— 初体验

    (一)前言 在开始学习之前,你需要确保你对Python, JavaScript, HTML, Markdown语法有非常基础的了解.项目的源码你可以在 https://github.com/zhu-y ...

  8. Node.js 网页瘸腿爬虫初体验

    延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...

  9. 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  10. 【Python3爬虫】学习分布式爬虫第一步--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

随机推荐

  1. HTML手稿

    没有一张图解决不了的事:https://www.processon.com/mindmap/5ccebc48e4b0841b844a23fb 1.网页中web 标准的三层组成? W3C 万维网联盟 结 ...

  2. SpringBoot定义异步任务类需要获取结果

    注意点: 要把异步任务封装到类里面,不能直接写到Controller 增加Future<String>返回结果AsyncResult<String>("task执行完 ...

  3. 洛谷P2864

    来一发在洛谷的第一篇题解 解析 首先从原点出发回到原点会形成一个环 要计算在环上的路程,首先我们要破环 利用建墙法破环 可以选取任意一个边缘上的树,往上或者往下或者往左往右建立一堵墙'|' 这样利用b ...

  4. 历代iPhone及Android手机的屏幕参数对比

    手机逻辑分辨率Point,也就是CSS像素,是进行网页适配的关键,以下是平时整理的一些备忘录数据,可以收藏. 屏幕清晰度分类 SD标清 HD高清(2倍屏) FHD全高清(3倍屏) QHD倍高清(4倍屏 ...

  5. WebGL管网展示(及TubeGeometry优化)

    前言 管路展示在三维场景中很常见.比如地下管网,建筑里面的水果,暖通管道等等的展示. 建立管路的方式主要两种: 通过3DMax C4D Blender等建模工具进行建模. 通过路径数据,程序生成三维管 ...

  6. [oeasy]python0120_英语的崛起_英文字符_小写字母的由来_不列颠帝国

    各语言字符编码 回忆上次内容 罗马 承袭了 希腊的文化 学习了 希腊的字符   拥有 罗马帝国的战力 基督教文化的影响     ​   添加图片注释,不超过 140 字(可选)   这个时候 不列颠 ...

  7. [rCore学习笔记 08]内核第一条指令

    了解QEMU 启动指令 qemu-system-riscv64 \ -machine virt \ -nographic \ -bios ../bootloader/rustsbi-qemu.bin ...

  8. java开发,入职第一天都干什么,带提前了解

    2024.7.24,帝都今晚大雨,在雨声磅礴的夜晚适合干什么,没错适合敲代码,写博客,今晚来聊下入职一个新公司,第一天都干什么. 无论是刚毕业的新手小白,还是工作十余年的职场老人,入职一家新公司,只要 ...

  9. Meta公司的Llama3大语言模型

    Github地址: https://github.com/meta-llama/llama3 官方介绍: https://ai.meta.com/blog/meta-llama-3/ 官方项目主页: ...

  10. wandb原来是可以网络直连的,国内可以无障碍使用

    一直不是很常使用神经网络训练可视化的工具,包括:tensorboard,等等,wandb平时也是直接就忽略,不过最近无意间看了看这个效果,感觉还是不错的,于是尝试了一下. 网上很多人说这个工具服务器在 ...