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-deploy
  labels:
    release: v1
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: mynginx
        image: 192.168.206.137/library/nginx:v3
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginxservice
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
  selector:
    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-deploy
  labels:
    release: v2
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: mynginx
        image: 192.168.206.137/library/nginx:v4
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginxservice
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080
  selector:
    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=nginx
              pod-template-hash=6b6f9ff985
Annotations:  cni.projectcalico.org/containerID: 1b2e98f76f8f8e7da439c4a767ec4b297035ca582bcdd445e816e1c13c3d891a
              cni.projectcalico.org/podIP: 10.224.219.80/32
              cni.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://2e6181cee6a4886c0892af0b92b0f31bde4d3513b0d34a654a9a0e0438274c73
    Image:          192.168.206.137/library/nginx:v3
    Image ID:       docker-pullable://192.168.206.137/library/nginx@sha256:37bb5a5a2078bd67b1be281165e9f82f6f267d6404e0ae11b3a524b8fff8354e
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 27 Jan 2024 12:56:24 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-gd949 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-gd949:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-gd949
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.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 master
  Normal  Pulled     5m17s  kubelet, master  Container image "192.168.206.137/library/nginx:v3" already present on machine
  Normal  Created    5m17s  kubelet, master  Created container mynginx
  Normal  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.mfbz.cn/a/353821.html

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

相关文章

AutoGen实战应用(二):多代理协作(Multi-Agent Collaboration)

AutoGen是微软推出的一个全新工具&#xff0c;它用来帮助开发者创建基于大语言模型(LLM)的复杂应用程序. AutoGen能让LLM在复杂工作流程启用多个角色代理来共同协作完成人类提出的任务。在我之前的一篇博客: AutoGen实战应用(一)&#xff1a;代码生成、执行和调试 中我们通过一…

CTF CRYPTO 密码学-6

题目名称&#xff1a;敲击 题目描述&#xff1a; 方方格格&#xff0c;不断敲击 “wdvtdz qsxdr werdzxc esxcfr uygbn” 解题过程&#xff1a; step1&#xff1a;根据题目描述敲击&#xff0c;wdvtdz对应的字符为x step2&#xff1a;依此类推r&#xff0c;z&#xff0c;o&…

使用 create-react-app 创建 react 应用

一、创建项目并启动 第一步&#xff1a;全局安装&#xff1a;npm install -g create-react-app 第二步&#xff1a;切换到想创建项目的目录&#xff0c;使用命令create-react-app hello-react 第三步&#xff1a;进入项目目录&#xff0c;cd hello-react 第四步&#xff1a;启…

Pyecharts 风采:从基础到高级,打造炫酷象形柱状图的完整指南【第40篇—python:象形柱状图】

文章目录 引言安装PyechartsPyecharts象形柱状图参数详解1. Bar 类的基本参数2. 自定义图表样式3. 添加标签和提示框 代码实战&#xff1a;绘制多种炫酷象形柱状图进阶技巧&#xff1a;动态数据更新与交互性1. 动态数据更新2. 交互性设计 拓展应用&#xff1a;结合其他图表类型…

Android 基础技术——列表卡顿问题如何分析解决

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于列表卡顿问题如何分析解决 onBindViewHolder 优化 是否有耗时操作、重复创建对象、设置监听器、findViewByID、局部的动画对象等操作 是否存在内存泄漏 发生内存泄露&#xff0c;会导致一些不再使用…

工业4.0开放平台通信 统一架构OPC UA的一种测试方法

工业4.0和工业物联网&#xff08;Industrial Internet of Things, IIoT&#xff09;的核心挑战在于设备、机器以及来自不同行业服务之间的安全和标准化的数据和信息交换。 2016年11月工业4.0平台发布了指导纲要《工业4.0产品需要实现哪些准则》&#xff0c;即对于所有位于工业…

概念抽取:构建认知基础的关键步骤

目录 前言1 概念抽取任务定义1.1 概念知识图谱的关系定义1.2 实体与概念的紧密关联1.3 多样的概念关系 2 概念在认知中的重要角色2.1 语言理解的基础2.2 上下位关系的深化理解 3 概念抽取方法3.1 基于模板的抽取3.2 基于百科的抽取3.3 基于机器学习的方法 4 应用4.1 自然语言理…

一行命令在 wsl-ubuntu 中使用 Docker 启动 Windows

在 wsl-ubuntu 中使用 Docker 启动 Windows 0. 背景1. 验证我的系统是否支持 KVM&#xff1f;2. 使用 Docker 启动 Windows3. 访问 Docker 启动的 Windows4. Docker Hub 地址5. Github 地址 0. 背景 我们可以在 Windows 系统使用安装 wsl-ubuntu&#xff0c;今天玩玩在 wsl-ub…

【Web前端实操16】雪碧图(CSS精灵图)

雪碧图 CSS Sprite也叫CSS精灵图、CSS雪碧图&#xff0c;是一种网页图片应用处理方式。它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去 雪碧图一般会给一个完整的图片&#xff0c;主要利用background-position 属性设置背景图像的起始位置。 优点 减少图片的字…

API网关-Apinto压缩包方式自动化安装配置教程

文章目录 前言一、Apinto安装教程1. 复制脚本2. 增加执行权限3. 执行脚本4. Apinto命令4.1 启动Apinto4.2 停止Apinto4.3 重启Apinto4.4 查看Apinto版本信息4.5 加入Apinto集群4.6 离开Apinto集群4.7 查看Apinto节点信息 5. 卸载Apinto 二、Apserver(Apinto Dashboard V3)安装教…

【css揭秘】

文章目录 背景与边框半透明边框多重边框box-shadowoutline 背景定位background-positionbackground-origincalc() 条纹背景水平条纹 形状圆形圆柱自适应的椭圆半椭圆四分之一椭圆 背景与边框 半透明边框 目标&#xff1a;给一个容器设置一层白色背景和一道半透明白色边框 写…

树莓派基础应用:智能家居监控系统

引言&#xff1a; 随着智能家居的普及&#xff0c;家居安全与监控逐渐成为人们关注的焦点。树莓派作为一种功能强大的迷你计算机&#xff0c;为我们提供了实现智能家居监控系统的可能。在本篇博客中&#xff0c;我们将通过构建一个简单的智能家居监控系统&#xff0c;来探索树莓…

node学习过程中的终端命令

冷的哥们手真tm冷&#xff0c;打字都是僵的&#xff0c;屮 目录 一、在学习nodejs过程中用到的终端命令总结 一、在学习nodejs过程中用到的终端命令 node -v nvm install 20.11.0 nvm list nvm list available nvm on nvm -v nvm use 20.11.0 node加要运行的js文件路径 ps&a…

docker compose实现mysql一主多从

参考了很多博客&#xff0c;死磕了几天&#xff0c;最终跑起来了&#xff0c;不容易&#xff0c;晚上喝瓶82年可乐庆祝下。 1、整体文件结构&#xff0c;这里忽略log、conf、data映射目录 2、docker-compose.yml文件内容如下&#xff1a; version: 3.3 services:mysql-master…

黑马程序员-瑞吉外卖-day5

修改实体类 package com.itheima.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode;i…

JS之隐式转换与布尔判定

大家思考一下 [ ] [ ] &#xff1f; 答案是空字符串 为什么呢&#xff1f; 当做加法运算的时候&#xff0c;发现左右两端存在非原始类型&#xff0c;也就是引用类型对象&#xff0c;就会对对象做隐式类型转换 如何执行的&#xff1f;或者说怎么查找的&#xff1f; 第一步&…

中国新能源汽车持续跑出发展“加速度”,比亚迪迎来向上突破

2023年已经过去&#xff0c;对于汽车圈而言&#xff0c;2023年是中国车市的分水岭&#xff0c;在这一年&#xff0c;中国汽车工业70年以来首次进入全球序列&#xff0c;自主品牌强势霸榜&#xff0c;销量首次超过合资车。要知道&#xff0c;这是自大众于1984年进入中国市场成立…

Android App开发-简单控件(3)——常用布局

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;CommonLayouts以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线…

Jenkins上跑自动化项目,case出现错误时,导致项目运行时间过长,该如何处理?

1、方案一&#xff1a;Jenkins上调整 进入配置&#xff1a; 构建环境&#xff1a; 自行选择超时时间即可&#xff5e; 2、方案二&#xff1a;代码调整【python】 安装插件&#xff1a;pytest-timeout 选择一&#xff1a;装饰器用法&#xff1a;将单个测试用例标记为超时&…

Qt6入门教程 12:QAbstractButton

目录 一.状态 二.信号 三.使用 1.自定义按钮 2.多选 3.互斥 QAbstractButton类实现了一个抽象按钮&#xff0c;并且让它的子类来指定如何处理用户的动作&#xff0c;并指定如何绘制按钮。QAbstractButton类是所有按钮控件的基类。 QAbstractButton提供…