Рубрики
Без рубрики

Рекомендации по настройке начальной загрузки Spring Cloud Kubernetes

В этой статье я хочу показать вам наилучший способ настройки любых свойств начальной загрузки Spring Cloud… С тегами spring, java, качество кода, kubernetes.

В этой статье я хочу показать наилучший способ настройки любых свойств Spring Cloud bootstrap в вашем приложении, что делает его наиболее гибким и перспективным способом.

Переходите к коду здесь!

Стек микросервисов

Следуя или переключаясь на более микросервисную архитектуру, большинство современных приложений Spring boot однажды начинают использовать что-то из Spring Cloud stack дополнительно из-за его функций и совместимости со стеком Spring Boot, который у него уже есть, т.е. вы берете всю экосистему .

Я описываю пример в эта статья о том, насколько аккуратно вы можете интегрировать пружину и пружинную загрузку с помощью стартеров.

Наряду с Spring Cloudstack большинство приложений начинают использовать Kubernetes в качестве службы оркестровки микросервисов, и для этого у нас есть растущий проект Spring Cloud Kubernetes .

С целью экстернализации свойств приложения существует два наиболее распространенных способа реализации этого:

  1. конфигурационная карта k8s
  2. Сервер конфигурации Spring Cloud Config server

Учитывая плюсы и минусы оба из них стоит использовать, и ни один на самом деле не лучше другого.

Определенно, стек и сложность растут вместе с этим, и, следуя подходам hello world , онлайн-разработчики скорее реализуют конфигурацию таким образом, который все еще вызывает проблемы и/или остается неясным для других разработчиков.

Одной из важнейших и наиболее важных вещей является включение/отключение конфигурации, поскольку она оказывает наибольшее влияние на вашу среду выполнения, активируя или отключая компоненты. Это частично подтверждается вопросами Stackoverflow, запрашивающими:

  • конфигурация spring не запускается : 973
  • отключение конфигурации пружины : 2748
  • и все остальные вопросы по дублированию компонентов/отсутствующим проблемам

Чтобы извлечь максимальную пользу из вашей конфигурации, я хотел бы показать некоторые рекомендации на примере конфигурации Spring Cloud Kubernetes.

Прежде чем перейти к примеру, лучше ознакомиться с основами порядка приоритета свойств приложения Spring:

Как настроить свойства начальной загрузки

Каковы требования к наилучшей конфигурации?

  1. Он всегда запускается в каждой среде k8s
  2. Это не начинается в тестах
  3. Он запускается для локального приложения и легко запускается, когда вам это нужно

Что мы знаем?

  1. начальная загрузка свойства начинаются перед приложением одним
  2. приложение в кластерном контейнере k8s извлекает данные из k8s configmap только в том случае, если оно включено заранее
  3. приложение должно знать откуда брать свойства перед загрузкой
  4. spring.cloud.kubernetes.enabled включает все подконфигурации
  5. spring.cloud.kubernetes.config.enabled позволяет извлекать конфигурационную карту
  6. kubernetes профиль существует из коробки и будет активирован всегда когда приложение запускается как модуль внутри Kubernetes

Тогда нам нужно:

  • bootstrap.yaml в каталоге ресурсов, содержащем:
spring:
  cloud:
    kubernetes:
      config:
        enabled: false
      enabled: false
  • bootstrap-kubernetes.yaml содержащий:
spring:
  cloud:
    kubernetes:
      config:
        enabled: true
      enabled: true
  • приложение.yaml или application-kubernetes.yaml содержащий:
spring:
  cloud:
    kubernetes:
      config:
        name: your-configmap-name
        namespace: ${KUBERNETES_NAMESPACE}

Переменная Env ПРОСТРАНСТВО ИМЕН KUBERNETES_NAMESPACE не может быть определено при загрузке конфигурации начальной загрузки, так как карта конфигурации k8s еще не будет извлечена. Следовательно, мы помещаем его в приложение свойства.

  • k8s service.yaml содержащий:
spec:
  containers:
    env:
    - name: "KUBERNETES_NAMESPACE"
      valueFrom:
      fieldRef:
        fieldPath: "metadata.namespace"
  • [НЕОБЯЗАТЕЛЬНО] Чтобы сделать его более прозрачным для разработчиков и сообщить всем, что kubernetes profile будет включен, я бы посоветовал явно указать этот профиль, service.yaml . Еще один аргумент здесь, что если вы уже используете SPRING_PROFILES_ACTIVE , то определенно будет понятнее, если вы добавите дополнительно профиль kubernetes , определяя список всех профилей в одном и том же месте:
spec:
  containers:
    env:
    - name: SPRING_PROFILES_ACTIVE
      value: "your-profile,kubernetes"

Выводы

С помощью этой конфигурации вы можете легко включить k8s, активировав kubernetes profile и он будет отключен при любом другом запуске.

Подсказки

  • Общий @SpringBootApplication основной класс с kubernetes профилем, который мы знаем тот

    1. Вам может понадобиться переменная env KUBERNETES_NAMESPACE
    2. Он использует контекст и пространство имен k8s из того, которое сейчас используется в вашей конфигурации (kubectl)

Оригинал: “https://dev.to/art_ptushkin/best-practices-on-spring-cloud-kubernetes-bootstrap-configuration-4n6k”