解析stateful.yaml时出错:将YAML转换为JSON时出错:yaml:第35行:在此上下文中不允许映射值

问题描述 投票:1回答:3

我正在尝试在Kubernetes上部署mongodb,但我收到错误:

解析stateful.yaml时出错:将YAML转换为JSON时出错:yaml:第35行:在此上下文中不允许映射值

第35行是容器名称: - name:uat-mongo-primary

当我尝试创建pod但是如果我评论这些行时,我收到此错误:

mongo --eval rs.initiate({_ id:“rs0”,version:1,members:[{_ id:0,host:“uat-mongo-primary-rc-0:27017”}]}); 53 mongo --eval“db.getSiblingDB('admin')。createUser({user:\”$ MONGO_USER \“,pwd:\”$ MONGO_PASSWORD \“,角色:[{role:'root',db:'admin '}]})“;

pod正在正常创建,但我需要启动群集也创建用户和密码。

这是我正在使用的完整yaml文件,我将不胜感激任何帮助:

apiVersion: v1
kind: Service
metadata:
  name: uat-mongo-primary
  labels:
    name: uat-mongo-primary
spec:
  type: NodePort
  ports:
  - port: 27017
    targetPort: 27017
    protocol: TCP
    name: uat-mongo-primary
  selector:
    name: uat-mongo-primary

---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: uat-mongo-primary-rc
  labels:
    name: uat-mongo-primary-rc
spec:
  serviceName: uat-mongo-primary
  replicas: 1
  template:
    metadata:
      labels:
        role: mongo
        environment: test

    spec:
      containers:
      - name: uat-mongo-primary
        image: mongo
        env:
          - name: "MONGO_DATA_DIR"
            value: "/data/db"
          - name: "MONGO_LOG_DIR"
            value: "/data/logs"
          - name: MONGO_USER
            value: "admin"
          - name: MONGO_PASSWORD
            value: "password"

        command: ["/bin/sh", "-c"]
        args:
          - echo starting;
            ulimit -a;
            mongod --replSet rs0 --bind_ip_all;
            mongo --eval rs.initiate({_id: "rs0", version: 1, members: [{ _id: 0, host : "uat-mongo-primary-rc-0:27017" }]});
            mongo --eval "db.getSiblingDB('admin').createUser({user : \"$MONGO_USER\", pwd  : \"$MONGO_PASSWORD\", roles: [ { role: 'root', db: 'admin' } ] })";
         ports:
        - containerPort: 27017
      volumes:
        - name: uat-mongo-primary-db
          persistentVolumeClaim:
            claimName: uat-mongo-primary-pvc
mongodb deployment kubernetes
3个回答
0
投票

要检查您的yaml文件是否正确呈现,请尝试使用任何YAML到JSON转换器在线工具。因此它将指示哪些字段无效。


0
投票

不可能使用含有冒号的YAML字符串(至少使用kubectl)。您应该将您的YAML转换为JSON(例如使用this工具)并将该JSON应用于kubectl。


0
投票

首先,除非你想强制“string”的值,否则不需要使用双引号。这个post有很好的解释

此外,你正在做什么,这不是最好的做法,并且很难在yaml文件中管理如此长的复杂命令。我建议你通过在Dockerfile中添加这些命令来构建自己的Dockerfile并构建自己的镜像。

其他选项是在检查mongo docker文档时,用于初始化新实例

当容器第一次启动时,它将执行扩展名为.sh和.js的文件,这些文件位于/docker-entrypoint-initdb.d中。文件将按字母顺序执行。 .js文件将由mongo使用MONGO_INITDB_DATABASE变量指定的数据库执行(如果存在),否则进行测试。您也可以在.js脚本中切换数据库。

因此,您可以将PV附加到此目录,并在那里添加脚本,然后当容器启动时,它将运行您的脚本。

© www.soinside.com 2019 - 2024. All rights reserved.