argo rollout使用

news/2024/4/28 12:23:46/文章来源:https://blog.csdn.net/ApexPredator/article/details/137146057

一、前言

      argorollout是比argocd更高级的发布工具,其中包含自动化金丝雀发布、自动化蓝绿发布、还可以通过argo命令或者dashboard查看发布的过程

二、使用

需要先部署argo rollout服务

参考:https://github.com/argoproj/argo-rollouts/tree/master/manifests

创建argo rollout目录

mkdir /opt/argocd-rollout && cd /opt/argocd-rollout

下载yaml文件部署

wget https://github.com/argoproj/argo-rollouts/blob/master/manifests/install.yaml

创建命名空间

kubectl create namespace argo-rollouts

部署argo rollout服务

kubectl apply -f install.yaml -n argo-rollouts

查看是否部署完成

kubectl get all -n argo-rollouts

安装命令行工具

wget https://github.com/argoproj/argo-rollouts/releases/download/v1.6.6/kubectl-argo-rollouts-linux-amd64
cp kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
chmod +x /usr/local/bin/kubectl-argo-rollouts

部署dashboard

wget https://github.com/argoproj/argo-rollouts/blob/master/manifests/dashboard-install.yaml

更改部署文件的svc配置,改为nodeport模式

vi dashboard-install.yaml

执行部署 

kubectl create -f dashboard-install.yaml -n argo-rollouts

启动dashboard

kubectl argo rollouts dashboard

自动化金丝雀发布

在目录中创建部署服务的yaml文件

rollout.yaml

apiVersion: argoproj.io/v1alpha1
kind: Rollout       #使用rollout类型,实际就是比deployment更高级的控制器
metadata:name: argolabels:app: argo
spec:replicas: 3     #定义副本数selector:matchLabels:app: argotemplate:metadata:labels:app: argospec:containers:- name: argoimage: argoproj/rollouts-demo:green       #使用argo rollouts的demo可以更直观的看到金丝雀发布过程imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 8080protocol: TCPstrategy:       #定义升级策略canary:         #使用金丝雀发布canaryService: argo-canary   #金丝雀环境的svc服务名称stableService: argo          #生产环境的svc服务名称canaryMetadata:       #应用于金丝雀环境pod的标签labels:deployment: canarystableMetadata:       #应用于生产环境pod的标签labels:deployment: stabletrafficRouting:       #定义ingressnginx:          #使用nginx控制器stableIngress: argo       #定义生产环境ingress的名称additionalIngressAnnotations:     #定义ingress的参数canary-by-header: X-Canary      #定义使用该请求头的请求走金丝雀环境steps:              #升级流程- setWeight: 20    #更新百分之20,会根据pod的数量更新20%的pod,也会设置金丝雀环境的ingress流量权重为20%- pause: {}        #暂停更新,需要手动执行恢复才会继续执行- setWeight: 50    #设置金丝雀环境的流量权重为50%- pause:duration: 30s   #暂停30秒- setWeight: 70- pause:duration: 30s

service.yaml

apiVersion: v1      #这里创建两个svc来切分生产环境和金丝雀环境的流量
kind: Service
metadata:name: argolabels: app: argo
spec:ports:- port: 80targetPort: httpprotocol: TCPname: httpselector:app: argo
---
apiVersion: v1
kind: Service
metadata:name: argo-canarylabels: app: argo
spec:ports:- port: 80targetPort: httpprotocol: TCPname: httpselector:app: argo

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress      #创建生产环境的ingress
metadata: name: argolabels:app: argoannotations:kubernetes.io/ingress.class: nginx
spec:rules:- host: argo.apex.com       #定义域名http:paths:- path: /pathType: Prefixbackend:service:name: argo     #匹配生产环境的svcport:name: http

定义完成后,在argocd创建对应的应用,先执行同步在k8s创建出服务,在更改应用为自动同步模式

 访问一下部署的argo服务,会看到现在所有访问都是绿的

 这里在gitops直接更改rollout的镜像,模拟版本更新,触发argocd的自动化发布

 等待三分钟argocd触发自动同步后可以看到开始了金丝雀发布

查看部署的argo服务 会发现有一部分金丝雀环境的流量即蓝色的

 也可以使用curl命令访问去验证,会有一部分流量调度到金丝雀环境

 查看一下发布的情况,可以用命令行,也可以用dashboard

kubectl argo rollouts get rollout argo --watch  #后面的argo是部署的服务名称

 

与此同时可以来查看一下ingress、svc的情况 

可以看到金丝雀环境的svc 标签选择器绑定了一个新的标签,并且新版本的pod也是绑定在了金丝雀环境的svc上

 可以看到新建了一个金丝雀环境的ingress,并且通过金丝雀环境的svc发现了新版本的pod

 还可以通过rollout更直观的了解金丝雀发布的流程

kubectl describe rollout argo

先是新建了rs并将pod数量设置为1,然后创建金丝雀环境的ingress设置流量权重,再将金丝雀环境的svc标签选择器更改

了解到这里就在继续执行更新,也可以执行取消更新

继续更新 

kubectl argo rollouts promote argo

取消更新,执行取消后会回滚到stable版本

kubectl argo rollouts abort argo

 可以通过dashboard看发布的情况

查看argo服务也会发现全部是蓝的流量

 全部发布完成后再查看svc和ingress会发现,金丝雀环境、生产环境的svc和ingress都是指向的新版本的pod,但金丝雀环境的ingress流量权重为0

补充一下金丝雀发布是金丝雀环境的所有pod启动后,再去删除生产环境的所有pod

 至此金丝雀发布完成

自动化蓝绿发布

跟金丝雀发布一样使用gitops仓库存放yaml文件

rollout.yaml

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:name: argolabels:app: argo
spec:replicas: 3selector:matchLabels:app: argotemplate:metadata:labels:app: argospec:containers:- name: argoimage: argoproj/rollouts-demo:blueimagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 8080protocol: TCPstrategy:       #发布策略blueGreen:     #开启蓝绿发布autoPromotionEnabled: trueactiveService: argo     #定义svc服务名称

 service.yaml

apiVersion: v1
kind: Service
metadata:name: argolabels: app: argo
spec:ports:- port: 80targetPort: httpprotocol: TCPname: httpselector:app: argo

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: argolabels:app: argoannotations:kubernetes.io/ingress.class: nginx
spec:rules:- host: argo.apex.comhttp:paths:- path: /pathType: Prefixbackend:service:name: argoport:name: http

在argocd中创建该服务的应用并进行第一次同步在k8s集群中创建服务再设置该应用为自动同步

在gitops仓库中更改rollout文件的镜像配置模拟版本发布

 

等待argocd自动同步,会发现两个版本的pod共存

查看argo服务会发现全部都是绿的流量

可以通过svc查看,也是通过更改svc的标签选择器,去选择新版本的pod,来达到流量切换到新版本pod的效果 

也可以通过rollout查看

至此自动化蓝绿发布介绍完成

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序的页面制作---常用组件及其属性2

一、标签栏taBar 在全局配置文件app.json中添加taBar配置,可实现标签栏配置。标签栏最少2个,最多5个 (1)如何配置标签栏? 1》先建多个文件,(以我的index,list,myform文…

RelayAttention:让大型语言模型更高效地处理长提示符

一、前言 虽然大型语言模型 (LLM) 近年来取得了非常显著的进展,也在各种自然语言处理任务中展现出强大的能力。然而,LLM 的在实际的应用落地层面也面临着一些实际挑战,其中之一就是效率和成本问题,导致了在垂直行业实际落地的应用…

CE-Net:用于2D医学图像分割的上下文编码器网络

CE-Net:用于2D医学图像分割的上下文编码器网络 摘要引言方法 【2019】CE-NetContext Encoder Network for 2D Medical Image Segmentation 摘要 医学图像分割是医学图像分析中的重要步骤。随着卷积神经网络在图像处理中的快速发展,深度学习已经被用于医…

服务器被攻击有什么表现?

引言 在现今高度互联的网络环境中,服务器安全已成为每个企业和个人站长不容忽视的重要议题。服务器作为承载关键业务和数据的核心设施,一旦遭受攻击,不仅可能导致服务中断、数据泄露,还可能带来严重的经济损失和声誉损害。本文旨…

【二叉树】Leetcode 98. 验证二叉搜索树【中等】

验证二叉搜索树 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例1&a…

fpga 通过axi master读写PS侧DDR的仿真和上板测试

FPGA和ARM数据交互是ZYNQ系统中非常重要的内容。PS提供了供FPGA读写的AXI-HP接口用于两者的高速通信和数据交互。一般的,我们会采用AXI DMA的方式去传输数据,DMA代码基本是是C编写,对于FPGA开发者来说不利于维护和debug。本文提供一种手写AXI…

6、鸿蒙学习-Stage模型应用程序包结构

基于Stage模型开发的应用,经编译打包后,其应用程序的结构如下图应用程序包结构(Stage模型)所示。开发者需要熟悉应用程序包结构相关的基本概念。 一、在开发态,一个应用包含一个或者多个Module,可以在DevE…

“免密支付”出事了?看看背后的安全隐患

#免密支付# 的安全问题近日冲上热搜,大家来看看怎么一回事。 “我不知道什么时候开通的‘免密支付’功能,直到手机频繁收到账单提醒,才发现平台账号被盗,对方通过‘免密支付’消费了5000多元。这种事关会员安全的操作提示应该设置…

机器学习概论—增强学习

机器学习概论—增强学习 强化学习(Reinforcement Learning, RL)或者说是增强学习,是机器学习的一个领域,旨在使智能体通过与环境的交互学习如何做出决策,它是关于在特定情况下采取适当的行动来最大化奖励。它被各种软件和机器用来寻找在特定情况下应采取的最佳行为或路径…

无忧微服务:如何实现大流量下新版本的发布自由

作者:项良、十眠 微服务上云门槛降低,用好微服务才是关键 据调研数据显示,约 70% 的生产故障是由变更引起的。在阿里云上的企业应用如茶百道、极氪汽车和来电等,他们是如何解决变更引起的稳定性风险,实现了在白天高流…

etf期权开户有哪些基本条件,期权的佣金最低多少?

在中国开设etf期权账户,投资者需要满足一系列的基本条件。首先,投资者的证券账户日均客户权益不得低于50万元人民币,且需有6个月以上的证券或期货交易经验。此外,投资者还必须通过相关的测试,并具备被认可的期权模拟交…

wpf程序调用macad的c++编写的dll

1.把macad里的build,source文件夹复制到一个文件夹里 2.创建一个wpf项目,在解决方案里添加macad.occt项目 3.把macad.occt设为dll文件,修改平台工具集,在macadtest里引用macad.occt 4.运行,应该会报错,说找…

深度学习每周学习总结P3(天气识别)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 数据链接 提取码:o3ix 目录 0. 总结1. 数据导入部分数据导入部分代码详解:a. 数据读取部分a.1 提问:关…

30-3 越权漏洞 - 水平越权(横向越权)

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、定义 攻击者可以访问和操作与其拥有同级权限的用户资源。 示例: 学生A在教务系统上正常只能修改自己的作业内容,但由于不合理的权限校验规则等原因,学生A可以修改学生B的内…

【CDA二级数据分析备考思维导图】

CDA二级数据分析备考思维导图 CDA二级复习备考资料共计七个章节,如需资料,请留言,概览如下图:一、数据采集与处理1.数据采集方法2.市场调研和数据录入3、数据探索与可视化4、数据预处理方法 总结:以上为自己学习数据分…

修改 RabbitMQ 默认超时时间

MQ客户端正常运行,突然就报连接错误, 错误信息写的很明确,是客户端连接超时。 不过很疑虑,为什么会出现连接超时呢?代码没动过,网络也ok,也设置了心跳和重连机制。 最终在官网中找到了答案&am…

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架:java、springboot 2.UI界面:jQuery、HTML、CSS、 VUE 3.开发工具:IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

CSGO赛事管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. 系…

harmonyos:显示图片(Image)

开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif,具体用法请参考Image组件。 Image通过调…

路由的完整使用

多页面和单页面 多页面是指超链接等跳转到另一个HTML文件,单页面是仍是这个文件只是路由改变了页面的一部分结构. 路由的基本使用 使用vue2,则配套的路由需要是第3版. 1)下载vue-router插件 2)引入导出函数 3)new 创建路由对象 4)当写到vue的router后只能写路由对象,因此只…