Получение ошибки при попытке использовать команду под тегом жизненного цикла в kubernetes

я успешно запускаю kubernetes, gcloud и postgres, но я хочу внести некоторые изменения после запуска модуля, я пытаюсь переместить некоторые файлы, поэтому я попробовал эти 3 варианта

1

 image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: [/bin/cp /var/lib/postgres/data /tmpdatavolume/]

2

image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: 
              - "cp"
              - "/var/lib/postgres/data"
              - "/tmpdatavolume/"

3

image: paunin/postgresql-cluster-pgsql
      lifecycle:
        postStart:
          exec:
            command: ["/bin/cp "]
            args: ["/var/lib/postgres/data","/tmpdatavolume/"]

в варианте 1 и 2 я получаю те же ошибки (от kubectl get events)

Killing container with docker id f436e40f5df2: PostStart handler: Error ex
ecuting in Docker Container: -1

и в варианте 3 он даже не позволит мне загрузить файл yaml, выдавая мне эту ошибку

error validating "postgres-master.yaml": error validating data: found invalid field args for v1.ExecAction; if you choose to ignore these errors, turn validation off with --validate=false 

любая помощь будет оценена! Благодарю. pd: я только что вставил часть своего файла yaml, так как я не получал никаких ошибок, так как я добавил эти новые строки


person PaulMB    schedule 30.06.2016    source источник


Ответы (1)


Вот документ об хуках жизненного цикла. вы можете найти полезным.

Ваш вариант 1 не будет работать и должен дать вам ошибку, которую вы видели, вместо этого она должна быть ["/bin/cp","/var/lib/postgres/data","/tmpdatavolume/"]. Вариант 2 также является правильным способом его указания. Можете ли вы kubectl exec войти в свой модуль и ввести эти команды, чтобы увидеть, какие сообщения об ошибках они генерируют? Сделайте что-нибудь вроде kubectl exec <pod-name> -i -t -- bash -il

Сообщение об ошибке, показанное в варианте 3, означает, что вы не передаете допустимую конфигурацию на сервер API. Чтобы узнать определение API, см. v1.Lifecycle и через несколько щелкает его дочерние поля, и вы обнаружите, что args недопустимо в lifecycle.postStart.exec.

Кроме того, вы можете найти это определение API, используя kubectl explain, например. kubectl explain pods.spec.containers.lifecycle.postStart.exec в данном случае.

person janetkuo    schedule 30.06.2016
comment
Большое спасибо! это действительно сработало с первым изменением ["/bin/cp","/var/lib/postgres/data","/tmpdatavolume/"], как я могу добавить больше команд?, также спасибо за API и ссылку! - person PaulMB; 01.07.2016
comment
Чтобы добавить больше команд, у вас есть 2 варианта: 1. Добавьте сценарий к своему изображению и вызовите этот сценарий или 2. Измените его на command: ["sh", "-c", "<cmd 1>; <cmd2>; ..."] - person janetkuo; 01.07.2016