如何在OpenShift中部署数据库且不创建DeploymentConfig资源?
解决方案
直接用oc命令创建Deployment(无需模板)
如果不想依赖旧模板,可直接通过oc命令组合创建PVC、Deployment和Service,全程生成的是Deployment资源,示例如下:
- 创建持久化卷声明(PVC):
oc create pvc mongodb-pvc --access-modes=ReadWriteOnce --resources=requests.storage=512Mi
- 创建MongoDB Deployment并设置环境变量:
oc create deployment mongodb-test \ --image=registry.redhat.io/rhel8/mongodb-44:latest \ --env=MONGODB_DATABASE=sampledb \ --env=MONGODB_USER=admin \ --env=MONGODB_PASSWORD=your-secret-password \ --env=MONGODB_ADMIN_PASSWORD=your-admin-secret
- 暴露Service供其他应用访问:
oc expose deployment mongodb-test --port=27017 --name=mongodb-test
这种方式完全基于oc命令,便于文档记录和重复执行,且不会生成已弃用的DeploymentConfig。
自定义转换旧模板为Deployment版本
如果偏好使用模板,可将现有的DeploymentConfig模板转换为Deployment版本:
- 导出旧的数据库模板:
oc get template mongodb-persistent -o yaml > mongodb-persistent-deployment.yaml
编辑导出的YAML文件,做以下调整:
- 将
kind: DeploymentConfig改为kind: Deployment - 删除
triggers字段中的ConfigChange触发器(Deployment依赖ReplicaSet的默认更新策略) - 移除DeploymentConfig特有的字段(如
spec下的test字段等)
- 将
导入修改后的模板到OpenShift:
oc create -f mongodb-persistent-deployment.yaml
之后就可以用你熟悉的oc new-app命令基于这个新模板部署,生成的是Deployment资源。
关于Deployment策略的说明
RedHat文档提到的Deployments do not support user-specified custom deployment strategies确实存在,但数据库部署通常不需要复杂的自定义策略,默认的滚动更新或重建策略(可通过spec.strategy.type设置为RollingUpdate或Recreate)完全能满足需求,比如MongoDB这类有状态服务,使用Recreate策略更合适。
内容的提问来源于stack exchange,提问作者w. Patrick Gale
相关产品推荐
相关产品推荐

