一、什么是 argo cd

Argo CD 是用于 Kubernetes 的声明性 GitOps 连续交付工具。

二、为什么使用 argo cd

Argo CD 可在指定的目标环境中自动部署所需的应用程序状态,应用程序部署可以在 Git 提交时跟踪对分支,标签的更新,或固定到清单的特定版本。

三、argo cd 架构图

Argo CD 的主要职责是 CD(Continuous Delivery,持续交付),将应用部署到 Kubernetes 等环境中,而 CI(Continuous Integration,持续集成)主要是交给 Jenkins,Gitlab CI 等工具来完成。

Argo CD 的架构图如下:

四、Argo CD 使用

Argo CD 一般安装在 Kubernetes 集群中。

1、安装 Argo CD

使用以下命令在 argocd 命名空间部署 Argo CD:

# 创建命名空间
kubectl create namespace argocd
# 部署 argo cd
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl apply -n argocd -f install.yaml

2、安装 Argo CD CLI

Argo CD CLI 是用于管理 Argo CD 的命令行工具,不同操作系统具体的安装方式可以参考 Argo CD CLI Installation

Mac 系统可以直接使用 brew install 进行安装,如下:

brew install argocd

3、发布 Argo CD 服务

默认情况下, Argo CD 服务不对外暴露服务,可以通过 LoadBalancer 或者 NodePort 类型的 Service、Ingress、Kubectl 端口转发等方式将 Argo CD 服务发布到 Kubernetes 集群外部。

这里使用以下命令通过 NodePort 服务的方式暴露 Argo CD 到集群外部:

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

现在已经将名字为 argocd-server 的 Service 改成 NodePort 类型了,可以在集群外部通过 <节点 IP>:<随机生成的 NodePort 端口> 来访问 Argo CD。

浏览器输入 https://<节点 IP>:port 访问 Argo CD。

4、获取 Argo CD 密码

默认情况下 admin 帐号的初始密码是自动生成的,会以明文的形式存储在 Argo CD 安装的命名空间中名为 argocd-initial-admin-secret 的 Secret 对象下的 password 字段下,可以用下面的命令获取:

kubectl -n argocd get secret \
argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d# 返回结果
kj8bDMiDTnsEfnjg

在浏览器输入密码登录 Argo CD,登录界面如下图:

登录后的界面如下所示:

5、准备 Git 仓库

在 Gitlab 上创建项目,取名为 argocd-lab,为了方便实验将仓库设置为 public 公共仓库。在仓库中创建 quickstart 目录,在目录中创建两个 yaml 资源文件,分别是 myapp-deployment.yaml 和 myapp-service.yaml。

gitlab 内容如下:


yaml 资源文件内容如下:

# myapp-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: myapp
spec:replicas: 1selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- image: registry.cn-shanghai.aliyuncs.com/public-namespace/myapp:v1name: myappports:- containerPort: 80# myapp-service.yaml
apiVersion: v1
kind: Service
metadata:name: myapp
spec:ports:- port: 80targetPort: 80nodePort: 32060type: NodePortselector:app: myapp

6、创建 Argo CD App

首先创建一个命名空间 devops 用于 Argo CD 部署应用。

kubectl create ns devops

可以有三种方式创建 app,分别介绍如下:

方式一:使用 UI 创建 App

  • Application Name: 自定义的应用名。
  • Project: 使用默认创建好的 default 项目。
  • SYNC POLICY: 同步方式,可以选择自动或者手动,这里我们选择手动同步。

  • Repository URL: 项目的 Git 地址。
  • Revision: 分支名。
  • Path: yaml 资源文件所在的相对路径。

Cluster URL: Kubernetes API Server 的访问地址,由于 Argo CD 和下发应用的 Kubernetes 集群是同一个,因此可以直接使用 http://kubernetes.default.svc 来访问。关于 Kubernetes 中 DNS 解析规则可以查看 Pod 与 Service 的 DNS。
Namespace: 部署应用的命名空间。

创建完成后如下图所示,此时处于 OutOfSync 的状态:

由于设置的是手动同步,因此需要点一下下面的 SYNC 进行同步:

在弹出框点击 SYNCHRONIZE,确认同步:

等待同步完成。

在 Argo CD 上点击应用进入查看详情,如下图:

方式二:使用 CLI 创建 APP

argocd app create myapp2 \
--repo http://11.8.36.29/root/argocd-lab.git \
--path quickstart --dest-server \
https://kubernetes.default.svc \
--dest-namespace devops

使用 argocd 命令查看创建的应用:

# 列出应用
❯ argocd app list
NAME   CLUSTER                         NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                   PATH        TARGET
myapp  https://kubernetes.default.svc  devops     default  Synced  Healthy  <none>      <none>      http://11.8.36.29/root/argocd-lab.git  quickstart  main# 查看 myapp 应用
❯ argocd app get myapp
Name:               myapp
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          devops
URL:                https://11.8.36.159:32313/applications/myapp
Repo:               http://11.8.36.29/root/argocd-lab.git
Target:             main
Path:               quickstart
SyncWindow:         Sync Allowed
Sync Policy:        <none>
Sync Status:        Synced to main (82baed1)
Health Status:      HealthyGROUP  KIND        NAMESPACE  NAME   STATUS  HEALTH   HOOK  MESSAGEService     devops     myapp  Synced  Healthy        service/myapp created
apps   Deployment  devops     myapp  Synced  Healthy        deployment.apps/myapp created

方式三:使用 YAML 文件创建

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:name: myappnamespace: argocd
spec:destination:namespace: devops # 部署应用的命名空间server: https://kubernetes.default.svc # API Server 地址project: default # 项目名source:path: quickstart # 资源文件路径repoURL: http://11.8.36.29/root/argocd-lab.git # Git 仓库地址targetRevision: main # 分支名

7、版本升级

将 myapp 应用从手动同步改成自动同步。点击 APP DETAILS -> SYNC POLICY,点击 ENABLE AUTO-SYNC:

编辑 myapp 资源文件,将版本从 v1 改为 v2,点击 Commit changes,提交更改:

等待一会 Argo CD 会自动更新应用,如果等不及可以点击 Refresh,Argo CD 会去立即获取最新的资源文件。可以看到此时 myapp Deployment 会新创建 v2 版本的 Replicaset,v2 版本的 Replicaset 会创建并管理 v2 版本的 Pod。

8、版本回滚

升级到 v2 版本以后, v1 版本的 Replicaset 并没有被删除,而是继续保留,这是为了方便我们回滚应用。在 myapp 应用中点击 HISTORY AND ROLLBACK 查看历史记录,可以看到有 2 个历史记录:

假设刚刚上线的 v2 版本出现了问题,需要回滚回 v1 版本,那么可以选中 v1 版本,然后点击 Rollback 进行回滚:

在回滚的时候需要禁用 AUTO-SYNC 自动同步,点击 OK 确认即可:

等待一会可以看到此时已经回滚成功,此时 Pod 是 v1 版本的,并且由于此时线上的版本并不是 Git 仓库中最新的版本,因此此时同步状态是 OutOfSync:

Argo CD 使用相关推荐

  1. 指定的网络文件夹目前是以其他用户名和密码进行映射的_使用 GitLab CI 与 Argo CD 进行 GitOps 实践

    在现在的云原生世界里面 GitOps 不断的被提及,这种持续交付的模式越来越受到了大家的青睐,我们前面也有文章详细讲解了 GitOps 的相关概念,在网上也可以找到很多关于它的资源,但是关于 GitO ...

  2. Tekton 与 Argo CD 结合实现 GitOps

    前面我们使用 Tekton 完成了应用的 CI/CD 流程,但是 CD 是在 Tekton 的任务中去完成的,现在我们使用 GitOps 的方式来改造我们的流水线,将 CD 部分使用 Argo CD ...

  3. 【 云原生 | kubernetes 】- Argo CD Gitlab身份验证及SSO单点登录

    ⚡️前言:了解OAuth协议.OAuth是一种授权协议,它可以用来保证第三方只有当获得授权的时候,才能访问授权者的权限 我们之前文章已经大概了解了Argo CD的作用和一些用法.在通过web访问时,我 ...

  4. Argo CD使用指南:如何构建一套完整的GitOps?

    随着Kubernetes继续将自己确立为容器编排的行业标准,为你的应用和工具找到使用声明式模型的有效方法是成功的关键.在这篇文章中,我们将在AWS中建立一个K3s Kubernetes集群,然后使用A ...

  5. 体验 Argo CD

    体验 Argo CD Argo CD 是什么 Argo CD 核心概念 Application Project Argo CD 架构 安装 Argo CD CLI 部署应用 使用用户界面检查应用程序 ...

  6. Argo CD 核心概念

    Application(应用):一组Kubernetes资源清单的统一定义,属于CRD(Custom Resource Definition,定制资源定义)资源. Application source ...

  7. Argo CD 实践教程 08

    服务账户 服务账户是我们用于身份验证自动化操作的帐户,例如CI/CD流水线.它们不应该与用户绑定,因为如果我们禁用该用户或限制其权限,我们不希望我们的流水线开始失败.服务账户应具有严格的访问控制,并且 ...

  8. Argo CD系列视频图文版之手把手教你搭建Argo CD 实验环境

    开篇 本期视频,我们一起来手把手的搭建实验环境.为了节省资源,我们部署 All-In-One K8S环境,也就是所有 kubernetes 资源,运行在一台服务器上. 视频直达 第一部分视频 第二部分 ...

  9. Argo CD系列视频图文版之Github 实现全自动化 CICD

    配套视频 开篇 本期视频,我们来解决上节课发现的两个问题.问题一是业务源码和部署清单放在同一个仓库,耦合严重.问题二,需要实现 CICD 的自动化. 第一个问题很简单,业务源码和部署清单拆分成两个仓库 ...

最新文章

  1. centos 重启网络服务的方法
  2. Android源码大全
  3. Linux自学日记1
  4. icmp基于tcp还是udp_面试爱考、编程必会基础!TCP/IP必知必会10大问题……
  5. ubuntukylin14安装ns-allinone-2.35教程(虚拟机ubuntu同理)
  6. IDEA中怎么设置黑色或白色背景?
  7. iOS给图片打水印,并将打过水印的图片生成到沙盒中
  8. 这个GitHub 1400星的Git魔法书火了,斯坦福校友出品
  9. 如何退出vim编辑器?
  10. CSP202009-1 称检测点查询(100分)【数学】
  11. android之读取网络图片并显示
  12. 3.10 Spark RDD编程案例
  13. f3 fatfree小型php,F3-fatfree小型php框架教程(三)
  14. 闲置android平板电脑,让闲置的iPad / Android平板电脑成为计算机屏幕的扩展监视器!...
  15. QT 5.9.0下载安装及配置教程(自动化运维环境)
  16. 大一linux考试试题及答案,大一计算机期末考试试题及答案
  17. [转]国内外sns源码搜集
  18. 数字光栅投影技术——相移轮廓术(PSP)
  19. 去摘,遥不可及的星~
  20. python绘制capm模型

热门文章

  1. 大一c语言课程报告报书模板,C语言课程设计实验报模板.doc
  2. 日常-2018.07.31- eclipse / myeclipse 快捷键、超市管理系统
  3. 高中关于人工智能方面的课题_AI专题 | 北京高中学生人工智能调研报告来了
  4. 日产汽车将在未来生产安全性高且小型化的全固体电池
  5. draw.io图像的保存与导出
  6. 关于PPP协议 用来干嘛的?每个协议应当都有自己的用途。
  7. 白鹭安装node_Node.js大会 白鹭时代完美诠释Egret Wing解放HTML5生产力
  8. Hadoop入门学习笔记-第五天(hadoop-hive安装部署与配置笔记)
  9. 沪股通连续八日净流入 累计净流入58.67亿元
  10. python爬虫基础小案例, scrapy框架,思路和经验你全都有。