如何将Mongo服务的docker-compose配置转为Kubernetes YAML文件
Docker-Compose转Kubernetes YAML实现方案
原docker-compose配置的核心能力与Kubernetes资源的对应关系如下:
restart: always对应Kubernetes Pod的restartPolicy: Always,Deployment资源默认自带该策略27017:27017端口映射需要通过容器端口声明+Service资源实现访问暴露./init-mongo.js的只读挂载,Kubernetes不支持直接引用宿主机相对路径文件,需要先把初始化脚本存入ConfigMap,再以只读模式挂载到容器对应路径
完整可直接使用的YAML配置
--- # 1. 存储Mongo初始化脚本的ConfigMap apiVersion: v1 kind: ConfigMap metadata: name: mongo-init-script data: init-mongo.js: | # 请将本行及以下注释替换为你本地init-mongo.js文件的全量实际内容 --- # 2. Mongo工作负载部署 apiVersion: apps/v1 kind: Deployment metadata: name: mongo labels: app: mongo spec: replicas: 1 selector: matchLabels: app: mongo template: metadata: labels: app: mongo spec: restartPolicy: Always containers: - name: mongo image: mongo:latest ports: - containerPort: 27017 volumeMounts: - name: init-script-volume mountPath: /docker-entrypoint-initdb.d/init-mongo.js subPath: init-mongo.js readOnly: true volumes: - name: init-script-volume configMap: name: mongo-init-script --- # 3. 服务端口暴露 apiVersion: v1 kind: Service metadata: name: mongo-svc spec: type: ClusterIP selector: app: mongo ports: - port: 27017 targetPort: 27017
部署注意事项
- 使用前必须将ConfigMap中
init-mongo.js对应的value替换为你本地初始化脚本的实际内容,否则初始化逻辑不会生效 - 生产环境建议将镜像从
mongo:latest改为固定版本号(比如mongo:7.0),避免版本漂移导致服务异常 - 上述配置没有做Mongo数据持久化,如果需要保留业务数据,需要额外创建PersistentVolumeClaim,将其挂载到容器内的
/data/db路径,避免Pod重建后数据丢失 - 如果需要集群外部访问Mongo服务,可以将Service的
type从ClusterIP改为NodePort或者LoadBalancer - 配置调整完成后,执行
kubectl apply -f <你的yaml文件名>.yaml即可完成部署
内容的提问来源于stack exchange,提问作者DireRaven
相关产品推荐
相关产品推荐

