灰度发布及声明式资源管理(yaml文件)

本文详细介绍了项目发布中的蓝绿发布和灰度发布方式,以及Kubernetes中声明式资源管理的原理、yaml文件操作、发布策略和两种资源管理格式的应用。重点强调了灰度发布的特点和yaml文件在K8s中的重要角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、三种常见的项目发布方式

1)蓝绿发布

2)灰度发布【常用】

3)滚动发布

应用程序升级,面临最大的问题是新旧业务之间的切换

立项-定稿-需求发布-开发-测试-发布,测试上线后,再完美也会有问题,为了不影响所有用户,产生上述三种发布方式

1)蓝绿发布

定义:把应用服务集群标记为两个组,认为分成蓝组和绿组。先升级蓝组,要把蓝组从负载均衡中移除,绿组继续提供服务,蓝组升级完毕,将蓝组加入到负载均衡中。再把绿组从负载均衡中移除,升级绿组,再将绿组加入到负载均衡中,完成对外服务

②特点

 一旦出现问题,影响范围很大

 发布策略较简单

 基于现在的云计算和微服务,成本大大降低,用户无感知

 升级和回滚都比较方便

③缺点:对硬件资源要求很高,在发布升级过程中,只有一部分集群对外服务,集群的负载能力可能会下降,响应变慢,需要给集群增加负载能力,短时间内可能会浪费一定的资源(一般是半夜升级,没有特殊需要可以不加)

2)灰度发布【常用】

必须基于deployment控制器创建的服务才可以使用灰度发布方式,在滚动更新的基础上,加入暂停功能。发布过程中,暂时停止,只有一部分pod先升级,其他pod还是旧版本,只有一部分用户可以访问新版本,绝大多数用户还是旧版本,确定完全没问题后,全部升级成新版本,取消暂停,继续发布,若有问题可以立即回滚(暂停不是回滚,一旦取消暂停,只能全部升级完毕后,才能回滚)

先更新一个pod版本

kubectl set image deployment nginx nginx=nginx:1.24 --record && kubectl rollout pause deployment nginx

继续更新剩下的pod版本

kubectl rollout resume deployment nginx

特点

 自动化要求比较高,对运维人员要求较高

 方便发现问题,及时解决,影响范围较小

 用户无感知,实现平滑过度,节约资源

 发布策略复杂

 不易回滚,必须全部发布成功之后才能回滚

二、声明式资源管理(yaml文件)

1、优点

①声明式管理适合对资源的修改操作

②声明式管理依赖于yaml文件,所有的内容都在yaml文件中声明

③编辑好的yaml文件仍然依赖于陈述式命令发布到k8s集群中

2、发布yaml文件的三种方式

kubectl create

只能创建,不能更新。从指定的yml文件中读取配置,创建服务,不能更新

kubectl apply -f

(常用)

既可以创建资源对象,也可以更新资源对象,若yml文件更改,apply可以直接更新资源对象

kubectl delete -f

删除yml文件中声明的资源对象

3、生成yaml文件

①手打

②基于已有的资源直接生成

查看控制器的yaml文件格式

kubectl get deployments.apps -o yaml

查看service的yaml文件格式

kubectl get service -o yaml

查看pod的yaml文件格式

kubectl get pod -o yaml

基于已有的资源直接生成yaml文件

后面加上--force强制升级可以不需要导出新的yaml文件再升级

4、在k8s中支持两种声明式的资源管理方式

(1)yaml格式:用于配置和管理资源对象

(2)json格式:用于在API接口之间传递消息

5、三种yaml文件

(1)deployment的yaml文件(deployment、daemeonset、statefulset)

(2)service的yaml文件

(3)不基于控制器的pod的yaml文件

(1)deployment的yaml文件

(2)service的yaml文件

(3)不基于控制器创建yaml文件

Always

在容器退出时重启容器,无论退出状态如何

Never

用于短期任务或批处理,其中容器应运行一次,然后不会重新启动

OnFailure

仅在容器以非0状态退出时才会重启容器

重启策略不会影响 Pod 本身的终止状态。只要 Pod 中至少有一个容器在运行,就认为 Pod 处于“正在运行”阶段。如果 Pod 中的所有容器都退出,则 Pod 会过渡到“已完成”或“失败”阶段,具体取决于最后一个容器的退出状态

command

定义容器运行的命令参数,类似于docker的CMD和entrypoint。args可以理解为docker中的CMD,可以给command传参。command和args都会覆盖原容器内部的标准输出【面试题】

args

/bin/bash

指定输出脚本

-c

指定输出内容

注:command和args只能有一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值