首页 > 其他分享 >D22 kubernetes 工作负载资源对象-Deployment{应用回滚、应用扩缩容、应用下线、应用灰度发布}

D22 kubernetes 工作负载资源对象-Deployment{应用回滚、应用扩缩容、应用下线、应用灰度发布}

时间:2024-09-18 11:25:07浏览次数:12  
标签:kubectl 回滚 kubernetes django blog 灰度 应用 rollout k8s

1、应用回滚简介

	在滚动更新过程中,如果新版本的pod启动失败或者已升级完成,但新版本中存在bug,则可以选择回滚到之前的可用版本。‘kubectl rollout‘命令可以方便的执行回滚和其他滚动更新管理,该命令支持Deployment、DaemonSet和statefulset资源
  • 查看博客网站的历史版本
[root@k8s-master ~]# kubectl rollout history deployment/django-blog -n blog
deployment.apps/django-blog
REVISION  CHANGE-CAUSE
1         <none>
3         <none>
4         <none>
5         <none>
6         <none>
7         <none>
REVISION:修订版本,从0开始递增
CHANGE-CAUSE:变更原因,可以通过 kubectl annotate 命令进行设置,例如将最近一次变更原因设置为v2
- 将最近一次变更原因设置为v2
[root@k8s-master ~]# kubectl annotate deployment/django-blog kubernetes.io/change-cause="v2" -n blog
deployment.apps/django-blog annotated
- 再次查看历史版本
[root@k8s-master ~]# kubectl rollout history deployment/django-blog -n blog
deployment.apps/django-blog
REVISION  CHANGE-CAUSE
1         <none>
3         <none>
4         <none>
5         <none>
6         <none>
7         v2
- 回滚到上一个版本,既v1版本
[root@k8s-master ~]# kubectl rollout undo deployment/django-blog -n blog
deployment.apps/django-blog rolled back
- 注意:如果想回滚到指定的修订版本,可以使用--to-revision参数指定修订版本号。
操作完成后,可以通过 kubectl rollout status 子命令实时监控回滚进度

2、回滚实现机制

	Deployment是通过ReplicaSet实现滚动更新,每次触发滚动更新都会创建一个新的ReplicaSet。完成滚动更新后,旧ReplicaSet会被保留。这样做的原因是,旧的ReplicaSet保存对应版本的pod配置信息。kubectl rollout undo命令的回滚机制是基于这些历史ReplicaSet实现的。
	如果执行混滚到修订版本2,则kubernetes首先将修订版本号2重新标记为4,然后根据修订版本号找到对应的ReplicaSet,接着逐步增加该ReplicaSet的pod副本数,同时逐渐减少当前ReplicaSet的pod副本数,已实现平滑的回滚过程
	Deployment默认保留10个历史版本,这可以通过revisionHistoryLimit字段进行设置

3、暂停和恢复滚动更新

	kubectl roolout pause 和 kubectl rollout resume子命令分别用于暂停和恢复滚动更新过程,通常用于解决滚动更新过程中的问题。例如,当新版本出现问题时,可以执行暂停操作,然后进行问题排查和修复。问题解决后,执行恢复操作,使其继续进行。这两个子命令的用法如下
- 暂停滚动更新过程
kubectl rollout pause 资源类型/资源名称
- 恢复滚动更新过程
kubectl rollout resume 资源类型/资源名称

4、重启pod

	在kubernetes1.15版本以后,kubec rollout命令新增了一个子命令restart,用于重新启动指定资源的滚动更新过程,这将导致所有pod重建。这对于需要重建pod的场景非常有用,如重新加载配置、重新拉取镜像等。kubectl rollout restart 子命令的用法如下
kubectl rollout restart 资源类型/资源名称

[root@k8s-master ~]# kubectl rollout restart deployment/django-blog -n blog
[root@k8s-master ~]# kubectl get pod -A -o wide|grep blog
blog                   django-blog-c6b69955f-cg9cg                  1/1     Running       0               36s    10.244.85.251    k8s-node01   <none>           <none>
blog                   django-blog-c6b69955f-dss72                  1/1     Running       0               25s    10.244.58.220    k8s-node02   <none>           <none>
blog                   django-blog-c6b69955f-dw59b                  1/1     Running       0               13s    10.244.85.243    k8s-node01   <none>           <none>
blog                   django-blog-d7d675654-jfn5b                  1/1     Terminating   0               109s   10.244.58.244    k8s-node02   <none>           <none>
blog                   django-blog-d7d675654-jft4h                  1/1     Terminating   0               98s    10.244.85.240    k8s-node01   <none>           <none>
blog                   django-blog-d7d675654-tppv4                  1/1     Terminating   0               87s    10.244.58.245    k8s-node02   <none>           <none>

标签:kubectl,回滚,kubernetes,django,blog,灰度,应用,rollout,k8s
From: https://www.cnblogs.com/suyj/p/18418143

相关文章

  • Selenium等待机制:理解并应用显式等待与隐式等待,解决页面加载慢的问题
    引言在Web自动化测试和网页数据抓取中,Selenium是一款非常流行的工具。然而,由于网络延迟、页面元素异步加载等原因,直接执行操作可能会导致元素未找到或操作失败。为了解决这个问题,Selenium提供了多种等待机制,其中最常用的是显式等待(ExplicitWait)和隐式等待(ImplicitWait)。本文将详......
  • musl libc 与 glibc 在 .NET 应用程序中的兼容性
    muslLinux和glibc是两种不同的C标准库实现,它们在多个方面存在显著差异。历史和使用情况:glibc是较早且广泛使用的C标准库实现,具有较长的开发历史和广泛的社区支持。它被大多数Linux发行版采用,特别是在桌面和服务器环境中。musl是一个相对较新的实现,旨在提供更小、更快......
  • UWP 通过 .NET 9 和Native AOT 的支持实现 UWP 应用的现代化
    微软(9月11日)发布博文,微软正在预览对.NET9的UWP(通用Windows平台)支持,为现有UWP开发人员提供一条使用最新的.NET和本机AOT实现其应用程序现代化的途径。这样做是因为该公司敦促开发人员切换到WindowsAppSDK和WinUI3,可以让现有UWP开发者利用最新.NET和Native......
  • 设计一个高质量的API接口:提升应用性能的关键步骤
    在当今的软件开发世界中,API(应用程序编程接口)接口扮演着至关重要的角色。一个设计精良的API不仅能够提高开发效率,还能提升用户体验,并确保系统的可扩展性和安全性。本文将探讨如何设计一个高质量的API接口,并分析其对现代应用程序的重要性。什么是高质量的API接口?高质量的API接口通常......
  • CAS-ViT:用于高效移动应用的卷积加法自注意力视觉Transformer
    近年来,VisionTransformer(ViT)在计算机视觉领域取得了巨大突破。然而ViT模型通常计算复杂度高,难以在资源受限的移动设备上部署。为了解决这个问题,研究人员提出了ConvolutionalAdditiveSelf-attentionVisionTransformers(CAS-ViT),这是一种轻量级的ViT变体,旨在在效率和性......
  • LLM应用实战: 文档问答系统Kotaemon-1. 简介及部署实践
    1.背景本qiang~这两周关注到一个很火的开源文档问答系统Kotaemon,从8月28日至今短短两周时间,github星标迅猛增长10K,因此计划深挖一下其中的原理及奥秘。本篇主要是Kotaemon的简介信息,涉及到主要特点,与传统文档RAG的区别,如何部署、以及效果演示。后续内容会针对核心模块进行拆解......
  • JDBC简介与应用:Java数据库连接的核心概念和技术
    简短介绍JDBC及其重要性。简短介绍JDBCJDBC(JavaDatabaseConnectivity)是一种用于执行SQL语句的JavaAPI并且独立于特定的数据库厂商。它允许开发者以一种标准的方式从Java应用程序中访问关系型数据库,这意味着一旦你掌握了JDBC的基本操作,你可以轻松地将你的应用程......
  • DDoS 攻击与防护(二):DDoS 防护购买和使用入门指南,DDoS 防护服务有哪些应用场景?_ddos攻击
    前文回顾:《DDoS攻击与防护(一):如何识别DDoS攻击?DDoS防护ADS服务有哪些?》声明:本文由作者“白鹿第一帅”于CSDN社区原创首发,未经作者本人授权,禁止转载!爬虫、复制至第三方平台属于严重违法行为,侵权必究。亲爱的读者,如果你在第三方平台看到本声明,说明本文内容已被窃取,内......
  • 【JDK8新特性】Stream API 结合Lambda语法在项目中的实战应用
    Lambda语法回顾在JDK8中,Lambda表达式支持的引用类型主要有以下几种,如表1所示。种类Lambda表达式示例对应的引用示例类名引用普通方法(x,y,...)->对象名x.类普通方法名(y,...)类名::类普通方法名类名引用静态方法(x,y,...)->类名.类静态方法名(x,y,...)......
  • 全国职业技能大赛大数据应用开发赛题任务B详解
    1、写在前言关于本篇:博主在团队中主要负责数据抽取、数据清洗、数据代码部分的编写,也就是任务书中的任务B模块,因此本片博客内容主要也会集中在任务B题目上关于代码风格:任务B的内容基本都是和spark打交道,众所周知spark有两种编写风格sql风格、dsl风格。两种风格功能都是能实现......