K8s-金丝雀发布 简单实验

在Kubernetes中,金丝雀发布(Canary Release) 是一种渐进式部署策略,目的是将新版本应用逐步暴露给一小部分用户或流量,通过持续监控确保其稳定性后,再逐步扩大范围直至完全替换旧版本。这种策略的名称来源于"矿井中的金丝雀"------早期矿工用金丝雀来检测有毒气体,如果金丝雀存活,说明环境安全。

金丝雀发布的核心原理

  1. 小范围验证

    • 先部署新版本(金丝雀版本)到生产环境,但仅允许少量用户或流量访问它(例如5%的请求)。

    • 大部分流量仍由旧版本处理,确保用户整体体验不受影响。

  2. 监控与观察

    • 监控新版本的性能指标(如错误率、延迟、CPU/内存使用率等)。

    • 如果新版本表现稳定,逐步增加其流量比例;如果发现问题,立即回滚。

  3. 逐步替换

    • 最终将100%流量切换到新版本,完成平滑升级。

为什么在Kubernetes中使用金丝雀发布?

  1. 降低风险

    • 避免一次性全量发布导致全局故障,尤其适用于关键业务场景。
  2. 快速反馈

    • 通过真实流量验证新版本,比测试环境更可靠。
  3. 无缝回滚

    • 发现问题时,只需将流量切回旧版本,无需重新部署。

创建条件是让蓝绿在同一个service名称下

vim green.yml

|kubectl apply -f green.yml

vim blue.yml

kubectl apply -f blue.yml

kubectl get po

查看服务端口kubectl get svc

完成后可以在网页上访问 192.168.11.160:32016

之后可以通过命令更改蓝绿的pod数量

kubectl scale deployment myapp-blue --replicas 8

kubectl scale deployment myapp-green --replicas 2

通过ingress做

vim blue.yml

kubectl apply -f blue.yml

vim green.yml

kubectl apply -f green.yml

vim green-svc.yml

kubectl apply -f green-svc.yml

vim ingress-canary.yml

kubectl apply -f ingress-canary.yml

vim master-ingress.yml

kubectl apply -f master-ingress.yml

kubectl get ingress 两个ingress共用一个地址

查看端口kubectl -n ingress-nginx get svc

在node节点添加 vim /etc/hosts

修改`canary-weight`注解值,逐步增加新版本流量:(也可以在文件中修改)

kubectl annotate ingress/myapp-canary \

nginx.ingress.kubernetes.io/canary-weight="50" \ # 50%流量到v2

--overwrite

相关推荐
codeejun10 小时前
每日一Go-73、云原生成本优化 —— 资源限制 & 指标驱动扩容
开发语言·云原生·golang
darkdragonking12 小时前
OpenEuler 22.03 ,以docker ce 安装 Milvus 及可视化工具
docker·容器·milvus
真上帝的左手14 小时前
11. 容器化 vs 虚拟化-K8s-工作负载实战
云原生·容器·kubernetes
极客先躯16 小时前
高级java每日一道面试题-2026年01月18日-实战篇[Docker]-如何清理仓库中的旧镜像?
java·运维·docker·容器
张忠琳17 小时前
【kubernetes v1.21】(controller-manager part 1)kube-controller-manager 核心架构与启动流程
云原生·架构·kubernetes
qq_4523962318 小时前
第十五篇:《Docker 与 Kubernetes 集成:从 Swarm 到 K8s 的迁移》
docker·容器·kubernetes
HackTwoHub18 小时前
K8s综合渗透测试工具,集成信息搜集、权限逃逸、横向移动,一站式搞定全流程渗透测试工作
人工智能·安全·web安全·云原生·容器·kubernetes·系统安全
做个文艺程序员18 小时前
第05篇:K8s CI/CD 全流程:GitOps × ArgoCD × Harbor——Java SaaS 从代码提交到生产部署一键直达
ci/cd·kubernetes·argocd
人工智能培训19 小时前
数字孪生建模常用方式有哪些?
人工智能·深度学习·机器学习·容器·知识图谱
lpfasd12319 小时前
docker中默认网络的作用和注意事项
网络·docker·容器