【kubernetes】关于k8s集群的资源发布方式(灰度/滚动发布)

目录

一、常见的发布方式

二、详解kubectl陈述式方式做灰度发布(金丝雀发布)

步骤一:先基于deployment控制器创建pod,然后发布

步骤二:基于命令行灰度发布

步骤三:测试等到版本稳定以后,再完成继续发布

三、滚动发布详解


一、常见的发布方式

  • 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚

特点:对用户无感,是最安全的发布方式,需要两套系统,对资源要求比较高,成本高

  • 灰度发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本

特点:对自动要求比较高,对比起来系统更加稳定发布,如果遇到问题可以减少影响范围

  • 滚动发布:按批次停止老版本实例,启动新版本实例。

特点:节约资源,用户无感,但是部署和回滚的速度慢

三种方式均可以做到平滑式升级,在升级过程中服务仍然保持服务的连续性,升级对外界是无感知的。那生产上选择哪种部署方法最合适呢?这取决于哪种方法最适合你的业务和技术需求。

如果你们运维自动化能力储备不够,肯定是越简单越好,建议蓝绿发布如果业务对用户依赖很强,建议灰度发布。如果是K8S平台,滚动更新是现成的方案,建议先直接使用。

二、详解kubectl陈述式方式做灰度发布(金丝雀发布)

金丝雀发布(Canary Release)
Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如

Kubernetes (K8S) 中,编写一套用于Java应用的灰度发布和AB测试的一键部署脚本通常涉及以下几个步骤: 1. **环境准备**: - 确保已安装kubectl工具,这是与K8S交互的基本命令行工具。 - 拥有权限访问到K8S集群,并了解命名空间、服务、部署等基本概念。 2. **创建配置文件**: - 创建YAML或JSON格式的配置文件,如`app.yaml`或`deployment.yaml`,其中包含应用基本信息,如应用名称、镜像URL、容器端口、副本数等。 3. **灰度版本管理**: - 使用标签策略,比如给新版本的Java应用打上特定标签(如`v0.9`, `v0.9.1`),以便于区分生产环境中的稳定版和实验版。 4. **自动部署脚本**: - 编写shell脚本,例如`deploy.sh`,内容可能包括: - 验证应用是否已存在于命名空间中。 - 如果不存在,则创建一个新的部署,并指定版本标签。 - 更新现有部署,只替换部分Pod,保持其他Pod不变,这可以使用`kubectl set image deployment/<app-name> <container-name>=<image-name>:<tag>`命令实现。 - 利用`kubectl rollout`来做滚动更新,确保流量逐渐从旧版本切换到新版本。 5. **A/B测试**: - 可以利用Kubernetes的流量路由功能(如ingress controller或通过Labels+Weight)将用户请求分发到不同版本的应用实例上,设置权重来控制各版本的流量比例。 6. **监控与反馈**: - 部署完成后,需要实时监控应用健康状况以及性能数据,比如使用Prometheus、Grafana等工具。 ```sh #!/bin/bash # 定义函数 function deploy_version { local app_name="my-java-app" local tag=$1 kubectl set image deployment/$app_name container1=image:$tag } # 新建并部署新版本 if [[ ! $(kubectl get deployments $app_name -o jsonpath='{.items[?(@.metadata.labels["version"] == "new-tag")]?.metadata.name}') ]]; then kubectl apply -f app.yaml # 设置灰度发布,这里假设新版本标签为"new-tag" deploy_version new-tag fi # A/B测试示例 echo "Setting up A/B test..." kubectl patch ingress my-ingress -p '{"spec": {"rules":[{"host": "example.com", "http": { "paths": [{"path": "/", "backend": {"service": {"name": "my-java-app", "port": { "number": 80 }}, "weight": 70 // 70% to v1, 30% to v2 }}}]}}]}}' # 这里假设v1和v2分别代表两个不同版本的部署 # 监控和日志查看 kubectl logs deployment/$app_name -c container1 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维菜鸟XY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值