rollout

构建 测试 代码扫描 打包 打镜像 推送镜像 部署应用

Rollout 是 Kubernetes 中用于管理部署应用的资源对象。它通过控制多个 ReplicaSets 对象的创建、缩放和更新,以实现无宕机升级和回滚应用程序版本的能力。

一般来说,在 Kubernetes 中,我们部署应用程序时会使用 Deployment 资源对象来创建和管理应用程序副本,Deployment 可以方便地对应用程序进行扩缩容、版本更新和回滚等操作。而 Deployment 实际上是从 ReplicaSet 派生而来的,每个 Deployment 都会创建一个 ReplicaSet。因此,Rollout 除了通过 Deployment 进行版本控制外,还可以直接操作 ReplicaSet。

Rollout 可以通过以下方式进行应用程序版本更新和回滚:

  • 通过更新 Deployment 或者直接更新 ReplicaSet 中的 Pod 模板来更新应用程序版本;
  • 通过 Deployment 自身的滚动更新机制,逐步替换旧版本 Pod 为新版本 Pod,以达到平稳升级的目的;
  • 通过回滚 Deployment 或直接回滚 ReplicaSet,将应用程序回滚到之前的版本。

Rollout 的使用可以避免应用程序在更新过程中出现宕机或数据丢失的问题,帮助用户更好地进行应用程序的管理和维护。

希望能够解答您的问题!如果您还有任何疑问,请随时提问。

Rollout:
Rollout资源
Rollout Controller

https://github.com/argoproj/argo-rollouts
https://argoproj.github.io/argo-rollouts/installation/

部署

第一步:部署Argo Rollouts (Rollouts自身,包括Rollouts控制器和它所提供的几个自定义资源)

kubectl create namespace argo-rollouts
kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml
查看资源群组

kubectl api-versions

查看某个组内有多少个资源类型
kubectl api-resources --api-group=argoproj.io

第二步:部署Dashboard (图形面板,允许我们用图形化的界面监视它的更新过程,了解更新状态)
在这里插入图片描述

kubectl apply -f https://github.com/argoproj/argo-rollouts/releases/download/v1.6.2/dashboard-install.yaml -n argo-rollouts



基于文件定义ingress资源开启Dashboard的外部流量策略(没有认证功能,开放以后都可访问,适合内部使用)
root@k8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/01-ingress-argocd-and-rollouts# kubectl apply -f ingress-argo-rollouts.yaml 
ingress.networking.k8s.io/argo-rollouts created


root@k8s-master01:/etc/kubernetes/manifests# kubectl get ingress -n argo-rollouts 
NAME            CLASS   HOSTS                                    ADDRESS   PORTS   AGE
argo-rollouts   nginx   rollouts.magedu.com,rollout.magedu.com             80      36s


windows添加hosts解析
访问

安装
https://github.com/argoproj/argo-rollouts/releases/download/v1.6.2/kubectl-argo-rollouts-linux-amd64

root@k8s-master01:~# install -m 755 kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

建立软连接
root@k8s-master01:~# ln -sv /usr/local/bin/kubectl-argo-rollouts /usr/local/bin/kubectl-rollouts

接下来就可以直接使用了
kubectl rollouts

部署应用
root@k8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/rollout-demos# kubectl apply -f 01-basic-rollouts-demo.yaml

cat 01-basic-rollouts-demo.yaml 
# CopyRight: MageEdu <http://www.magedu.com>
# 
---
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-spring-boot-helloworld
spec:
  replicas: 10 
  strategy:
    canary:
      steps:
      - setWeight: 10 
      - pause: {}
      - setWeight: 20
      - pause: {duration: 20}
      - setWeight: 30
      - pause: {duration: 20}
      - setWeight: 40
      - pause: {duration: 20}
      - setWeight: 60
      - pause: {duration: 20}
      - setWeight: 80
      - pause: {duration: 20}
  revisionHistoryLimit: 5
  selector:
    matchLabels:
      app: spring-boot-helloworld
  template:
    metadata:
      labels:
        app: spring-boot-helloworld
    spec:
      containers:
      - name: spring-boot-helloworld
        image: ikubernetes/spring-boot-helloworld:v0.9.2
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
        resources:
          requests:
            memory: 32Mi
            cpu: 50m
        livenessProbe:
          httpGet:
            path: '/'
            port: 80
            scheme: HTTP
          initialDelaySeconds: 3
        readinessProbe:
          httpGet:
            path: '/'
            port: 80
            scheme: HTTP
          initialDelaySeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: spring-boot-helloworld
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: spring-boot-helloworld
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: spring-boot-helloworld
spec:
  ingressClassName: "nginx"
  rules:
    - host: hello.magedu.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: spring-boot-helloworld
                port:
                  number: 80
---

查看
http://rollouts.magedu.com/rollouts/default
在这里插入图片描述

查看资源
kubectl get rollouts

查看资源具体情况
root@k8s-node01:~# kubectl get rollouts.argoproj.io rollouts-spring-boot-helloworld

-w资源监视

列出rollouts资源
kubectl rollouts list rollouts

对rollouts资源进行更新
kubectl rollouts set image rollouts-spring-boot-helloworld spring-boot-helloworld=harbor.luohw.net/ikubernetes/spring-boot-helloworld
(set image:指定更新哪个资源,并更新资源中的pod容器的image)

可对资源进行持续监视

kubectl rollouts get rollouts rollouts-spring-boot-helloworld -w

请求没有问题,更新版本能够正常提供服务,接下来就可以通过设置图形页面PROMOTE来继续完成后面的更新
在这里插入图片描述

查看当前状态发现现在是暂停状态
kubectl rollouts list rollouts
状态为Paused(暂停状态)

使用命令触发后续更新
kubectl rollouts promote rollouts-spring-boot-helloworld

在这里插入图片描述

更新完成
在这里插入图片描述

argo rollouts结合Ingress Nginx进行Canary流量迁移

Istio环境中支持两种流量分割模式
◼ 更新期间,使用不同的Service分别承载新旧版本的流量
◆Canary和Stable版本分别对应一个独立的Service
⚫ canaryService:待发布的新版本
⚫ stableService:待更新的旧版本
◆分别为Canary和Stable的Pod添加rollouts-pod-template-hash标签,其值为相应的RS模板的hash值
◼ 通过Ingress完成流量分割和迁移
◆更新期间,默认创建的Ingress用于承载旧版本的请求流量
◆另外生成一个专用的Ingress用于承载Canary流量,并将这些流量转发到canaryServer相关的EndPoint之上
◆动态调整canaryIngress和stableIngress的weight进行流量迁移
◼ 更新完后,所有流量回转至stableIngress和stableService,此时相关的后端EndPoint已经切换为发布的新版本

提示:这种Canary期间VS的动态调整可能会导致通过GitOps自动化部署时的问题:权重的瞬时摆动

测试此示例前,先把之前启动的service删除掉
kubectl delete -f 01-basic-rollotes-demo.yaml

查看是否运行rollouts资源
kubectl get rollouts

执行运行命令:
root@k8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/rollout-demos# kubectl apply -f 02-rollouts-with-ingress-nginx-traffic-shifting.yaml

查看运行的service,有两个
kubectl get svc
spring-boot-helloworld
spring-boot-helloworld-canary

查看spring-boot-helloworld,会发现自动增添标签选择器的条件,pod的配置改变,其hash值也会改变
kubectl get svc spring-boot-helloworld -o yaml

此时,访问哪一个service都是一样的,一旦启动更新,这两个service就不一样了

查看ingress
kubectl get ingress

更新
root@k8s-master01:~# kubectl rollouts set image rollouts-helloworld-with-traffic-shifting spring-boot-helloworld=ikubernetes/demoapp:v1.1
rollout “rollouts-helloworld-with-traffic-shifting” image updated

Argo Rollouts请求分析和渐进式交付

编辑svc 添加
root@k8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/02-metrics-ingress-nginx-controller# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.96.70.31 192.168.1.201 80:32316/TCP,443:31278/TCP 42d
ingress-nginx-controller-admission ClusterIP 10.102.84.77 443/TCP 42d

root@k8s-master01:~/learning-jenkins-cicd/09-argocd-and-rollout/02-metrics-ingress-nginx-controller# kubectl edit svc ingress-nginx-controller -n ingress-nginx
service/ingress-nginx-controller edited
metadata:
annotations:的下面添加下面二行
prometheus.io/scrape: “true”
prometheus.io/port: “10254”

克隆 部署Prometheus
git clone https://github.com/iKubernetes/k8s-prom.git
root@k8s-master01:~/k8s-prom# kubectl apply -f namespace.yaml
namespace/prom created
root@k8s-master01:~/k8s-prom# kubectl apply -f prometheus/ -n prom

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

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

相关文章

选硬币该用动态规划

选硬币&#xff1a; 现有面值分别为1角1分&#xff0c;5分&#xff0c;1分的硬币&#xff0c;请给出找1角5分钱的最佳方案。 #include <iostream> #include <vector>std::vector<int> findChange(int amount) {std::vector<int> coins {11, 5, 1}; /…

C_12练习题

一、单项选择题(本大题共20小题,每小题2分&#xff0c;共40分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;并将所选项前的字母填写在答题纸的相应位置上。) C 风格的注释&#xff0c;也称块注释或多行注释&#xff0c;以&#xff08;&#xff09;…

qt-C++笔记之treeWidget初次使用

qt-C笔记之treeWidget初次使用 code review! 文章目录 qt-C笔记之treeWidget初次使用1.运行2.文件结构3.main.cpp4.widget.h5.widget.cpp6.widget.ui7.main.qrc8.qt_widget_test.pro9.options.png 1.运行 2.文件结构 3.main.cpp 代码 #include "widget.h"#include…

神经网络反向传播的数学原理

如果能二秒内在脑袋里解出下面的问题&#xff0c;本文便结束了。 已知&#xff1a;&#xff0c;其中。 求&#xff1a;。 到这里&#xff0c;请耐心看完下面的公式推导&#xff0c;无需长久心里建设。 首先&#xff0c;反向传播的数学原理是“求导的链式法则” : 设f和g为x…

利用 Pandoc + ChatGPT 优雅地润色论文,并保持 Word 公式格式:Pandoc将Word和LaTeX文件互相转化

论文润色完美解决方案&#xff1a;Pandoc 与 ChatGPT 的强强联合 写在最前面其他说明 一、通过 Pandoc 将 Word 转换为 LaTeX 的完整指南步骤 1: 安装 PandocWindows:macOS:Linux: 步骤 2: 准备 Word 文档步骤 3: 转换文档步骤 4: 检查并调整输出步骤 5: 编译 LaTeX 文档总结 二…

分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测

分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测 目录 分类预测 | Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现基于SDAE堆叠去噪自编码器的数据分类预测&#xff08;完整源码和数据) 2.多…

机器学习第9天:决策树分类

文章目录 机器学习专栏 介绍 基本思想 使用代码 深度探索 优点 估计概率 训练算法 CART成本函数 实例数与不纯度 正则化 在鸢尾花数据集上训练决策树 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用&#xff1a;分类 原理&#xff1a;构建一个二叉树&#…

【信息安全】浅谈IDOR越权漏洞的原理、危害和防范:直接对象引用导致的越权行为

前言 ┌──────────────────────────────────┐ │ 正在播放《越权访问》 - Hanser │ ●━━━━━━─────── 00:00 / 03:05 │ ↻ ◁ ❚❚ ▷ ⇆ └───────────────────────────────…

Java - 位运算的基本原理和用途

Java - 位运算的基本原理和用途 前言一. Java 位运算基本操作1.1 按位与 &1.2 按位或 |1.3 按位异或 ^1.4 按位取反 ~1.5 位移运算1.5.1 左移运算符 <<1.5.2 右移运算符 >>1.5.3 无符号右移运算符 >>> 二. 位运算实际运用2.1 判断奇偶性&#xff08;&…

Vue3 插槽 v-slot

插槽 视频链接&#xff1a;尚硅谷vue-插槽章节 不使用插槽的情况下 结果&#xff1a; 1 默认插槽 在子组件中只能有一个 结果&#xff1a; 2 具名插槽 #b是v-slot:b 的缩写 顾名思义就是指着名字去插入 结果&#xff1a; 3 作用域插槽 可以传递数据的插槽&#…

【SQL server】数据库、数据表的创建

创建数据库 --如果存在就删除 --所有的数据库都存在sys.databases当中 if exists(select * from sys.databases where name DBTEST)drop database DBTEST--创建数据库 else create database DBTEST on --数据文件 (nameDBTEST,--逻辑名称 字符串用单引号filenameD:\DATA\DBT…

【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑

作者:chlorine 专栏:c专栏 赋值运算符重载()()():实现完整的日期类(上) 我走的很慢&#xff0c;但我从不后退。 【学习目标】 日期(- - --)天数重载运算符 日期-日期 返回天数 对日期类函数进行优化(不符合常理的日期&#xff0c;负数&#xff0c;const成员)c中重载输入cin和输…

C/C++数据结构之中缀表达式转换为后缀表达式,删除堆栈元素

在这篇博客中&#xff0c;我们将深入分析一个使用C编写的栈和表达式计算程序。该程序不仅实现了基本的栈操作&#xff0c;还提供了中缀表达式转后缀表达式和删除堆栈中的元素等实用功能。通过逐一讲解每个函数的功能&#xff0c;我们将更全面地理解这个程序的实现。 资源获取&a…

python算法例15 合并数字

1. 问题描述 给出n个数&#xff0c;将这n个数合并成一个数&#xff0c;每次只能选择两个数a、b合并&#xff0c;合并需要消耗的能量为ab&#xff0c;输出将n个数合并成一个数后消耗的最小能量。 2. 问题示例 给出[1&#xff0c;2&#xff0c;3&#xff0c;4]&#xff0c;返回…

【漏洞复现】通达oa 前台sql注入

漏洞描述 通达OA(Office Automation)是一款企业级协同办公软件,旨在为企业提供高效、便捷、安全、可控的办公环境。它涵盖了企业日常办公所需的各项功能,包括人事管理、财务管理、采购管理、销售管理、库存管理、生产管理、办公自动化等。通达OA支持PC端和移动端使用,可以…

比亚迪刀片电池与特斯拉4680电池比较

1 电池材料 比亚迪刀片电池采用的磷酸铁锂LFP&#xff08;LiFePO4&#xff09;&#xff0c;特斯拉的4680电池采用的三元锂。 磷酸铁锂&#xff1a;循环寿命长&#xff0c;安全性能好&#xff0c;价格低廉&#xff0c;但是能量密度低&#xff0c;导电性能差&#xff0c;低温表现…

【机器学习算法】机器学习:支持向量机(SVM)

转载自&#xff1a; 【精选】机器学习&#xff1a;支持向量机&#xff08;SVM&#xff09;-CSDN博客 1.概述 1.1&#xff0c;概念 支持向量机&#xff08;SVM&#xff09;是一类按监督学习方式对数据进行二元分类的广义线性分类器&#xff0c;其决策边界是对学习样本求解的最…

window系统vscode 编译wvp前端代码

下载代码 wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台&#xff0c;负责实现核心信令与设备管理后台部分&#xff0c;支持NAT穿透&#xff0c;支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联&#xff0c;支持rtsp/rtmp等…

应用场景丨迭代市政综合管廊监测系统建设

市政综合管廊是指在城市地下建造的隧道空间&#xff0c;将市政、电力、通讯、燃气、给排水等各种管线集于一体&#xff0c;实施统一规划、设计、建设和管理。综合管廊有利于解决反复开挖路面、架空线网密集、管线事故频发等问题&#xff0c;是保障城市运行的重要基础设施和“生…

CAS源码工程搭建记录

CAS源码工程搭建 1.下载2.gradle下载源改为阿里云&#xff0c;解决下载慢的问题3.解决保存 1.下载 git clone -b 5.3.x https://gitee.com/mirrors/CAS.git如果下载的是压缩包&#xff0c;导入工程会保存&#xff0c;因为builder.gradle的第20行开始有取git信息&#xff0c;如…