Развертывание Kubernetes - передать аргументы

Я хочу передать аргументы развертыванию Kubernetes, когда я использую команду kubectl для применения файла развертывания.

Пример: в моем развертывании .yaml у меня есть аргументы, как показано ниже, и я хочу передать значения аргументов при запуске с kubectl apply - f <my-deployment>.yaml

Итак, в приведенном ниже примере я хочу переопределить args - идентификатор пользователя и роль, когда я запускаю указанную выше команду kubectl.

spec:
      containers:
        - name: testimage
          image: <my image name>:<tag>
          args:
          - --userid=testuser
          - --role=manager

person testbg testbg    schedule 22.05.2020    source источник
comment
Возможно, вы ищете инструмент для создания шаблонов, такой как Helm, или что-то вроде Kustomize, которое может вносить более целенаправленные изменения в манифесты Kubernetes. Если вы управляете приложением, передавать настройки в виде переменных среды немного проще, чем аргументы командной строки.   -  person David Maze    schedule 22.05.2020
comment
Спасибо ! В настоящее время я не использую Kustomize. Есть ли способ передать значения аргументов при запуске команды kubectl для развертывания yaml развертывания? Есть ли другой вариант, кроме Helm или Kustomize? Спасибо!   -  person testbg testbg    schedule 22.05.2020


Ответы (2)


Ответ прост. Вы не можете этого сделать.

kubectl не является механизмом шаблонов. Как упоминали некоторые люди, у вас есть такие варианты, как Helm или Kustomize, которые могут решить эту проблему. Я бы посоветовал вам изучить Helm3, поскольку он прекрасно решает вашу проблему с помощью такой команды, как helm upgrade --install ... --set userid=xxx --set role=yyy.

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

...
args:
- --userid=$USER
- --role=$ROLE
...
cat resource.yaml | USER=testuser ROLE=manager envsubst | kubectl apply -f -

очевидно, что подойдет любой другой метод замены строк (sed, awk и т. д.)

person Radek 'Goblin' Pieczonka    schedule 22.05.2020

Его нужно добавить в ваш deployment.yml

spec: 
  containers: 
    - name: testimage 
      image: <my image name>:<tag> 
      args: ["--userid","=","testuser","--role","=","manager"]
person JaskiratSra    schedule 22.05.2020
comment
Спасибо! Не могли бы вы сообщить мне, где я могу передать эти аргументы: выше? Могу ли я передать параметр kubectl cmd? Можете привести пример? Спасибо! - person testbg testbg; 22.05.2020
comment
Пожалуйста, добавьте в ваше развертывание сам yml. spec: container: - name: testimage image: ‹имя моего изображения›: ‹tag› args: [--userid, =, testuser, - role, =, manager] - person JaskiratSra; 22.05.2020
comment
Спасибо! Приведенное ниже не будет работать, поскольку я хочу передать значение аргументов с помощью команды kubectl, когда я применяю развертывание yaml. Ниже приводится значение, которое я считаю. Как я могу передавать разные значения без изменения yaml развертывания? spec: container: - name: testimage image: ‹имя моего изображения›: ‹tag› args: [--userid, =, testuser, - role, =, manager] - person testbg testbg; 22.05.2020
comment
@JaskiratSra то, что вы добавляете в сеанс комментариев, на самом деле является ценным вкладом в ваш ответ. Не забывайте, что вы можете редактировать свои сообщения (на этот раз я сделал это). - person β.εηοιτ.βε; 22.05.2020