Kubernetes Pods - Внедрить переменную среды из узла узла - PullRequest
0 голосов
/ 18 марта 2020

У меня есть контейнер со следующим параметром c:

containers:
      - name: test-container
        image: REDACTED
        env:
        - name: DISPLAY
          value: ":10.0"   <---------------------
        - name: NODE_ENV
          value: "production"
        - name: ENDPOINT
          value: REDACTED
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: x11
          mountPath: /tmp/.X11-unix
      volumes:
      - name: x11
        hostPath:
          path: /tmp/.X11-unix

sidenote: Это позволяет мне рендерить компоненты на узле узла, но выполнять вычисления внутри моего контейнера.

Прямо сейчас у меня DISPLAY жестко закодирован в ": 10.0", но я хочу сделать что-то вроде:

env:
        - name: DISPLAY
          value: ":$HOST_DISPLAY"

, который будет монтировать переменную DISPLAY хост-узла (вместо жесткого кодирования и угадывания, что так и будет), так что если у узла есть ": 0" или любая другая установленная переменная, он будет динамически пересылать / вставлять его в контейнер.

Любой способ выполнить sh это? Если это поможет, я могу использовать ansible оператор

Изменить для дальнейшего объяснения:

Представьте себе модуль, который был простым http-сервером, который, когда вы нажимали на него с помощью браузера, показывал вам работающий система узла, на котором он запущен. Допустим, у узла была переменная среды OPERATING_SYSTEM. Узел A имеет OPERATING_SYSTEM = Windows Узел B имеет OPERATING_SYSTEM = Linux. Как я мог настроить этот модуль для отображения операционной системы узла. НЕ СИСТЕМА УПРАВЛЕНИЯ КОНТЕЙНЕРОМ

Другой пример:

Представьте себе модуль, представляющий собой простой http-сервер, который, когда вы запускаете его в браузере, возвращает вам идентификатор узла, на котором он работает. Допустим, узел 1 имеет переменную среды с именем NODE_ID = 123, а узел 2 имеет переменную среды с именем NODE_ID = 456. Когда какой-либо модуль запланирован на одном из этих двух произвольных узлов, он может получить доступ к этим переменным среды NODE, чтобы правильно отобразить, на каком узле он работает

Я почти хочу это сделать, кроме как с помощью узла.f.f: https://v1-15.docs.kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Существует несколько способов передачи переменных окружения.

  1. Определить переменные env в контейнере, например, как в это сделать c.
  2. Определить в конфигурации Pod / Deployment, например здесь .
  3. Из секретов этого примера .

Для передачи новых переменных среды в контейнер вам нужно использовать ConfigMap или Secret.

К сожалению, то, что вы хотите достичь, невозможно получить в чистом Куберне из-за Kubernetes concepts. Согласно do c:

Pod инкапсулирует контейнер приложения (или, в некоторых случаях, несколько контейнеров), ресурсы хранения, уникальный IP-адрес сети и параметры, которые определить, как должен работать контейнер (ы). Модуль представляет собой единицу развертывания: один экземпляр приложения в Kubernetes, который может состоять из одного контейнера или небольшого количества контейнеров, которые тесно связаны между собой и совместно используют ресурсы.

Если у вас будет kubectl describe <pod-name> у вас будет только имя хоста, потому что это все, что нужно Kubernetes. Kubernetes должен запускать все приложения для развертывания, не важно, на каком узле (в качестве единицы измерения вы указываете nodeSelector). Вот как был разработан Kubernetes. Для получения более подробной информации вы должны повторить этот документ .

Вы можете добавить tags с ansible, python, et c к вопросу. Возможно, если бы вы использовали некоторые скрипты / библиотеки, это можно было бы сделать, но вы не добьетесь этого, используя pure Kubernetes.

0 голосов
/ 18 марта 2020

Вы можете использовать ConfigMap. создайте ключ = значение в конфигурации карты и ссылку в вашем env

https://medium.com/google-cloud/kubernetes-configmaps-and-secrets-68d061f7ab5b

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...