как передать переменную среды в kubectl развертывания? - PullRequest
0 голосов
/ 06 мая 2019

Я настраиваю настройку kubernetes для веб-приложения django.

Я передаю переменную среды при создании развертывания, как показано ниже

kubectl create -f deployment.yml -l key1=value1 

Я получаю ошибку, как показано ниже

error: no objects passed to create

Может успешно создать развертывание, если я удаляю переменную env -l key1 = value1 при создании развертывания.

deploy.yaml, как показано ниже

#Deployment
apiVersion: extensions/v1beta1
kind: Deployment
metadata: 
 labels: 
   service: sigma-service
 name: $key1

Что будетпричина возникновения вышеуказанной ошибки при создании развертывания?

Ответы [ 4 ]

2 голосов
/ 06 мая 2019

Я использовал envsubst (https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html) для этого. Создайте deployment.yaml

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

Тогда:

export NAME=my-test-nginx
envsubst < deployment.yaml | kubectl apply -f -

Не уверен, какую ОС вы используете для этого. В macOS envsubst устанавливается как:

brew install gettext
brew link --force gettext 
0 голосов
/ 06 мая 2019

Это неправильный способ использования развертывания, вы не можете предоставить половину деталей в yaml и половину в командах kubectl.Если вы хотите передать переменные окружения в своем развертывании, вы должны добавить эти детали в deployment spec.template.spec:

. Вы должны добавить следующий блок в ваше развертывание. Yaml

spec:
  containers:
  - env:
    - name: var1
      value: val1

Это экспортируетПеременные окружения внутри модуля.

Другой способ экспортировать переменную окружения - использовать kubectl run (не рекомендуется), так как это очень скоро будет объявлено устаревшим.Вы можете использовать следующую команду:

 kubectl run nginx --image=nginx --restart=Always --replicas=1 --env=var1=val1

Приведенная выше команда создаст развертывание nginx с репликой 1 и переменной среды var1=val1

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

Выполните следующие шаги

create test-deploy.yaml

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

с помощью команды sed вы можете обновить имя развертывания во время развертывания

sed -e 's|MYAPP|my-nginx|g' test-deploy.yaml | kubectl apply -f -
0 голосов
/ 06 мая 2019

Вы не можете передавать переменные в "kubectl create -f".YAML файлы должны быть полными манифестами без переменных.Также вы не можете использовать флаг "-l" для "kubectl create -f".

Если вы хотите передать переменные окружения в pod, вы должны сделать так:

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

Подробнее здесь: https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/

...