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 createdroot@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: 5selector:matchLabels:app: spring-boot-helloworldtemplate:metadata:labels:app: spring-boot-helloworldspec:containers:- name: spring-boot-helloworldimage: ikubernetes/spring-boot-helloworld:v0.9.2ports:- name: httpcontainerPort: 80protocol: TCPresources:requests:memory: 32Micpu: 50mlivenessProbe:httpGet:path: '/'port: 80scheme: HTTPinitialDelaySeconds: 3readinessProbe:httpGet:path: '/'port: 80scheme: HTTPinitialDelaySeconds: 5
---
apiVersion: v1
kind: Service
metadata:name: spring-boot-helloworld
spec:ports:- port: 80targetPort: httpprotocol: TCPname: httpselector:app: spring-boot-helloworld
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: spring-boot-helloworld
spec:ingressClassName: "nginx"rules:- host: hello.magedu.comhttp:paths:- path: /pathType: Prefixbackend:service:name: spring-boot-helloworldport: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

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

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

相关文章

Gem5模拟器学习之旅——翻译自官网

文章目录 安装并使用gem5 模拟器支持的操作系统和环境依赖在 Ubuntu 22.04 启动(gem5 > v21.1)Docker获取代码用 SCons 构建用法首次构建 gem5gem5 二进制类型调试opt快速 常见错误错误的 gcc 版本Python 位于非默认位置未安装 M4 宏处理器Protobuf 3.12.3 问题 安装并使用g…

基于django水果蔬菜生鲜销售系统

基于django水果蔬菜生鲜销售系统 摘要 基于Django的水果蔬菜生鲜销售系统是一种利用Django框架开发的电子商务平台&#xff0c;旨在提供高效、便捷的购物体验&#xff0c;同时支持水果蔬菜生鲜产品的在线销售。该系统整合了用户管理、产品管理、购物车、订单管理等核心功能&…

数据结构初阶leetcodeOJ题(二)

目录 第一题 思路&#xff1a; 第二题 思路 第三题 描述 示例1 思路 总结&#xff1a;这种类似的题&#xff0c;都是用快慢指针&#xff0c;相差一定的距离然后输出慢指针。 第一题 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val…

Day34力扣打卡

打卡记录 合并石头的最低成本&#xff08;区间DP&#xff09; 链接 与多边形的三角形问题相同&#xff0c;将大问题化小问题&#xff0c;再用中间节点不断地寻找最值。 class Solution:def mergeStones(self, stones: List[int], k: int) -> int:n len(stones)if (n - 1…

ClickHouse建表优化

1. 数据类型 1.1 时间字段的类型 建表时能用数值型或日期时间型表示的字段就不要用字符串&#xff0c;全String类型在以Hive为中心的数仓建设中常见&#xff0c;但ClickHouse环境不应受此影响。 虽然ClickHouse底层将DateTime存储为时间戳Long类型&#xff0c;但不建议存储Long…

Linux进程——exec族函数、exec族函数与fork函数的配合

exec族函数解析 作用 我们用fork函数创建新进程后&#xff0c;经常会在新进程中调用exec函数去执行另外一个程序。当进程调用exec函数时&#xff0c;该进程被完全替换为新程序。因为调用exec函数并不创建新进程&#xff0c;所以前后进程的ID并没有改变。 功能 在调用进程内部…

Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)

Golang起步篇 Golang起步篇一. 安装Go语言开发环境1. Wondows下搭建Go开发环境(1). 下载SDK工具包(2). 解压下载的压缩包&#xff0c;放到特定的目录下&#xff0c;我一般放在d:/programs下(路径不能有中文或者特殊符号如空格等)(3). 配置环境变量步骤1&#xff1a;先打开环境变…

[ATC复盘] abc329 20231118

[ATC复盘] abc329 20231118 总结A - Spread1. 题目描述2. 思路分析3. 代码实现 B - Next1. 题目描述2. 思路分析-3. 代码实现 C - Count xxx1. 题目描述2. 思路分析3. 代码实现 D - Election Quick Report2. 思路分析3. 代码实现 E - Stamp2. 思路分析3. 代码实现 F - Colored…

SEnet注意力机制(逐行代码注释讲解)

目录 ⒈结构图 ⒉机制流程讲解 ⒊源码&#xff08;pytorch框架实现&#xff09;及逐行解释 ⒋测试结果 ⒈结构图 左边是我自绘的&#xff0c;右下角是官方论文的。 ⒉机制流程讲解 通道注意力机制的思想是&#xff0c;对于输入进来的特征层&#xff0c;我们在每一个通道学…

Codeforces Round #909 (Div. 3)

A. Game with Integers 签到题&#xff0c;但是本蒟蒻11分钟才AC&#xff0c;主要还是英文题面不熟练&#xff0c;题目中加粗了after&#xff0c;只有下一步操作之后能被整除才胜利。 英文题面的加粗单词很重要&#xff0c;注意提高签到题速度。 B. 250 Thousand Tons of TNT…

HarmonyOS开发Java与ArkTS如何抉择

在“鸿蒙系统实战短视频App 从0到1掌握HarmonyOS”视频课程中&#xff0c;很多学员来问我&#xff0c;在HarmonyOS开发过程中&#xff0c;面对Java与ArkTS&#xff0c;应该选哪样&#xff1f; 本文详细分析Java与ArkTS在HarmonyOS开发过程的区别&#xff0c;力求解答学员的一些…

联想系列台式机Win11系统改Win7系统BIOS设置步骤

联想最新一代的台式机默认操作系统Win11&#xff0c;采用UEFIGPT启动模式&#xff0c;并且开启了安全启动功能&#xff0c;一般用户不能直接将Win11改成Win7&#xff0c;如果需要更改操作系统&#xff0c;是需要再BIOS菜单中关闭安全启动功能的&#xff0c;并且把启动模式设置成…