Задавать переменные среды контейнера при создании развертывания с помощью kubectl create - PullRequest
0 голосов
/ 17 января 2020

Мы можем создать развертывание с помощью:

kubectl create deployment nginx-deployment --image=nginx

Как мы можем передать переменную среды, скажем, key=value, для контейнера при создании развертывания с использованием kubectl?

Кроме того, можем ли мы также использовать значения configmap или secret в качестве переменных среды?

Ответы [ 4 ]

1 голос
/ 17 января 2020

kubectl run nginx-pod --generator=run-pod/v1 --image=nginx --env="key1=value1" --env="key2=value2"...

Ссылка - run.

0 голосов
/ 20 января 2020

Существует возможность, что другие члены сообщества указали передать переменную в модуль, но я бы посоветовал вам использовать декларативный подход к созданию объектов в Kubernetes. Зачем мне?

Есть хороший comi c, объясняющий различия между императивным и декларативным подходом.

Ниже приведены примеры:

  • Создание базового c NGINX развертывания
  • Создание Configmap и Secret в декларативном подходе
  • Применить выше Configmap и Secret к уже созданному NGINX развертыванию

Создать базовое c NGINX развертывание

Создать YAML определение NGINX похоже на это:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Примените его, запустив $ kubectl apply -f FILE_NAME.yaml

Создайте основу c ConfigMap

Создайте YAML определение ConfigMap похоже на это:

apiVersion: v1
kind: ConfigMap
metadata:
  name: config-for-nginx
data:
  port: "12345"

Примените его, запустив $ kubectl apply -f FILE_NAME.yaml

Создайте основу c Secret

Создайте определение YAML из Secret аналогично следующему:

apiVersion: v1
kind: Secret
metadata:
  name: password-for-nginx
type: Opaque
data:
  password: c3VwZXJoYXJkcGFzc3dvcmQK

Определите c взгляд:

  password: c3VwZXJoYXJkcGFzc3dvcmQK

Этот пароль закодирован в base64 .

Чтобы создать этот пароль, вызовите команду из своего терминала: $ echo "YOUR_PASSWORD" | base64

Вставьте вывод в определение YAML и примените его с помощью: $ kubectl apply -f FILE_NAME.

Применить выше Configmap и Secret для уже созданного NGINX развертывания

Вы можете отредактировать ранее созданное NGINX развертывание и добавить часть, отвечающую за добавление ConfigMap и Secret, которая будет доступна как переменные окружения:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        env:
        - name: NGINX_PASSWORD
          valueFrom:
            secretKeyRef:
              name: password-for-nginx
              key: password
        - name: NGINX_PORT
          valueFrom:
            configMapKeyRef:
              name: config-for-nginx
              key: port
        ports:
        - containerPort: 80

Пожалуйста, обратите внимание на приведенную ниже часть c, которая добавит переменные окружения к созданным модулям в виде NGINX_PASSWORD и NGINX_PORT:

        env:
        - name: NGINX_PASSWORD
          valueFrom:
            secretKeyRef:
              name: password-for-nginx
              key: password
        - name: NGINX_PORT
          valueFrom:
            configMapKeyRef:
              name: config-for-nginx
              key: port

secretKeyRef - ссылка на созданный Secret, а configMapKeyRef - ссылка на созданный ConfigMap.

. Примените его, запустив $ kubectl apply -f FILE_NAME.yaml еще раз.

Он завершит работу старых модулей и создаст новые с новой конфигурацией.

Чтобы проверить, правильно ли настроены переменные среды, выполните следующие команды:

  • $ kubectl get pods
  • $ kubectl exec -it NAME_OF_THE_POD -- /bin/bash
  • $ echo $NGINX_PORT
  • $ echo $NGINX_PASSWORD

Вы должны увидеть переменные из ConfigMap и Secret соответственно.

0 голосов
/ 17 января 2020

kubectl create deployment команда не имеет возможности передавать переменную среды в качестве флага для императивной команды ... возможные доступные флаги для команды создания развертывания приведены ниже ( перечисляется при автозаполнении в kubectl cli )

   $ kubectl create deployment nginx --image=nginx --
--add-dir-header               --client-certificate=          --insecure-skip-tls-verify     --log-flush-frequency=         --profile-output=              --token
--allow-missing-template-keys  --client-key                   --kubeconfig                   --logtostderr                  --request-timeout              --token=
--alsologtostderr              --client-key=                  --kubeconfig=                  --match-server-version         --request-timeout=             --user
--as                           --cluster                      --log-backtrace-at             --namespace                    --save-config                  --user=
--as=                          --cluster=                     --log-backtrace-at=            --namespace=                   --server                       --username
--as-group                     --context                      --log-dir                      --output                       --server=                      --username=
--as-group=                    --context=                     --log-dir=                     --output=                      --skip-headers                 --v
--cache-dir                    --dry-run                      --log-file                     --password                     --skip-log-headers             --v=
--cache-dir=                   --generator                    --log-file=                    --password=                    --stderrthreshold              --validate
--certificate-authority        --generator=                   --log-file-max-size            --profile                      --stderrthreshold=             --vmodule
--certificate-authority=       --image                        --log-file-max-size=           --profile=                     --template                     --vmodule=
--client-certificate           --image=                       --log-flush-frequency          --profile-output               --template=

Альтернативно kubectl run команда может использоваться для создания развертывания , который позволит вам передать флаг env для императивной команды, см. Пример ниже

 $ kubectl run nginx --image=nginx --env="TEST"="/var/tmp"
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created

Теперь для проверки правильности установки переменной env, которую вы можете подключить в POD и отобразите переменные env для проверки it

Connect

$ kubectl exec -it nginx /bin/bash

Список переменных env на модуле

root@nginx:/# env | grep -i test
TEST=/var/tmp

См. Официальный пример для c для второй части вашего вопроса ссылка

0 голосов
/ 17 января 2020

При создании модуля вы можете указать переменные среды, используя опцию --env, например.

kubectl run nginx-pod --restart Never --image=nginx --env=key1=value1,key2=value2 

Оформить заказ kubectl run документация

Однако вы не можете сделать это с kubectl create deploy . Я рекомендую вам использовать декларативный манифест.

...