В этой статье я хочу показать наилучший способ настройки любых свойств Spring Cloud bootstrap в вашем приложении, что делает его наиболее гибким и перспективным способом.
Переходите к коду здесь!
Стек микросервисов
Следуя или переключаясь на более микросервисную архитектуру, большинство современных приложений Spring boot однажды начинают использовать что-то из Spring Cloud stack дополнительно из-за его функций и совместимости со стеком Spring Boot, который у него уже есть, т.е. вы берете всю экосистему .
Я описываю пример в эта статья о том, насколько аккуратно вы можете интегрировать пружину и пружинную загрузку с помощью стартеров.
Наряду с Spring Cloudstack большинство приложений начинают использовать Kubernetes в качестве службы оркестровки микросервисов, и для этого у нас есть растущий проект Spring Cloud Kubernetes .
С целью экстернализации свойств приложения существует два наиболее распространенных способа реализации этого:
- конфигурационная карта k8s
- Сервер конфигурации Spring Cloud Config server
Учитывая плюсы и минусы оба из них стоит использовать, и ни один на самом деле не лучше другого.
Определенно, стек и сложность растут вместе с этим, и, следуя подходам hello world , онлайн-разработчики скорее реализуют конфигурацию таким образом, который все еще вызывает проблемы и/или остается неясным для других разработчиков.
Одной из важнейших и наиболее важных вещей является включение/отключение конфигурации, поскольку она оказывает наибольшее влияние на вашу среду выполнения, активируя или отключая компоненты. Это частично подтверждается вопросами Stackoverflow, запрашивающими:
- конфигурация spring не запускается : 973
- отключение конфигурации пружины : 2748
- и все остальные вопросы по дублированию компонентов/отсутствующим проблемам
Чтобы извлечь максимальную пользу из вашей конфигурации, я хотел бы показать некоторые рекомендации на примере конфигурации Spring Cloud Kubernetes.
Прежде чем перейти к примеру, лучше ознакомиться с основами порядка приоритета свойств приложения Spring:
- свойства приложения https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
- свойства начальной загрузки свойства начальной загрузки
Как настроить свойства начальной загрузки
Каковы требования к наилучшей конфигурации?
- Он всегда запускается в каждой среде k8s
- Это не начинается в тестах
- Он запускается для локального приложения и легко запускается, когда вам это нужно
Что мы знаем?
начальная загрузка
свойства начинаются передприложением
одним- приложение в кластерном контейнере k8s извлекает данные из k8s configmap только в том случае, если оно включено заранее
- приложение должно знать откуда брать свойства перед загрузкой
spring.cloud.kubernetes.enabled
включает все подконфигурацииspring.cloud.kubernetes.config.enabled
позволяет извлекать конфигурационную карту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
профилем, который мы знаем тот- Вам может понадобиться переменная env
KUBERNETES_NAMESPACE
- Он использует контекст и пространство имен k8s из того, которое сейчас используется в вашей конфигурации (kubectl)
- Вам может понадобиться переменная env
Оригинал: “https://dev.to/art_ptushkin/best-practices-on-spring-cloud-kubernetes-bootstrap-configuration-4n6k”