了解如何在 Kubernetes 中进行蓝绿部署,以减少在更新应用时的停机时间和风险。
📖 场景如下:可以通过同时维护两个相同的环境来最小化在Kubernetes集群中更新应用程序的停机时间和风险,一个用于当前的生产版本(蓝色环境),另一个用于新版本(绿色环境)。
📘 简单讲讲:蓝绿部署是指维护两个独立的环境(蓝色和绿色)来运行您的应用。蓝色环境当前承载着生产流量,而绿色环境用于部署新版本。在绿色环境中测试新版本之后,然后将流量从蓝色环境切换到绿色环境,从而实现平滑更新,最大限度地减少停机时间。
蓝绿部署:
流量切换 :
将蓝色环境的流量数据切换至绿色环境,从而让新版本上线。
回退:
如果在绿色环境中发现问题,则将流量退回蓝色环境。
在 Kubernetes 中,可以利用服务和服务入口控制器在蓝绿部署环境之间切换流量。
在蓝色环境里部署你应用的第一个版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | apiVersion: api版本 kind: 部署 metadata: name: myapp-blue 标签: app: myapp version: blue spec: 副本数: 3 选择器: 匹配标签: app: myapp version: blue 模板: 元数据: 标签: app: myapp version: blue 规格: 容器: - name: myapp image: myapp:v1 端口: - containerPort: 80 --- apiVersion: v1 kind: 服务 metadata: name: myapp spec: 选择器: app: myapp version: blue 端口: - port: 80 targetPort: 80 |
部署你应用的新版本到测试环境。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | apiVersion: apps/v1 # API版本 kind: Deployment # 部署类型 metadata: # 元数据 name: myapp-green # 名称 labels: # 标签 app: myapp # 应用名 version: green # 版本 spec: # 规范 replicas: 3 # 副本数 selector: # 选择器 matchLabels: # 匹配标签 app: myapp # 应用名 version: green # 版本 template: # 模板 metadata: # 元数据 labels: # 标签 app: myapp # 应用名 version: green # 版本 spec: # 规范 containers: # 容器 - name: myapp # 名称 image: myapp:v2 # 镜像 ports: # 端口 - containerPort: 80 # 容器端口 |
使用 Kubernetes 来进行蓝绿部署,以在蓝绿环境中切换流量。
1 2 3 4 5 6 7 8 9 10 11 12 | # 用于部署myapp服务的yaml配置 apiVersion: v1 kind: 服务 元数据: name: myapp 规范: 选择器: 应用: myapp 版本: green 端口: - port: 80 targetPort: 80 |
蓝绿部署:
流量切换
如果检测到绿色环境有问题,将服务选择器更新为切换回蓝色环境。
例子:
1 2 3 4 5 6 7 8 9 10 11 | apiVersion: v1 kind: Service # 服务 (fúwù) metadata: name: myapp # 应用名称 spec: selector: # 选择器 (xuǎnzéqì) app: myapp # 应用 (yìngyòng) version: blue # 版本 (bǎnben) ports: # 端口 (duānkǒu) - port: 80 targetPort: 80 |
例子 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | apiVersion: networking.k8s.io/v1 kind: Ingress # Ingress在Kubernetes中是一个重要的网络组件,用于管理外部对应用的访问。 metadata: name: myapp-ingress spec: rules: - host: myapp.example.com http: paths: - path: / pathType: PathType # 路径类型 backend: # 后端 service: # 服务 name: myapp port: # 端口 number: 80 # 端口号 |
建立蓝色环境
启动绿色环境:
转向绿色交通:
监控并验证:
实现流量管理通过 'ingress'
核实和检查:
kubectl get services
,kubectl describe services
和 kubectl get ingress
检查并查看蓝绿部署(Blue-Green Deployment)的状态。蓝绿部署方式:优点和缺点
👍 优点和 👎 缺点:
理解和实施蓝绿部署对于降低应用部署时的风险非常重要。
💬 与我们聊聊:您打算怎么在您的 Kubernetes 项目中做蓝绿部署?在设置过程中遇到哪些挑战?分享一下您的经验想法吧。
👉 请继续关注更多学习机会,不断磨练您的 Kubernetes 技能,以保持在不断变化的技术环境中的领先地位。让我们继续探索、创新和自动化!