如何在OpenShift中同时部署同一微服务的两个不同版本?
多版本应用部署操作指南
可以明确:你需要使用两份不同的Deployment(或OpenShift原生的DeploymentConfig)配置文件完成两个版本的部署,具体操作步骤如下:
1. 构建不同版本的应用镜像
和教程中的镜像构建逻辑一致,为你的TEST应用分别构建两个版本的镜像:
- 切换到v1版本代码目录,执行构建命令:
docker build -t example/test:v1 . - 切换到修改后的v2版本代码目录,执行构建命令:
docker build -t example/test:v2 .
如果使用OpenShift内置的BuildConfig进行构建,只需在BuildConfig配置中分别指定不同的输出镜像tag即可。
2. 编写两份独立的部署配置文件
两份部署配置核心需要区分以下字段,避免资源冲突:
- 元数据名称
metadata.name:分别命名为test-v1、test-v2 - Pod模板标签
spec.template.metadata.labels:新增版本标识标签,分别设置为version: v1、version: v2,后续Istio做流量拆分时可通过该标签识别不同版本 - 容器镜像地址
spec.containers.image:分别对应之前构建的example/test:v1、example/test:v2 - 标签选择器
spec.selector:需要匹配对应版本的Pod标签,不要和另一个版本的选择器重叠
若需要两个版本共用同一个集群内Service,只需将Service的
selector设置为两个版本Deployment共有的标签(例如app: test),不要添加version维度的标签,即可让Service同时转发流量到两个版本的Pod。
3. 执行部署
分别应用两份部署配置文件即可完成双版本同时运行:
- 部署v1版本:
oc apply -f deployment-test-v1.yaml - 部署v2版本:
oc apply -f deployment-test-v2.yaml
部署完成后可执行oc get pods -l app=test查看两个版本的Pod运行状态。
4. Istio流量配置补充(可选)
如果需要按比例分配流量到两个版本,只需新增Istio的VirtualService和DestinationRule资源,在DestinationRule中定义对应version标签的v1、v2两个subset,即可实现灰度发布、流量切分等能力。
内容的提问来源于stack exchange,提问作者shurohige
相关产品推荐
相关产品推荐

