Переменные среды объекта развертывания Kubernetes отсутствуют в контейнере

#kubernetes #environment-variables

#kubernetes #переменные среды

Вопрос:

В настоящее время я изучаю Kubernetes, и я столкнулся с чем-то вроде стены. Я пытаюсь передать переменные среды из моего определения файла YAML в мой контейнер. Но переменные, похоже, не присутствуют после этого. kubectl exec <pod name> -- printenv дает мне список переменных среды. Но те, которые я определил в моем файле YAML, отсутствуют.

Я определил переменные среды в своем развертывании, как показано ниже:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-boot
  labels:
    app: hello-world-boot
spec:
  selector:
    matchLabels:
      app: hello-world-boot
  template:
    metadata:
      labels:
        app: hello-world-boot
  containers:
    - name: hello-world-boot
      image: lightmaze/hello-world-spring:latest
      env:
        - name: HELLO
          value: "Hello there"
        - name: WORLD
          value: "to the entire world"
      resources:
        limits:
          memory: "128Mi"
          cpu: "500m"
      ports:
        - containerPort: 8080
    selector:
    app: hello-world-boot
  

Надеюсь, кто-нибудь сможет увидеть, где я потерпел неудачу в YAML 🙂

Ответ №1:

Если я исправлю ошибки в вашей Deployment конфигурации, чтобы она выглядела так:

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-world-boot
  labels:
    app: hello-world-boot
spec:
  selector:
    matchLabels:
      app: hello-world-boot
  template:
    metadata:
      labels:
        app: hello-world-boot
    spec:
      containers:
        - name: hello-world-boot
          image: lightmaze/hello-world-spring:latest
          env:
            - name: HELLO
              value: "Hello there"
            - name: WORLD
              value: "to the entire world"
          resources:
            limits:
              memory: "128Mi"
              cpu: "500m"
          ports:
            - containerPort: 8080
  

И разверните его в моем локальном minikube экземпляре:

 $ kubectl apply -f pod.yml
  

Тогда, похоже, все работает так, как вы задумали:

 $ kubectl exec -it hello-world-boot-7568c4d7b5-ltbbr -- printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/java-1.8-openjdk/jre/bin:/usr/lib/jvm/java-1.8-openjdk/bin
HOSTNAME=hello-world-boot-7568c4d7b5-ltbbr
TERM=xterm
HELLO=Hello there
WORLD=to the entire world
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
LANG=C.UTF-8
JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
JAVA_VERSION=8u212
JAVA_ALPINE_VERSION=8.212.04-r0
HOME=/home/spring
  

Если вы посмотрите на приведенный выше вывод, вы можете увидеть как HELLO WORLD переменные среды и, которые вы определили в своем Deployment .

Комментарии:

1. Спасибо, Ларски. Вы указали, что вам нужно было исправить конфигурацию развертывания, что заставило меня задуматься, почему я не получил никаких ошибок по этому поводу, и оказалось, что я забыл настроить сценарий, который запускал все развертывание, и вместо этого создавал развертывание с помощью команд CLI. Очень глупая ошибка с моей стороны…… Теперь это работает, спасибо вам, ларски, за то, что указали мне правильный путь! : D