一、简介

Argo CD 是一个为 Kubernetes 而生的,遵循声明式 GitOps 理念的持续部署(CD)工具,它的配置和使用非常简单,并且自带一个简单易用的 Dashboard 页面,并且支持多种配置管理/模板工具(例如 Kustomize、Helm、Ksonnet、Jsonnet、plain-YAML)。

Argo CD 被实现为一个 Kubernetes 控制器,它持续监控正在运行的应用程序并将当前的实时状态与所需的目标状态(例如 Git 仓库中的配置)进行比较,在 Git 仓库更改时自动同步和部署应用程序。

二、环境

1、准备好一套 Kubernetes 集群,详见:kubernetes环境部署

2、搭建好github/gitee/gitlab代码仓库,或者运用Argocd官方的的例子做实验

三、安装与部署

1、安装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 的命令行工具,不同操作系统具体的安装方式不同,以下是linux系统的安装

wget https://github.com/argoproj/argo-cd/releases/download/v2.3.3/argocd-linux-amd64
chmod +x argocd-linux-amd64
sudo mv argocd-linux-amd64 /usr/local/bin/argocd
[root@master bin]# argocd version
argocd: v2.3.3+07ac038BuildDate: 2022-03-30T01:46:59ZGitCommit: 07ac038a8f97a93b401e824550f0505400a8c84eGitTreeState: cleanGoVersion: go1.17.6Compiler: gcPlatform: linux/amd64

登录

[root@master bin]# argocd login 192.168.10.11:30705
WARNING: server certificate had error: x509: cannot validate certificate for 192.168.10.11 because it doesn't contain any IP SANs. Proceed insecurely (y/n)? y
Username: admin
Password:
'admin:login' logged in successfully
Context '192.168.10.11:30705' updated

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,我这里随机生成的 NodePort 端口是 30705。

[root@master bin]# kubectl get svc -n argocd
NAME                                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
argocd-applicationset-controller          ClusterIP   10.96.31.213    <none>        7000/TCP                     18h
argocd-dex-server                         ClusterIP   10.96.170.202   <none>        5556/TCP,5557/TCP,5558/TCP   18h
argocd-metrics                            ClusterIP   10.96.51.70     <none>        8082/TCP                     18h
argocd-notifications-controller-metrics   ClusterIP   10.96.10.173    <none>        9001/TCP                     18h
argocd-redis                              ClusterIP   10.96.55.149    <none>        6379/TCP                     18h
argocd-repo-server                        ClusterIP   10.96.12.89     <none>        8081/TCP,8084/TCP            18h
argocd-server                             NodePort    10.96.67.143    <none>        80:31665/TCP,443:30705/TCP   18h
argocd-server-metrics                     ClusterIP   10.96.119.89    <none>        8083/TCP                     18h

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

登录成功界面

5、部署

添加远程仓库,如下图所示


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

创建应用

法一::使用 CLI 创建 APP

argocd app create myapp \
--repo https://gitee.com/jacson88/argocd-demo.git \
--path demo1 --dest-server \
https://kubernetes.default.svc \
--dest-namespace argocd
# 列出应用
argocd app list# 查看 myapp 应用
argocd app get myapp

法二:使用 YAML 文件创建

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

法三:使用界面创建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 来访问。
Namespace: 部署应用的命名空间。

点击create创建应用

此时处于OutOfSync 的状态

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

点击同步操作,同步git上的代码
一段时间后,status将变为healthy,synced


查看service服务

在集群外部通过 <节点 IP>: 端口访问 myapp 程序,可以看到此时是 v1 版本。

版本升级

我们将 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。


版本回滚

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

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

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

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


案例二,创建官方提供的应用例子


修改service中的type

[root@master bin]# kubectl get all -n argocd
NAME                                                    READY   STATUS    RESTARTS   AGE
pod/guestbook-ui-85985d774c-267pp                       1/1     Running   0          9hNAME                                              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
service/guestbook-ui                              NodePort    10.96.250.223   <none>        80:31638/TCP                 10hNAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/guestbook-ui                       1/1     1            1           10hNAME                                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/guestbook-ui-85985d774c                       1         1         1       10h

参考链接

ArgoCD安装:链接
使用Argo CD和GitOps解决配置漂移问题:链接

ArgoCD的安装与部署相关推荐

  1. Qt最新版5.14在Windows环境静态编译安装和部署的完整过程 VS 2019-Qt static link build Windows 32 bit/64 bit

    文章目录 为什么要静态编译(static link) 1.源码下载/source code download 2. 编译工具下载/compiler download 编译环境选择:MinGW/MSVC ...

  2. Qt最新版5.13在Windows环境静态编译安装和部署的完整过程(VS 2017/VS 2019)

    文章目录 为什么要静态编译 1.源码下载 2. 编译工具下载 ActivePerl Python Ruby 编译环境选择 3.编译 1.修改源码里的qtbase\mkspecs\common\msvc ...

  3. Qt最新版5.12在Windows环境静态编译安装和部署的完整过程(VS2017)

    文章目录 为什么要静态编译 1.源码下载 2. 编译工具下载 ActivePerl Python Ruby 编译环境选择 3.编译 1.修改源码里的qtbase\mkspecs\common\msvc ...

  4. Ansible的安装及部署

    Ansible的安装及部署 1 实验环境 2 Ansible的安装 3 Ansible的基本信息 4 构建Ansible清单 4.1 全局清单 4.2 设定受控主机的组 4.2.1 清单查看 4.2. ...

  5. idea上传项目到码云_mall前端项目的安装与部署

    本文主要讲解mall前端项目mall-admin-web的在Windows和Linux环境下的安装及部署. Windows下的安装及部署 下载nodejs并安装 下载地址:https://nodejs ...

  6. Linux下Redis3.2的安装和部署

    redis简介: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  7. vSphere虚拟化之ESXi安装及部署

    vSphere虚拟化之ESXi的安装及部署(上) 一.什么是vSphere? vSphere是VNware公司在2001年基于云计算推出的一套企业级虚拟化解决方案.核心组件为ESXi.如今,经历了5个 ...

  8. 探讨微软团队开发利器VSTS之安装及部署篇

    一.引言Visual Studio 2005 Team System是微软结合MSF成功开发经验的基础上,首次由软件开发领域延伸至整个软件开发生命周期管理的开发工具.Visual Studio 200 ...

  9. (运维)VMware-vCenter-Server-Appliance-5.0安装与部署

    可以下载 VMware vCenter Server Appliance,以作为在 Windows 计算机上安装 vCenter Server 的替代方法.vCenter Server Applian ...

最新文章

  1. python输出二进制数_二进制中1的个数(python)
  2. python 城市地图_python – 使用Basemap获取城市地图的最佳方式?
  3. Python8:logging Module
  4. mysql5.5连接器_MySQL :: MySQL 5.1参考手册 :: 26. 连接器
  5. 为什么子进程每次执行顺序不一样_看完这篇还不懂Redis的RDB持久化,你来打我...
  6. flex module 弹出窗问题
  7. 内燃机附件和部件行业调研报告 - 市场现状分析与发展前景预测
  8. Linux内核IP Queue机制的分析
  9. 分别用switch语句和if语句实现键盘录入月份,输出对应的季节
  10. 基于IM实现直播礼物效果
  11. 小程序跳转样式布局错乱_微信小程序页面布局问题
  12. Nacos 注册中心的设计原理详解
  13. 前端面试JS必备基础之深浅拷贝和this指向问题@莫成尘
  14. OPA 20 - deliberately generate an error
  15. 从炒房现象反思当前中国投资环境
  16. redhat rhel 6.0 下载以及制作U盘安装盘
  17. Adobe InDesign CS5
  18. 写作系列之: UAV领域概述的参考文献集合
  19. 六年级下册计算机电子板报教案,六年级下信息技术教案电子报刊设计河大版.doc...
  20. Oracle项目管理系统之预算变更

热门文章

  1. 遥感影像变化检测数据集
  2. 怎么理解python语言是一种强类型语言_Python 到底是强类型语言,还是弱类型语言?...
  3. 深度解析| CRM的三重境界、两种关系、两个问题
  4. Bat文件批量处理----DOS命令
  5. 计算机知识普及的策划,普及安全用电知识志愿者活动策划书
  6. mysql unique index 允许为null
  7. IBM合作伙伴世界峰会:将全部筹码都押在认知计算上
  8. idea git 拉取代码特别慢解决方案
  9. 那些年我们追过的C#奇葩关键字——忐忑
  10. LSM-Tree(BigTable的理论模型)(转)