【K8s】¹版本回退升级&金丝雀发布

这篇具有很好参考价值的文章主要介绍了【K8s】¹版本回退升级&金丝雀发布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了更好的解决服务编排的问题, 我们可以使用Deployment控制器。这种控制器不直接管理pod,他通过ReplicaSet来管理pod。

k8s回退yaml版本,K8s,运维,云计算,kubernetes,云原生

目录

1.使用yaml文件形式,创建deployment

2.扩缩容

3.镜像更新

4.版本回退

5.金丝雀发布

金丝雀发布的优点

金丝雀发布的缺点


Deployment主要功能:

  • 支持ReplicaSet的所有公共
  • 支持发布的停止、继续
  • 支持滚动升级和回退版本

1.使用yaml文件形式,创建deployment

# 创建一个ddd的命名空间
kubectl create ns ddd
# vim dep.yaml
apiVersion: apps/v1  #版本号
kind: Deployment    #种类,注意大小写
metadata:     #元数据
  name: dep   #rs名称
  namespace: ddd    #所属命名空间
spec:    #详情描述
  replicas: 3   #副本数量
  selector:     #选择器,通过他指定该控制器管理那些pod
    matchLabels:  #Label匹配规则
      app: nginx-pod   #标签名
  template:   #模板,当副本数量不足时,会根据下面模板创建pod
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
# 创建deployment,注意要加 --record=true
kubectl create -f dep.yaml --record=true


# 查看dep
# UP-TO-DATE 最新版本的pod的数量
# AVAILABLE  当前可用的pod的数量
kubectl get deploy dep -n ddd
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
dep    3/3     3            3           4s

# 查看rs
kubectl get rs -n ddd
NAME                       DESIRED   CURRENT   READY   AGE
dep-858db84f89             3         3         3       4m16s

# 查看pod
NAME                             READY   STATUS    RESTARTS   AGE
dep-858db84f89-5qmxq             1/1     Running   0          4m58s
dep-858db84f89-766t8             1/1     Running   0          4m58s
dep-858db84f89-gjb6m             1/1     Running   0          4m58s

2.扩缩容

扩容可以有两种方法
1. 命令变更副本数量为5个
[root@k8s-master ~]# kubectl scale deploy dep --replicas=5 -n ddd
[root@k8s-master ~]# kubectl get deploy  dep -n ddd
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
dep    5/5     5            5           8m40s

2. 编辑更新副本数量为6个
[root@k8s-master ~]# kubectl edit deploy dep -n ddd
编辑spec里的replicas
spec:
  progressDeadlineSeconds: 600
  replicas: 6
[root@k8s-master ~]# kubectl get deploy  dep -n ddd
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
dep    6/6     6            6           11m

3.镜像更新

编辑dep.yaml,添加重建更新策略

spec:
  strategy: # 策略
    type: Recreate # 重建更新

 kubectl apply -f dep.yaml

# 查看当前镜像版本为1.17.1
[root@k8s-master ~]# kubectl get deploy  dep -n dev -o wide
NAME   READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
dep    3/3     3            3           14m   nginx        nginx:1.17.1   app=nginx-pod

# 更改为1.17.2
[root@k8s-master ~]# kubectl set image deploy dep nginx=nginx:1.17.2  -n dev
deployment.apps/dep image updated
[root@k8s-master ~]# kubectl get deploy  dep -n dev -o wide
NAME   READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         SELECTOR
dep    3/3     3            3           16m   nginx        nginx:1.17.2   app=nginx-pod

# 查看rs,发现现在rs是2个了,pod数量为6个
[root@k8s-master ~]# kubectl get rs -n dev
NAME                       DESIRED   CURRENT   READY   AGE
dep-57c77dd4dd             3         3         3       2m47s
dep-6c78d7875b             0         0         0       4m31s

编辑dep.yaml,添加滚动更新策略

spec:
  strategy: # 策略
    type: RollingUpdate # 滚动更新策略
    rollingUpdate:
      maxSurge: 25% 
      maxUnavailable: 25%

 kubectl apply -f dep.yaml 

# 变更镜像
[root@k8s-master ~]# kubectl set image deployment dep nginx=nginx:1.17.1 -n ddd

# 过几秒钟查看升级
[root@k8s-master ~]# kubectl get pod -n ddd

4.版本回退

kubectl rollout: 版本升级相关功能,支持下面的选项:

  • status 显示当前升级状态

  • history 显示 升级历史记录

  • pause 暂停版本升级过程

  • resume 继续已经暂停的版本升级过程

  • restart 重启版本升级过程

  • undo 回滚到上一级版本

# 查看当前升级版本的状态
[root@k8s-master ~]# kubectl rollout status deploy dep  -n ddd
deployment "dep" successfully rolled out

# 查看升级历史记录
[root@k8s-master ~]# kubectl rollout history deploy dep -n ddd
deployment.apps/dep
REVISION  CHANGE-CAUSE
1         kubectl create --filename=dep.yaml --record=true
2         kubectl create --filename=dep.yaml --record=true
3         kubectl create --filename=dep.yaml --record=true
# 可以发现有三次版本记录,说明完成过两次升级

# 版本回滚
# 使用--to-revision=1回滚到了1版本
[root@k8s-master ~]# kubectl rollout undo deployment dep --to-revision=1 -n ddd

# 查看发现,通过nginx镜像版本可以发现到了第一版
[root@k8s-master1 ~]# kubectl get deploy -n ddd -o wide
NAME            READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES         
dep   3/3     3            3           74m   nginx        nginx:1.17.1 

5.金丝雀发布

类似灰度发布:让一小部分用户先用上新版本,还有一部分人有旧版本

Deployment控制器支持控制更新过程中的控制,如“暂停(pause)”或“继续(resume)”更新操作。

k8s回退yaml版本,K8s,运维,云计算,kubernetes,云原生

金丝雀发布的优点:

1、按比例将流量无差别地导向新版本,新版本故障影响范围小;

2、发布期间逐步对新版本扩容,同时对老版本缩容,资源利用率高。

金丝雀发布的缺点:

1、流量无差别地导向新版本,可能会影响重要用户的体验;

2、发布周期长。文章来源地址https://www.toymoban.com/news/detail-780041.html

# 更新deployment的版本,并配置暂停deployment
[root@k8s-master ~]# kubectl set image deploy dep nginx=nginx:1.17.3 -n ddd && kubectl rollout pause depl                                                                               oyment dep -n ddd

#观察更新状态
[root@k8s-master ~]# kubectl rollout status deploy dep -n ddd
Waiting for deployment "dep" rollout to finish: 1 out of 3 new replicas have been updated...

# 查看资源,发现有一部分在1,有意部分在3
[root@k8s-master ~]#  kubectl get rs -n ddd -o wide
NAME                       DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES         SELECTOR
dep-57c77dd4dd             0         0         0       54m   nginx        nginx:1.17.2   app=nginx-pod,pod-template-hash=57c77dd4dd
dep-6c78d7875b             3         3         3       56m   nginx        nginx:1.17.1   app=nginx-pod,pod-template-hash=6c78d7875b
dep-849d4778f4             1         1         1       66s   nginx        nginx:1.17.3   app=nginx-pod,pod-template-hash=849d4778f4

# 确保更新的pod没问题了,继续更新
[root@k8s-master ~]# kubectl rollout resume deploy dep -n ddd

# 查看最后的更新情况,全部就为
[root@k8s-master ~]# kubectl get rs -n ddd -o wide

到了这里,关于【K8s】¹版本回退升级&金丝雀发布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • KubeSphere实现金丝雀发布(Canary Release)

    KubeSphere 基于 [Istio] 向用户提供金丝雀发布功能,即: 引入服务的新版本,并向其发送一小部分流量来进行测试 同时,旧版本负责处理其余的流量 如果一切顺利,就可逐渐增加向新版本发送的流量,同时逐步停用旧版本 如出现任何问题,可用 KubeSphere 更改流量比例来回滚至

    2024年02月02日
    浏览(35)
  • 1W字长文:蓝绿发布、金丝雀发布、滚动发布、A/B测试 原理和实操

    蓝绿发布、金丝雀发布、滚动发布、A/B测试 ,是大家日常常见的发布工作。所以 发布的原理和实操 是一个 非常、非常核心的面试知识点 。 在40岁老架构师 尼恩的 读者交流群 (50+)中,其相关面试题是一个非常、非常高频的交流话题。 只要一面试,基本就会问: 对灰度发布

    2024年02月04日
    浏览(38)
  • 蓝/绿部署 VS 金丝雀部署

    在生产环境中更新和配置应用程序通常是件令人望而生畏的事。面对如此多的可用选项,应如何选择最适合你的用例的部署策略? 部署策略用于升级或配置正在运行的应用程序。在下文中,我们将讨论三种部署策略: 重建部署 :在部署新版本之前,终止当前版本。 蓝/绿部

    2024年02月06日
    浏览(27)
  • 自动化金丝雀部署:Flagger全面解读webhook(含源码)

    内容导读: 上文通过下面的配置就实现了 验收测试 和 压力测试 ,对此有以下疑问: metadata定义脚本和类型,说明接口能执行shell,那它是怎么实现的? type未设置是怎样的执行逻辑?type有哪些值,各有什么作用? 本文将通过源码来解答以上问题 本文采用 粗读 源码方式,

    2024年04月11日
    浏览(42)
  • 部署k8s集群版本升级

            升级k8s,可以升级一个小版本,可以升级一个大版本,但是不能跨版本升级,会有报错提示。建议一个版本一个版本升级 注意kubeadm版本与集群版本一致。本文集群版本v1.20.15升级到v1.21.14. 第一步:查看当前集群集群版本 [root@master ~]# kubectl  get  node 第二步:使节

    2024年02月05日
    浏览(31)
  • k8s使用ingress实现应用的灰度发布升级

    v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx,来测试灰度发布实现过程 一、方案:使用ingress实现应用的灰度发布 1、服务端:正常版本v1,灰度升级版本v2 2、客户端:带有请求头version=v2标识的请求访问版本v2,其他的请求访问版本v1 3、待版本v2稳定后,所有请求切换

    2024年01月24日
    浏览(38)
  • 飞天使-k8s知识点19-kubernetes实操4-资源调度 标签和选择器:Label与Selector的使用-版本回退

    添加label 资源调度 Deployment:创建与配置文件解析 rs pod deploy 的关联信息展示 Deployment:滚动更新 Deployment:回滚 回退版本实际操作

    2024年02月20日
    浏览(42)
  • K8s 场景下 Logtail 组件可观测方案升级-Logtail 事件监控发布

    随着K8s和云的普及,越来越多的公司将业务系统部署到云上,并且使用K8s来部署应用。Logtail是SLS提供的日志采集Agent,能够非常好的适应K8s下各种场景的日志采集,支持通过DaemonSet方式和Sidecar方式采集Kubernetes集群的容器标准输出或者文件日志。Logtail作为一个K8s场景下非常重

    2024年01月17日
    浏览(31)
  • k8s环境jenkins发布vue项目指定nodejs版本

    发布一个前端项目,它需要nodejs 16.9.0版本支持,而kubesphere 3.2.0集成的jenkins 的镜像只支持nodejs v10.16.3 该项目基于的环境是k8s 1.23.4,docker 20.10.12. vue 2.7 Jenkins Kubernetes插件 kubesphere 平台安装了jenkins ,基于Jenkins Kubernetes插件,自动化在Kubernetes中运行的Jenkins-slave代理的缩放。该插件

    2024年02月09日
    浏览(35)
  • kubeadm升级k8s版本1.28.2升级至1.28.4(Ubuntu操作系统下)

    1.官网升级说明 升级 kubeadm 集群 | Kubernetes 2. 版本说明 详细参考:版本偏差策略 | Kubernetes Kubernetes 版本以  x.y.z  表示,其中  x  是主要版本,  y  是次要版本, z  是补丁版本。 版本升级控制:         1. 最新版和最老版的 kube-apiserver 实例版本偏差最多为一个次要版本

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包