В этой статье я хочу показать наилучший способ настройки любых свойств 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"
- [НЕОБЯЗАТЕЛЬНО] Чтобы сделать его более прозрачным для разработчиков и сообщить всем, что
kubernetesprofile будет включен, я бы посоветовал явно указать этот профиль,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”