11.5. PropertySource Reload 사용

일부 애플리케이션은 외부 속성 소스의 변경 사항을 감지하고 새 구성을 반영하도록 내부 상태를 업데이트해야 할 수 있습니다. Spring Cloud Kubernetes의 다시 로드 기능은 관련 ConfigMap 또는 Secret이 변경되면 애플리케이션을 다시 로드할 수 있습니다.

11.5.1. PropertySource Reload 활성화

Spring Cloud Kubernetes의 PropertySource 다시 로드 기능은 기본적으로 비활성화되어 있습니다.

절차

  1. faststart 프로젝트의 src/main/resources 디렉터리로 이동하여 bootstrap.yml 파일을 엽니다.
  2. 설정 속성 spring.cloud.kubernetes.reload.enabled=true 를 변경합니다.

11.5.2. PropertySource Reload의 수준

속성 spring.cloud.kubernetes.reload.strategy:에 대해 다음 수준의 재로드가 지원됩니다.

새로고침

(기본값) @ConfigurationProperties 또는 @RefreshScope 주석이 추가된 구성 빈만 다시 로드됩니다. 이 다시 로드 수준은 Spring Cloud Context의 새로 고침 기능을 활용합니다.

참고

PropertySource 다시 로드 기능은 다시 로드 전략이 새로 고침 되도록 설정된 경우 간단한 속성(즉, 컬렉션이 아님)에만 사용할 수 있습니다. 컬렉션에서 지원하는 속성은 런타임 시 변경할 수 없습니다.

restart_context
전체 Spring ApplicationContext 가 정상적으로 다시 시작됩니다. 빈은 새 구성으로 다시 생성됩니다.
shutdown
Spring ApplicationContext 가 종료되어 컨테이너를 다시 시작합니다. 이 수준을 사용하는 경우 모든 비daemon 스레드의 라이프사이클이 ApplicationContext에 바인딩되고 복제 컨트롤러 또는 복제본 세트가 Pod를 재시작하도록 구성되어 있는지 확인합니다.

11.5.3. PropertySource Reload의 예

다음 예제에서는 다시 로드 기능이 활성화된 경우 어떤 일이 발생하는지 설명합니다.

절차

  1. 다시 로드 기능이 기본 설정(새로 고침 모드)으로 활성화되어 있다고 가정합니다. 구성 맵이 변경되면 다음 8080이 새로 고쳐집니다.

    @Configuration
    @ConfigurationProperties(prefix = "bean")
    public class MyConfig {
    
        private String message = "a message that can be changed live";
    
        // getter and setters
    
    }
  2. 변경 사항을 확인하려면 다음과 같이 메시지를 주기적으로 출력하는 다른 8080을 만듭니다.

    @Component
    public class MyBean {
    
        @Autowired
        private MyConfig config;
    
        @Scheduled(fixedDelay = 5000)
        public void hello() {
            System.out.println("The message is: " + config.getMessage());
        }
    }
  3. 다음과 같이 ConfigMap을 사용하여 애플리케이션에서 인쇄한 메시지를 변경할 수 있습니다.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: reload-example
    data:
      application.properties: |-
        bean.message=Hello World!

    Pod와 연결된 구성 맵에서 metrics.message 라는 속성의 변경 사항은 프로그램 출력에 반영됩니다.

11.5.4. PropertySource 다시 로드 운영 모드

다시 로드 기능은 다음 두 가지 작동 모드를 지원합니다.

event
(기본값) Kubernetes API(웹 소켓)를 사용하여 ConfigMap 또는 시크릿의 변경 사항을 감시합니다. 모든 이벤트는 구성을 다시 확인하고 변경 시 다시 로드됩니다. 구성 맵 변경 사항을 수신하려면 서비스 계정의 view 역할이 필요합니다. 상위 수준 역할(예:). 보안에는 편집해야 합니다(기본적으로 시크릿은 모니터링되지 않음).
폴링
구성 맵 및 시크릿에서 정기적으로 구성을 다시 생성하여 변경되었는지 확인합니다. 폴링 기간은 spring.cloud.kubernetes.reload.period 속성을 사용하여 구성할 수 있으며 기본값은 15초입니다. 모니터링된 속성 소스와 동일한 역할이 필요합니다. 예를 들어, 파일 마운트된 시크릿 소스에서 폴링을 사용하면 특정 권한이 필요하지 않습니다.

11.5.5. PropertySource 구성 속성 다시 로드

다음 속성을 사용하여 다시 로드 기능을 구성할 수 있습니다.

spring.cloud.kubernetes.reload.enabled
속성 소스 및 구성 다시 로드를 모니터링할 수 있습니다. type은 부울 이며 기본값은 false 입니다.
spring.cloud.kubernetes.reload.monitoring-config-maps
구성 맵의 변경 사항을 모니터링할 수 있습니다. type은 부울 이며 기본값은 true 입니다.
spring.cloud.kubernetes.reload.monitoring-secrets
보안 변경 사항을 모니터링할 수 있습니다. type은 부울 이며 기본값은 false 입니다.
spring.cloud.kubernetes.reload.strategy
다시 로드를 실행할 때 사용할 전략입니다(새로 고침,restart_context,shutdown). type은 Enum 이고 기본값은 refresh 입니다.
spring.cloud.kubernetes.reload.mode
속성 소스의 변경 사항을 청취하는 방법(이벤트,폴링)을 지정합니다. type은 Enum 이고 기본값은 event 입니다.
spring.cloud.kubernetes.reload.period
폴링 전략을 사용할 때 변경 사항을 확인하는 데 사용되는 시간(밀리초)입니다. type은 Long 이고 기본값은 15000 입니다.

다음 사항에 유의하십시오.

  • spring.cloud.kubernetes.reload.* 속성은 ConfigMaps 또는 Secrets에서 사용해서는 안 됩니다. 런타임에 이러한 속성을 변경하면 예기치 않은 결과가 발생할 수 있습니다.
  • 속성 또는 전체 구성 맵을 삭제해도 새로 고침 수준을 사용할 때 빈의 원래 상태가 복원되지 않습니다.