Как указать массивы и карты в спецификации yaml службы kubernetes?

Я пытаюсь отправить свой список спецификаций kubernetes. Мой ямл выглядит так:

---
apiVersion: v1
kind: Application
metadata:
  name: my-app
spec:
  env:
    - name: ENV1
      value: http://someurl.com
    - name: ENV2
      value: val2

    - name: AN_ENV_LIST
      value:
        - val2
        - val3

Но, конечно, я получаю сообщение об ошибке:

invalid type for v1.Application.spec.env.value: got "array", expected "string"

Мой вопрос в том, возможно ли это вообще с kubernetes?

Как указать список?

И бонусный вопрос - а как насчет карт? Это возможно?

нет Нельзя, он принимает строку. если вы хотите сделать что-то подобное, просто передайте его как строку и в своем контейнере обработайте его в своем коде или с помощью внешнего инструмента, такого как yq. так что ставьте value: '[ "val2", "val3"]' и в контейнере делайте echo "${AN_ENV_LIST}" | yq

Yaser Kalali 03.04.2023 16:29
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
1
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Переменные среды имеют тип string, поэтому вы не можете передать массив в одной переменной.

Вы можете закодировать массив как строку, но приложение должно знать об этой кодировке. В качестве альтернативы можно передать несколько переменных среды, если приложение это поддерживает.

Как уже упоминалось, kubernetes поддерживает только переменные среды, которые являются строками.

Но есть способы сделать это с помощью некоторой магии загрузки Spring:

В вашем kubernetes shifter-patch.yaml:

  - name: WHITELISTED_APPS
  value: app1, app2, app3

Теперь в конфигурации весенней загрузки вашего приложения просто прочитайте whitelistedApps как список (или массив)

Карты также возможны:

В этом примере я размещаю заполнители в конфигурации Spring flyway.

Flyway.placeholders — это Map<String, String>

Моя обычная конфигурация приложения загрузки Spring будет выглядеть так:

spring:
  flyway:
    placeholders:
      appuser0: user0
      appuser1: user1

Но в моем kubernetes shifter-patch.yaml я могу внедрить их как:

  - name: SPRING_FLYWAY_PLACEHOLDERS_APPUSER0
  value: user0
  - name: SPRING_FLYWAY_PLACEHOLDERS_APPUSER1
  value: user1

Надеюсь, это будет полезно другим, использующим загрузочные приложения Kubenetes и Spring.

Другие вопросы по теме