k8s 版本发布与回滚

一、实验环境准备:

kubectl get pods -o wide
kubectl get nodes -o wide
kubectl get svc

准备两个nginx镜像,版本号一个是V3,一个是V4

二、准备一个nginx.yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploylabels:release: v1
spec:replicas: 1strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: mynginximage: 192.168.206.137/library/nginx:v3ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginxservice
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080selector:app: nginx1

在这个文件中,定义了:

元数据的名称为:nginx-deploy

副本数量为:1

滚动升级的策略为:RollingUpdate

滚动升级最低保留的副本数量为:25%

镜像为:192.168.206.137/library/nginx:v3

集群内部访问端口为:80

外部访问端口为:30080

三、部署这个yaml,并查看部署状态

kubectl apply -f nginx.yaml

部署状态:

kubectl rollout status deploy nginx-deploy

查看历史升级状态:

kubectl rollout history deploy nginx-deploy

查看历史升级状态为1的详细信息:

kubectl rollout history deploy nginx-deploy  --revision=1

查看发布完成后的svc和pod状态:

kubectl get svc,pods -o wide

此时可以看到,nginx.yaml已经部署完成。

四、更新nginx版本,重新发布

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploylabels:release: v2
spec:replicas: 2strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: mynginximage: 192.168.206.137/library/nginx:v4ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: nginxservice
spec:type: NodePortports:- port: 80targetPort: 80nodePort: 30080selector:app: nginx2

比较上面的V1版本,V2更新了几点:

副本数量增加为:2

镜像使用:v4

更新发布这个新的版本:

kubectl apply -f nginx.yaml
kubectl rollout status deploy nginx-deploy

跟新后的SVC和POD状态:

可以看到POD增加到了2个

再次查看历史更新记录:

kubectl rollout history deploy nginx-deploy

指定查看V2的详细信息:

kubectl rollout history deploy nginx-deploy  --revision=2

这里可以看到,两次的版本更新操作,这里都有详细记录。但是这里最多只能记录2个。

五、回滚版本到V1:

v1只有一个pod并且镜像使用的是nginx:v3

撤销上一次升级,并查看升级状态:

kubectl  rollout undo deploy  nginx-deploy
kubectl rollout status deploy nginx-deploy
kubectl get svc,pods -o wide

这里会发现,原本1个的POD,回滚后变成了2个。其实这里是k8s滚动升级的机制导致的。前面设置了最低保留25%的可用性,那么至少也有1个POD。所以K8s首先新增了一个POD,然后再升级版本,最后保持两个POD一致。 

再次查看升级历史信息:

kubectl rollout history deploy nginx-deploy

查看3的详细信息:

kubectl rollout history deploy nginx-deploy  --revision=3

对比2:

kubectl rollout history deploy nginx-deploy  --revision=2

查看当前POD的详细信息:

kubectl describe pods nginx-deploy-6b6f9ff985-xpz94
Name:         nginx-deploy-6b6f9ff985-xpz94
Namespace:    default
Priority:     0
Node:         master/192.168.206.138
Start Time:   Sat, 27 Jan 2024 12:56:23 +0800
Labels:       app=nginxpod-template-hash=6b6f9ff985
Annotations:  cni.projectcalico.org/containerID: 1b2e98f76f8f8e7da439c4a767ec4b297035ca582bcdd445e816e1c13c3d891acni.projectcalico.org/podIP: 10.224.219.80/32cni.projectcalico.org/podIPs: 10.224.219.80/32
Status:       Running
IP:           10.224.219.80
IPs:IP:           10.224.219.80
Controlled By:  ReplicaSet/nginx-deploy-6b6f9ff985
Containers:mynginx:Container ID:   docker://2e6181cee6a4886c0892af0b92b0f31bde4d3513b0d34a654a9a0e0438274c73Image:          192.168.206.137/library/nginx:v3Image ID:       docker-pullable://192.168.206.137/library/nginx@sha256:37bb5a5a2078bd67b1be281165e9f82f6f267d6404e0ae11b3a524b8fff8354ePort:           80/TCPHost Port:      0/TCPState:          RunningStarted:      Sat, 27 Jan 2024 12:56:24 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-gd949 (ro)
Conditions:Type              StatusInitialized       TrueReady             TrueContainersReady   TruePodScheduled      True
Volumes:default-token-gd949:Type:        Secret (a volume populated by a Secret)SecretName:  default-token-gd949Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age    From             Message----    ------     ----   ----             -------Normal  Scheduled  5m17s                   Successfully assigned default/nginx-deploy-6b6f9ff985-xpz94 to masterNormal  Pulled     5m17s  kubelet, master  Container image "192.168.206.137/library/nginx:v3" already present on machineNormal  Created    5m17s  kubelet, master  Created container mynginxNormal  Started    5m17s  kubelet, master  Started container mynginx

Image这个地方,可以看到当前POD使用的版本号为V3,可以说明撤销成功,已经回退都发布之前的版本。

六、回滚到指定版本:

kubectl rollout history deploy nginx-deplo

目前有两个版本,在使用的是3,可以回滚到指定版本2,镜像回滚到nginx:v4状态,副本数量为2个

kubectl rollout undo deploy nginx-deploy --to-revision=2
kubectl rollout status deploy nginx-deploy
kubectl get svc,pods -o wide
kubectl describe pods nginx-deploy-76d4c4c684-kvtx8

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

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

相关文章

翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二 1. 将任何静态图表转换为动态数据可视化 ChatGPT Vision 不仅可以将涂鸦变成功能齐全的 Streamlit 应用程序&#xff0c;还…

SpringBoot整合nacos的入门Demo

Nacos介绍 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您快速…

操作系统(6)----线程相关

目录 1.线程与进程的关系 2.线程的属性 3.线程的实现方式 用户级线程 内核级线程 多线程模型 一对一模型: 多对一模型&#xff1a; 多对多模型&#xff1a; 4.线程的状态和转换 5.线程的组织与控制 1.线程与进程的关系 可以把线程理解为“轻量级进程”。线程是一个…

大创项目推荐 题目:基于卷积神经网络的手写字符识别 - 深度学习

文章目录 0 前言1 简介2 LeNet-5 模型的介绍2.1 结构解析2.2 C1层2.3 S2层S2层和C3层连接 2.4 F6与C5层 3 写数字识别算法模型的构建3.1 输入层设计3.2 激活函数的选取3.3 卷积层设计3.4 降采样层3.5 输出层设计 4 网络模型的总体结构5 部分实现代码6 在线手写识别7 最后 0 前言…

【Spring实战】31 Spring Boot3 集成 Gateway 微服务网关

文章目录 1. 定义2. 功能3. 示例代码1) 创建一个业务服务2&#xff09;创建一个网关服务3&#xff09;启动服务4&#xff09;验证 4. 代码参考结语 1. 定义 Spring Cloud Gateway 是一个基于 Spring Framework 的开源网关服务&#xff0c;用于构建微服务架构中的 API 网关。它…

C51 单片机学习(一):基础外设

参考 51单片机入门教程 1. 单片机简介 1.1 定义 单片机&#xff08;Micro Controller Unit&#xff0c;简称 MCU&#xff09; 内部集成了 CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集&#xff08;依靠传感器&#xff09;、处…

休息日的思考与额外题——链表

文章目录 前言链表知识点 一、 92. 反转链表 II二、21. 合并两个有序链表总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子哥的刷题班&#xff0c;训练…

富文本编辑器CKEditor4简单使用-01

富文本编辑器CKEditor4简单使用-01 1. 快速体验入门1.1 通过从 CDN 加载 CKEditor 来快速体验1.2 从官方网站下载软件包1.2.1 官网下载1.2.2 解压、简单使用&#xff08;自带index页面示例&#xff09;1.2.3 将 CKEditor 4 添加到自己的页面1.2.3.1 目录结构1.2.3.2 效果1.2.3.…

TensorFlow2实战-系列教程6:迁移学习实战

&#x1f9e1;&#x1f49b;&#x1f49a;TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 1、迁移学习 用已经训练好模型的权重参数当做自己任务的模型权重初始化一般全连接层需…

【机器学习】工程实践问题概述

机器学习实际应用时的工程问题与面临的挑战 一、实现细节问题 1.1 训练样本 训练样本与标注对各类机器学习算法和模型的精度影响 训练样本的选择对各类机器学习算法和模型的影响 训练样本的优化 如何进行数据增强&#xff1f; 如何进行数据清洗&#xff1f; 样本的标注对各类机…

数据结构(二)------单链表

制作不易&#xff0c;三连支持一下呗&#xff01;&#xff01;&#xff01; 文章目录 前言一.什么是链表二.链表的分类三.单链表的实现总结 前言 上一节&#xff0c;我们介绍了顺序表的实现与一些经典算法。 但是顺序表这个数据结构依然有不少缺陷&#xff1a; 1.顺序表指定…

导航页配置服务Dashy本地部署并实现公网远程访问

文章目录 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务&#xff0c;具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一些网站聚合起来放在一起&#xff0c;形成自己的导航…

基于springboot宠物领养系统

摘要 随着社会的不断发展和人们生活水平的提高&#xff0c;宠物在家庭中的地位逐渐上升&#xff0c;宠物领养成为一种流行的社会现象。为了更好地管理和促进宠物领养的过程&#xff0c;本文基于Spring Boot框架设计和实现了一套宠物领养系统。该系统以用户友好的界面为特点&…

时序分析中的去趋势化方法

时序分析中的去趋势化方法 时序分析是研究随时间变化的数据模式的一门学科。在时序数据中&#xff0c;趋势是一种随着时间推移而呈现的长期变化趋势&#xff0c;去趋势化是为了消除或减弱这种趋势&#xff0c;使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法&a…

跟着cherno手搓游戏引擎【13】着色器(shader)

创建着色器类&#xff1a; shader.h:初始化、绑定和解绑方法&#xff1a; #pragma once #include <string> namespace YOTO {class Shader {public:Shader(const std::string& vertexSrc, const std::string& fragmentSrc);~Shader();void Bind()const;void Un…

怎样自行搭建幻兽帕鲁游戏联机服务器?

幻兽帕鲁是一款深受玩家喜爱的多人在线游戏&#xff0c;为了获取更好的游戏体验&#xff0c;许多玩家希望能够自行搭建幻兽帕鲁游戏联机服务器&#xff0c;本文将指导大家如何自行搭建幻兽帕鲁游戏联机服务器。 自行搭建幻兽帕鲁游戏联机服务器&#xff0c;阿里云是一个不错的选…

结构体的增删查改

结构体&#xff0c;是为了解决生活中的一些不方便利用c语言自带数据类型来表示的问题。例如表示一个学生&#xff0c;那么学生这个个体假如用c语言自带数据类型怎么表示呢。可以使用名字&#xff0c;也就是字符数组&#xff1b;也可以使用学号&#xff0c;也就是int类型。但是这…

iOS 面试 Swift基础题

一、Swift 存储属性和计算属性比较&#xff1a; 存储型属性:用于存储一个常量或者变量 计算型属性: 计算性属性不直接存储值,而是用 get / set 来取值 和 赋值,可以操作其他属性的变化. 计算属性可以用于类、结构体和枚举&#xff0c;存储属性只能用于类和结构体。存储属性可…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

MySQL-窗口函数 简单易懂

窗口函数 考查知识点&#xff1a; • 如何用窗口函数解决排名问题、Top N问题、前百分之N问题、累计问题、每组内比较问题、连续问题。 什么是窗口函数 窗口函数也叫作OLAP&#xff08;Online Analytical Processing&#xff0c;联机分析处理&#xff09;函数&#xff0c;可…