поле неизменное k8s - PullRequest
1 голос
/ 22 мая 2019

Я пытаюсь развернуть приложение в GCP на kubernetes, однако развертывание завершается с ошибкой the job spec is invalid ... the field is immutable.

В задании на миграцию у меня есть раздел bash в следующем формате:

args:
        - |
          /cloud_sql_proxy -instances=xxxxxxxxxxx:europe-west1:xxxxxxxxxxx=tcp:5432 -credential_file=/secrets/cloudsql/credentials.json -log_debug_stdout=true &
          CHILD_PID=$!
          (while true; do echo "waiting for termination file"; if [[ -f "/tmp/pod/main-terminated" ]]; then kill ; echo "Killed  as the main container terminated."; fi; sleep 1; done) &
          wait 
          if [[ -f "/tmp/pod/main-terminated" ]]; then exit 0; echo "Job completed. Exiting..."; fi

но когда файл выполняется, в yaml на GCP я вижу, что команда заключена в кавычки, а затем она возвращает вышеуказанную ошибку.

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Если вы используете args в определении Pod, это должен быть массив с одностроковыми элементами.(Он не запускает команду в оболочке) Например:

args:
        - /cloud_sql_proxy
        - -instances
        - ...

или

args:  [ "/cloud_sql_proxy", "-instances", "..." ]

Способ обойти это - запустить команду вshell :

command: [ "/bin/sh" ]
args: 
        - -c
        - |
          /cloud_sql_proxy -instances=xxxxxxxxxxx:europe-west1:xxxxxxxxxxx=tcp:5432 -credential_file=/secrets/cloudsql/credentials.json -log_debug_stdout=true &
          CHILD_PID=$!
          (while true; do echo "waiting for termination file"; if [[ -f "/tmp/pod/main-terminated" ]]; then kill ; echo "Killed  as the main container terminated."; fi; sleep 1; done) &
          wait 
          if [[ -f "/tmp/pod/main-terminated" ]]; then exit 0; echo "Job completed. Exiting..."; fi

Кавычки (") в массиве предназначены для удобства чтения, они также могут быть ни кавычками, ни одинарными кавычками (') (как видно из YAML specs )

Надеюсь, это поможет.

0 голосов
/ 24 мая 2019

Итак, эта проблема была решена.Мне пришлось обернуть значения переменных окружения в файле yaml в кавычки.Это решило проблему.

- name: DATABASE_URL:
  value: "${DATABASE_URL}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...