基于ArgoCD实现k8s环境下的持续部署

news2024/11/18 14:44:57

什么是 argo CD

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.

Argo CD是一个基于Kubernetes的声明式的GitOps工具。

这里我们引入了一个新的概念,

什么是GitOps

GitOps是以Git为基础,使用CI/CD来更新运行在云原生环境的应用,它秉承了DevOps的核心理念–“构建它并交付它(you built it you ship it)”。

image-20220112172428561

  • 当开发人员将开发完成的代码推送到git仓库会触发CI制作镜像并推送到镜像仓库
  • CI 处理完成后,可以手动或者自动修改原因配置,再将其推送到git仓库
  • GitOps 会同时对比目标状态和当前状态,如果两者不一致会触发CD将新的配置部署到集群中

其中,目标状态是git中的状态,现有状态是集群中的应用状态。

不用GitOps呢?

这样当然也是可以的,我们可以使用kubectl、helm等工具直接发布配置,但这会存在一个很严重的安全问题,那就是密钥共享。

为了让CI系统能够自动的部署应用,我们需要将集群的访问密钥共享给它,这会带来潜在的安全问题。

Argo CD

Argo CD 遵循GitOps模式,使用Git存储库存储所需应用程序的配置。

Kubernetes 清单可以通过如下几种方式指定:

  • kustomize应用程序
  • helm图表
  • ksonnet应用程序
  • jsonnet文件
  • 基于YAML/json配置
  • 配置管理插件配置的任何自定义配置管理工具

Argo CD 实现为kubernetes 控制器,它持续监视运行中的运用程序,并将当前的活动状态与期望的目标状态进行比较(如Git repo中指定的那样)。如果已部署的应用程序的活动

Argo CD 处在如下位置

image-20220117163305920

优势 如下:

  • 应用定义、配置和环境信息是声明式的,并可以进行版本控制
  • 引用部署和生命周期管理是全自动化的,是可审计的,清晰移动。
  • Argo CD是一个独立的部署工具,支持对多个环境、多个Kubernetes集群上的应用进行统一部署和管理

实践

前提:一个可用的kubernetes集群

实验环境:

  • kubernetes:1.24.6
  • argo cd:latest

安装Argo CD

安装很简单,不过在实际使用中需要对数据进行持久化。

我这里直接使用官方文档的安装命令:

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

执行成功后会在argocd的namespace 下创建如下资源。

 kubectl get all -n argocd
 NAME                                      READY   STATUS              RESTARTS   AGE
 pod/argocd-application-controller-0       0/1     Pending             0          49s
 pod/argocd-dex-server-5b6f56bb96-tgmv7    0/1     Pending             0          49s
 pod/argocd-redis-74d8c6db65-q6zqw         0/1     ContainerCreating   0          49s
 pod/argocd-repo-server-6bc9b54dc5-f7jqn   0/1     Pending             0          49s
 pod/argocd-server-748b45859b-5xs7r        0/1     Pending             0          49s
 
 NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
 service/argocd-dex-server       ClusterIP   10.96.135.0     <none>        5556/TCP,5557/TCP,5558/TCP   2m8s
 service/argocd-metrics          ClusterIP   10.96.22.47     <none>        8082/TCP                     2m1s
 service/argocd-redis            ClusterIP   10.96.58.160    <none>        6379/TCP                     2m1s
 service/argocd-repo-server      ClusterIP   10.96.122.24    <none>        8081/TCP,8084/TCP            2m
 service/argocd-server           ClusterIP   10.96.5.234     <none>        80/TCP,443/TCP               118s
 service/argocd-server-metrics   ClusterIP   10.96.162.214   <none>        8083/TCP                     117s
 
 NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
 deployment.apps/argocd-dex-server    0/1     1            0           107s
 deployment.apps/argocd-redis         0/1     1            0           96s
 deployment.apps/argocd-repo-server   0/1     1            0           95s
 deployment.apps/argocd-server        0/1     0            0           94s
 
 NAME                                            DESIRED   CURRENT   READY   AGE
 replicaset.apps/argocd-dex-server-5b6f56bb96    1         1         0       57s
 replicaset.apps/argocd-redis-74d8c6db65         1         1         0       57s
 replicaset.apps/argocd-repo-server-6bc9b54dc5   1         1         0       57s
 replicaset.apps/argocd-server-748b45859b        1         1         0       57s
 
 NAME                                             READY   AGE
 statefulset.apps/argocd-application-controller   0/1     100s

访问Argo server的方式有两种:

  • 通过web ui
  • 使用argocd 客户端工具

我这里直接使用web ui进行管理。

通过kubectl edit -n argocd svc argocd-server将service的type类型改为NodePort。改完后通过以下命令查看端口:

 [root@master01 ~]#  kubectl get svc -n argocd 
 NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
 argocd-dex-server       ClusterIP   10.96.135.0     <none>        5556/TCP,5557/TCP,5558/TCP   3h42m
 argocd-metrics          ClusterIP   10.96.22.47     <none>        8082/TCP                     3h42m
 argocd-redis            ClusterIP   10.96.58.160    <none>        6379/TCP                     3h42m
 argocd-repo-server      ClusterIP   10.96.122.24    <none>        8081/TCP,8084/TCP            3h42m
 argocd-server           NodePort    10.96.5.234     <none>        80:31127/TCP,443:31896/TCP   3h42m
 argocd-server-metrics   ClusterIP   10.96.162.214   <none>        8083/TCP                     3h42m
 

然后通过https://192.168.146.171:31896 访问页面 如下

登录账号为admin,密码通过如下方式获得

输入账号admin密码是初始化产生的

初始命令如下:

kubectl get secret -n argocd argocd-initial-admin-secret -o yaml

转换解析密码 base64 ,为解析后的密码(标红为登录密码)

 echo U2l3NFcwRVhZNHA3UzBGbw== | base64 -d

现在我们在Argo里创建应用,步骤如下:

(1)添加仓库地址,Settings → Repositories,点击 Connect Repo using HTTPS 按钮:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l1QWLyRb-1676431475234)(https://linusoss.oss-cn-shanghai.aliyuncs.com/img/企业微信截图_16424877195564.png)]

填写信息:

添加成功

image-20220118151733358

(2)创建应用

image-20220118152209720

image-20220118152550759

创建完成

这里我设置了手动SYNC,所以需要点一下下面的sync进行同步。

可以看到状态都变正常了。

image-20220118160306873

下面我们在集群里边查看一下我们创建的应用

 [root@master01 ~]# kubectl get pod | grep devops-argocd-test
 devops-argocd-test-658944bd6b-bpfzz   1/1     Running   0          2m5s
 [root@master01 ~]# kubectl get svc | grep devops-argocd-test
 devops-argocd-test   NodePort    10.96.234.12   <none>        8080:30797/TCP   28m

下面我们访问应用,如下:

image-20220118162121856

配置变更

下面我们手动修改配置将deploymeny.yaml文件中的镜像为v2版本。如下:

image-20220118162417578

提交到仓库。

下面我们回到ArgoCD中可以看到状态变成了OutOfSync

image-20220118163027313

这个时候,我们再手动sync一下,等待状态变正常。

image-20220118163415112

访问应用

image-20220118163533191

可以看到应用部署更新成功了

那下面我们看看整个应用的关系状态:

image-20220118164402453

还可以看到部署历史

image-20220118165434998

也可以基于这个页面进行回滚操作

image-20220118165558161

验证是否回滚成功

image-20220118165838951

官方文档:https://argoproj.github.io/argo-cd/#features

测试结果:

推荐特点:1、回滚方便

2、支持多集群

3、图形化,方便操作

4、自带回滚机制

推荐指数4星

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

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

相关文章

电脑资料如何转移到新电脑?教你3种数据迁移技巧

当下&#xff0c;电脑越来越普及&#xff0c;更换频率也越来越高。当我们购买新电脑&#xff0c;需要将旧电脑上的文件资料迁移到新电脑上&#xff0c;方便使用&#xff0c;电脑资料如何转移到新电脑&#xff1f;其实我们完全可以自己解决哦&#xff0c;下面一起来看下电脑资料…

VMware 修复了三个身份认证绕过漏洞

Bleeping Computer 网站披露&#xff0c;VMware 近期发布了安全更新&#xff0c;以解决 Workspace ONE Assist 解决方案中的三个严重漏洞&#xff0c;分别追踪为 CVE-2022-31685&#xff08;认证绕过&#xff09;、CVE-2022-31686 &#xff08;认证方法失败&#xff09;和 CVE-…

python应用之小麦生育期气象因子计算——基于pandas库

背景 本次介绍一下python的pandas包操作Excel&#xff08;或者CSV等&#xff09;&#xff0c;应用情景是计算不同站点小麦多年生育期内的气象因子的特征&#xff08;积温、降雨、辐射等&#xff09; 主要涉及以下知识点&#xff1a; 儒略日转换数据框值获取与字符串加法基于que…

.md文件转.pdf文件

一、安装VS code vscode是一个轻量级的、可扩展性十分强的开发编辑器。过程略&#xff0c;比较简单。 二、安装插件Markdown PDF 直接 install 就可以了。 我这里出现了安装失败的情景&#xff0c;这时候可以通过它给的提示&#xff0c;安转markdown-pdf 的 .vsix 文件&#…

数据分析与SAS学习笔记2

SAS在企业使用的情况&#xff1a; SAS是一个很昂贵的商业软件。在企业中使用SAS比较多&#xff0c;在企业界中是比较流行&#xff0c;在学术界使用R比较多。 SAS简介&#xff1a;统计分析系统 处理生物分析数据。 SAS成为统计领域的国际标准软件&#xff0c;服务全球50000多家…

顶象业务安全大讲堂全新升级,挖洞大神喊你来get 挖洞秘籍啦!

CSDN直播间&#xff1a; 红队外网打点与情报收集策略——「业务安全大讲堂第二季第1期」https://live.csdn.net/room/dingxiangtech/rBN4xrOp 顶象业务安全大讲堂第二季将于2月23日重磅回归&#xff0c;本季业务安全大讲堂继续以业务安全为主题&#xff0c;为大家带来业务安全…

网络渗透之信息搜集

网络渗透之信息搜集一、信息搜集1.1 概念1.2 分类1.3 收集那些信息二、域名信息收集2.1 域名介绍2.2 域名分类2.3 域名信息查询- whois2.3.1 whois2.3.2 whois查询2.3.3 whois查询方法2.4 域名信息收集-备案信息三、子域名信息收集四、IP地址信息收集4.1 IP反查域名4.2 域名查询…

UVa 1343 The Rotation Game 旋转游戏 IDA* BFS 路径还原

题目链接&#xff1a;The Rotation Game 题目描述&#xff1a; 给定二十四个整数&#xff0c;这二十四个整数由八个一&#xff0c;八个二&#xff0c;八个三组成&#xff0c;从左到右&#xff0c;从上到下依次描述下图方格中的数字&#xff1a; 例如上图左边对应的输入就是[1,…

Java中List排序的3种方法!

引用&#xff1a;https://blog.csdn.net/sinat_32849897/article/details/122098256 在某些特殊的场景下&#xff0c;我们需要在 Java 程序中对 List 集合进行排序操作。比如从第三方接口中获取所有用户的列表&#xff0c;但列表默认是以用户编号从小到大进行排序的&#xff0c…

acwing 2 普通背包 2维做法的坑

背包问题应该都挺熟了&#xff0c;但还是放一下题目 无论是一维还是二维的解法&#xff0c;思路都比较一致&#xff0c;就是用一个二维的dpdpdp矩阵&#xff0c;dp[i][j]dp[i][j]dp[i][j] 的定义为前 iii 个元素的最优组合在容量为 jjj 的背包的最大价值。 这个定义非常的巧妙…

前缀和-蓝桥杯

一、前缀和的概念数组a[0]~ a[n-1]&#xff0c;前缀和sum[i]等于a[0] ~ a[i]的和:sum[0] a[0]sum[1] a[0] a[1]sum[2] a[0] a[1] a[2] ......在O(n)时间内求所有前缀和: sum[i] sum[i-l] a[i]a[0]一般不用。二、前缀和与区间问题预计算出前缀和&#xff0c;能快速计算出区…

C语言结构体(初阶)声明、初始化、成员访问、传参

目录结构体类型的声明结构体变量的定义和初始化结构体成员访问结构体传参1.结构体类型的声明//1. struct Book {char name[20];int price; //成员列表 }b3,b4,b5;//全局变量 int main() {struct Book b1;//b1,b2局部变量struct Book b2;return 0; }//2. struct Book {char n…

重磅!ChatGPT席卷全球,Salesforce将推出EinsteinGPT!

2月9日&#xff0c;Salesforce首席执行官Marc Benioff在Twitter上发布了这样一则推文&#xff0c;表示将于3月7日的TrailblazerDX 23上发布Salesforce EinsteinGPT&#xff0c;随后Salesforce的官方Twitter也进行了转发。 虽然还没有正式的新闻稿&#xff0c;但不少业内人士猜测…

C++【模板初阶】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 No one saves us but ourselves, no one can and no one may. We ourselves must walk the path. 除了我们自己&#xff0c;没有人能拯救我们&#xf…

FreeRTOS-Tickless低功耗模式 | FreeRTOS十四

目录 说明&#xff1a; 一、低功耗模式简介 1.1、STM32低功耗模式 二、Tickless模式 2.1、Tickless模式如何功耗 2.2、Tickless模式设计思想 2.3、为了降低功耗&#xff0c;又不影响系统运行&#xff0c;怎么能做到呢&#xff1f; 三、Tickless模式修改配置 3.1、配置…

如何提升 ETF 期权隐含波动率和希腊值的计算速度?

期权的隐含波动率可以反应市场对未来的预期&#xff0c;通常使用牛顿法和二分法来计算。这两种方法都需要频繁迭代&#xff0c;且迭代次数不能确定&#xff0c;核心代码无法向量化&#xff0c;因此只能通过循环来逼近求解。这就导致在期权相关计算中&#xff0c;隐含波动率往往…

PO模式在Selenium中简单实践

初识PO模式 PO&#xff08;PageObject&#xff09;是一种设计模式。简单来说就是把一些繁琐的定位方法、元素操作方式等封装到类中&#xff0c;通过类与类之间的调用完成特定操作。 PO被认为是自动化测试项目开发实践的最佳设计模式之一。 在学习PO模式前&#xff0c;可以先…

InstructGPT笔记

一、InstructGPT是在GPT3上微调&#xff0c;ChatGPT是在GPT3.5上微调 二、该论文展示了怎么样对语言模型和人类意图之间进行匹配&#xff0c;方法是在人类的反馈上进行微调。 **三、方法简介&#xff1a;**收集很多问题&#xff0c;使用标注工具将问题的答案写出来&#xff0…

大数据面试题flume篇

1.Flume 的Source&#xff0c;Sink&#xff0c;Channel 的作用&#xff1f;你们Source 是什么类型&#xff1f; 1. 作用 &#xff08;1&#xff09;Source组件是专门用来收集数据的&#xff0c;可以处理各种类型、各种格式的日志数据&#xff0c;包括 avro、thrift、exec、jm…

Nginx介绍及安装(windows版,Linux版)

目录 一、Nginx介绍 1、Nginx优势 2、Nginx作用 3、部署静态资源 4、代理 5、负载均衡 二、Nginx安装步骤&#xff08;windows版&#xff09; 三、Nginx安装步骤&#xff08;Linux版&#xff09; 1、官网下载安装包&#xff0c;下载完之后上传到Linux系统上 2、在Lin…