【Kubernetes】k8s集群的资源发布方式

目录

一.常见的发布方式

二.如何实现

1.滚动升级

2.蓝绿升级

3.实现金丝雀发布(灰度发布)


一.常见的发布方式

  • 蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚。
  • 优点 用户无感知,部署和回滚速度较快
  • 缺点 浪费资源成本较高
  • 滚动发布:按批次停止老版本实例,启动新版本实例
  • 优点 节约资源
  • 缺点 部署和回滚速度较慢
  • 灰度发布/金丝雀发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版本
  • 优点 保证整体系统稳定性,如果出问题影响范围较小
  • 缺点 自动化要求较高

二.如何实现

1.滚动升级

复制代码
kubectl create -n xy101 deployment test01 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment test01 --name=svc-test1 --type=NodePort --port=8080 --target-port=80
#创建资源和service
kubectl describe -n xy101 deployments.apps test01
 
kubectl set image -n xy101 deployment test01 myapp=soscscs/myapp:v2

去检察一下

2.蓝绿升级

复制代码
通过切花负载均衡的流量来实现业务的切换
kubectl create -n xy101 deployment test1-v1 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment test1-v1 --name=svc-test1 --port=8080 --target-port=80 --type=NodePort
kubectl create -n xy101 deployment test1-v2 --image=soscscs/myapp:v2 --port=80 --replicas=3
deployment.apps/test1-v2 created
复制代码
kubectl set -n xy101 selector svc svc-test1 'app=test1-v2'
kubectl describe -n xy101 svc svc-test1
复制代码
kubectl set -n xy101 selector svc svc-test1 'app=test1-v1'
kubectl describe -n xy101 svc svc-test1 

3.实现金丝雀发布(灰度发布)

Deployment控制器支持自定义控制更新过程中的滚动节奏,如"暂停(pause)"或"继续(resume)"更新

操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的

应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续

观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立

即回滚更新操作。这就是所谓的金丝雀发布

复制代码
kubectl create -n xy101 deployment myapp-v1 --image=soscscs/myapp:v1 --port=80 --replicas=3
kubectl expose -n xy101 deployment myapp-v1 --name=svc-myapp --port=8080 --target-port=80 --type=NodePort
复制代码
kubectl set image -n xy101 deployment myapp-v1 myapp=soscscs/myapp:v2 && kubectl rollout pause deployment myapp-v1 -n xy101   #kubectl rollout pause deployment myapp-v1 -n xy101 执行完前面的就暂停
 
kubectl get -n xy101 pods -o wide -w   #监控状态
 
kubectl rollout status -n xy101 deployment myapp-v1   #观察更新状态

kubectl rollout resume -n xy101 deployment myapp-v1 && kubectl rollout pause -n xy101 deployment myapp-v1   #确保更新的pod没问题了,继续更新,还是指定更新一个如何暂停

kubectl rollout resume -n xy101 deployment myapp-v1  #确保更新的pod没问题了,继续更新,会一次性都更新结束
相关推荐
极客先躯9 小时前
高级java每日一道面试题-2026年02月09日-实战篇[Docker]-Docker 容器有哪些安全风险?如何缓解?
java·运维·网络·安全·docker·容器
yuanzhengme9 小时前
Ollama【部署 07】搭建本地智能体的简单说明(局域网离线部署Ollama+模型迁移+Docker部署AnythingLLM)
运维·docker·容器·大模型·ollama·本地智能体
运维老郭9 小时前
Kubernetes 二进制部署完全指南:从零搭建生产级HA集群
运维·云原生·kubernetes
成为你的宁宁10 小时前
【K8S黑盒监控实践:Probe配置、Prometheus验证与Grafana可视化】
kubernetes·grafana·prometheus
成为你的宁宁10 小时前
【Prometheus Operator监控K8S Nginx】
nginx·kubernetes·prometheus
宇明一不急10 小时前
k8s headless svc
云原生·容器·kubernetes
容器魔方11 小时前
Karmada v1.18 版本发布!新增混合云溢出式调度能力
人工智能·云原生·容器·华为云·云计算
是一个Bug11 小时前
AI Agent 的沙箱是什么?它和 Docker / 虚拟机有什么区别?
人工智能·docker·容器
成为你的宁宁11 小时前
【K8S使用Helm部署MySQL一主多从并集成Prometheus监控】
mysql·kubernetes·prometheus
从入门到放弃-咖啡豆12 小时前
记录一次docker部署过程和一些常用的docker指令
运维·docker·容器