argo rollout使用

一、前言

      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: argo
  labels:
    app: argo
spec:
  replicas: 3     #定义副本数
  selector:
    matchLabels:
      app: argo
  template:
    metadata:
      labels:
        app: argo
    spec:
      containers:
      - name: argo
        image: argoproj/rollouts-demo:green       #使用argo rollouts的demo可以更直观的看到金丝雀发布过程
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
          protocol: TCP
  strategy:       #定义升级策略
    canary:         #使用金丝雀发布
      canaryService: argo-canary   #金丝雀环境的svc服务名称
      stableService: argo          #生产环境的svc服务名称
      canaryMetadata:       #应用于金丝雀环境pod的标签
        labels:
          deployment: canary
      stableMetadata:       #应用于生产环境pod的标签
        labels:
          deployment: stable
      trafficRouting:       #定义ingress
        nginx:          #使用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: argo
  labels: 
    app: argo
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: argo
---
apiVersion: v1
kind: Service
metadata:
  name: argo-canary
  labels: 
    app: argo
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: argo

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress      #创建生产环境的ingress
metadata: 
  name: argo
  labels:
    app: argo
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: argo.apex.com       #定义域名
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: argo     #匹配生产环境的svc
                port:
                  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: argo
  labels:
    app: argo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: argo
  template:
    metadata:
      labels:
        app: argo
    spec:
      containers:
      - name: argo
        image: argoproj/rollouts-demo:blue
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 8080
          protocol: TCP
  strategy:       #发布策略
     blueGreen:     #开启蓝绿发布
       autoPromotionEnabled: true
       activeService: argo     #定义svc服务名称

 service.yaml

apiVersion: v1
kind: Service
metadata:
  name: argo
  labels: 
    app: argo
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: argo

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argo
  labels:
    app: argo
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
    - host: argo.apex.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: argo
                port:
                  name: http

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

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

 

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

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

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

也可以通过rollout查看

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

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

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

相关文章

关于web_server项目的学习记录(自用)

主要参考资料: 我在地铁吃闸机 基础处理框架:Multi-reactor muduo库有三个核心组件实现持续监听reactor的fd:channel;epoll/poller/eventloop类 channel 事件监听器epoll_ctl监听到了fd发生了什么事件,channel类会封装每个fd和fd感兴趣的事…

036—pandas 按行将列名根据值由大到小排序

前言 数据处理中,按行排列的列名可以提供更直观的数据探索和分析方式。 你可以逐行查看列名,了解每列的含义和特征,有助于更好地理解数据集的结构和内容。 需求: 需要增加一列「分布方式」,每行的值是本行基金名称对…

C++多线程:thread构造源码剖析与detach大坑(三)

1、thread源码浅剖析 基于Ubuntu18.04版本64位操作系统下进行分析thread源码分析,与Window或者其他版本可能有出入。 1.1、thread线程id的源头 typedef pthread_t __gthread_t; typedef __gthread_t native_handle_type;/// thread::id class id {native_handl…

常用类(日期时间)

目录 一、JDK 8之前的日期时间API1.1、System类中获取时间戳的方法1.2、Java中两个Date类的使用1.3、SimpleDateFormat的使用1.4、Calendar日历类的使用 二、JDK8中日期时间API的介绍2.1、LocalDate、LocalTime、LocalDateTime的使用2.2、Instant类的使用2.3、DateTimeFormatte…

Abaqus模拟新能源汽车电池理论概念

在新能源汽车电池的分析过程中,存在众多典型问题,这些问题跨越了机械、热管理和电气三大关键领域。其中,结构仿真分析作为一种重要的技术手段,主要聚焦于解决机械和热管理方面的挑战,为电池系统的性能优化和安全性提升…

集合(未完。。。)

集合 例题引入1.java集合引入2.为什么要使用集合?3.List、Set、Queue和Map的区别4.ListList——ArrayList(!!实用!!)ArrayList常用方法 List——VectorList——LinkedList 5.Set6.MapHashMapHas…

【CTFshow 电子取证】套的签到题

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

Spring 源码调试问题 ( List.of(“bin“, “build“, “out“); )

Spring 源码调试问题 文章目录 Spring 源码调试问题一、问题描述二、解决方案 一、问题描述 错误&#xff1a;springframework\buildSrc\src\main\java\org\springframework\build\CheckstyleConventions.java:68: 错误: 找不到符号 List<String> buildFolders List.of…

【C++】常对象

目录 常对象常对象特点常数据成员常成员函数对象的常引用 常对象 把对象定义为常对象&#xff0c;对象中的数据成员就是常变量&#xff0c;在定义时必须带实参&#xff08;或者有缺省构造函数&#xff09;作为数据成员的初值。 const Person p1(3,4);//定义了一个常对象常对象特…

202452读书笔记|《永安梦》——错过前世 般配 换取今生 奉陪 任波谲云诡 共安危 共进退

今年追的第一本剧同名小说&#xff0c;《永安梦》改编自剧《长安第一美人》。本来是冲着徐正溪去看的&#xff0c;被娜娜、孙坚、夏楠路转粉了&#xff0c;只限这个剧。名字跟我有一个字一样诶。妆造&#xff0c;姿态&#xff0c;男女主&#xff0c;男二女二配角都不错。 因为看…

DRAGIN:利用LLM的即时信息需求进行动态RAG 论文解读

论文地址:https://arxiv.org/pdf/2403.10081.pdf DRAGIN 是一种新型的检索增强生成框架,专门为大型语言模型(LLMs)设计,以满足其在文本生成过程中的实时信息需求。该框架旨在解决传统检索增强生成(RAG)方法在动态性和准确性方面的局限性,特别是在处理复杂、多步骤或长文…

如何将Maven与TestNG集成

我们已经讨论了如何在maven中执行单元测试用例&#xff0c;但那些是JUnit测试用例&#xff0c;而不是TestNG。当maven使用“mvn test”命令进入测试阶段时&#xff0c;这些用例被执行。 本文将介绍如何将Maven与TestNG集成&#xff0c;并在maven进入测试阶段时执行TestNG测试。…

leetcode刷题日记-缺失的第一个正数(困难)

题目描述 解题思路 题目的意思十分容易理解&#xff0c;但是确实思考出来这种解题的方法还是比较难的。首先能想到的点就是[1,N]这个范围&#xff0c;因为只有N个数字&#xff0c;最小的数字只能在这个区间和N1两种可能。但是有时间复杂度的限制&#xff0c;我们该怎么找。我们…

【STM32F103】1-WireDS18B20(含ESP8266代码)

1-Wire 单总线 1-Wire是一种串行通信总线协议&#xff0c;由美国芯片制造商Dallas Semiconductor&#xff08;现为Maxim Integrated&#xff09;开发。这种协议主要用于连接和通信各种设备&#xff0c;并在多个领域得到了广泛应用&#xff0c;如温度传感器、电池管理、智能卡等…

测试用例设计方法-场景法详解

01 定义 场景法是通过运用场景来对系统的功能点或业务流程的描述&#xff0c;从而提高测试效果的一种方法。 场景法一般包含基本流和备用流&#xff0c;从一个流程开始&#xff0c;通过描述经过的路径来确定的过程&#xff0c;经过遍历所有的基本流和备用流来完成整个场景。 …

NO12 蓝桥杯单片机之DS1302的使用

1 DS1302是什么 DS1302由两块存储器组成&#xff0c;一个是日历时钟寄存器还有一个是31位的静态RAM存储器。 而在蓝桥杯中常考的就是日历时钟寄存器&#xff0c;故这里只介绍日历时钟寄存器。简单来说&#xff0c;其就是一个“电子表”&#xff0c;他会自动的实时记录时间&am…

简易挛生分拣系统设计

1 工效组合展示 2 方案规划设计 3 数字挛生建模 基础建模、动画设计、模型导出 4 软件体系架构 5 Web交互设计 5.1 页面架构 5.2 初始构造 5.3 模型运用 5.4 WS通信 5.5 运行展现 6 服务支撑编码 6.1 整体调度 6.2 WS服务 6.3 C/S通信 7 系统级调试完善

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

【探索Linux】—— 强大的命令行工具 P.31(守护进程)

阅读导航 引言一、守护进程简介1. 概念2. 特点 二、用C创建守护进程⭕代码✅主要步骤 温馨提示 引言 当谈到计算机系统中运行的特殊进程时&#xff0c;守护进程&#xff08;daemon&#xff09;无疑是一个备受关注的话题。作为在后台默默运行并提供各种服务的进程&#xff0c;守…

【机器人】UIUC、北大、亚马逊提出基于动作的场景图,让机器人理解和操控未知环境

论文的主要内容是通过机器人操作的交互式探索&#xff0c;构建一个基于动作的场景图&#xff08;Action-Conditioned Scene Graph&#xff0c;简称ACSG&#xff09;来帮助机器人更好地理解和操作未知环境。 全文核心&#xff1a;在未知环境中如何让机器人自主探索并完成复杂任务…