ошибка синтаксического анализа stateful.yaml: ошибка преобразования YAML в JSON: yaml: строка 35: значения сопоставления не допускаются в этом контексте - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь развернуть mongodb в Kubernetes, но получаю сообщение об ошибке:

ошибка синтаксического анализа stateful.yaml: ошибка преобразования YAML в JSON: yaml: строка 35: значения сопоставления не разрешены в этом контексте

строка 35 - это имя контейнера: - имя: uat-mongo-primary

Я получаю эту ошибку, когда пытаюсь создать модули, но если я комментирую строки:

mongo --eval rs.initiate ({_ id: "rs0", версия: 1, члены: [{_id: 0, host: "uat-mongo-primary-rc-0: 27017"}]}); 53 монго --eval "db.getSiblingDB ('admin'). createUser ({пользователь: \" $ MONGO_USER \ ", pwd: \" $ MONGO_PASSWORD \ ", роли: [{role: 'root', db: 'admin'} ] }) ";

блоки создаются нормально, но мне нужно запустить кластер, а также создать пользователя и пароль.

это полный файл 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

Ответы [ 3 ]

0 голосов
/ 24 апреля 2019

Невозможно использовать строки YAML, содержащие двоеточия (по крайней мере, с kubectl). Вы должны преобразовать свой YAML в JSON (например, используя этот инструмент) и применить этот JSON с kubectl.

0 голосов
/ 26 апреля 2019

Во-первых, нет необходимости использовать двойные кавычки, если вы не хотите принудительно устанавливать значение для "строки".В этом посте

есть отличное объяснение. Кроме того, то, что вы делаете, не лучшая практика, и трудно управлять такими длинными сложными командами в файлах yaml.Я бы посоветовал вам создать свой собственный Dockerfile, добавив эти команды в Dockerfile и собрав свой собственный образ.

Другой вариант, когда вы проверяете документацию по mongo docker, для инициализации нового экземпляра

Когда контейнер запускается в первый раз, он запускает файлы с расширениями .sh и .js, которые находятся в /docker-entrypoint-initdb.d.Файлы будут выполнены в алфавитном порядке.Файлы .js будут выполняться mongo с использованием базы данных, указанной в переменной MONGO_INITDB_DATABASE, если она есть, или протестировать иначе.Вы также можете переключать базы данных в скрипте .js.

Итак, вы можете присоединить PV к этому каталогу и добавить туда свои скрипты, затем, когда контейнер запустится, он запустит ваши скрипты.

0 голосов
/ 23 апреля 2019

Чтобы убедиться, что ваш файл yaml отображается правильно, попробуйте любой онлайн-инструмент для преобразования YAML в JSON. Так что это будет указывать, какие поля не являются действительными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...