9.5. PropertySource Reload 사용
일부 애플리케이션은 외부 속성 소스의 변경 사항을 감지하고 새 구성을 반영하도록 내부 상태를 업데이트해야 할 수 있습니다. Spring Cloud Kubernetes의 다시 로드 기능은 관련 ConfigMap 또는 Secret이 변경되면 애플리케이션을 다시 로드할 수 있습니다.
9.5.1. PropertySource Reload 활성화
Spring Cloud Kubernetes의 PropertySource 다시 로드
기능은 기본적으로 비활성화되어 있습니다.
프로세스
-
faststart 프로젝트의
src/main/resources
디렉터리로 이동하여bootstrap.yml
파일을 엽니다. -
설정 속성
spring.cloud.kubernetes.reload.enabled=true
를 변경합니다.
9.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를 재시작하도록 구성되어 있는지 확인합니다.
9.5.3. PropertySource Reload의 예
다음 예제에서는 다시 로드 기능이 활성화된 경우 어떤 일이 발생하는지 설명합니다.
프로세스
다시 로드 기능이 기본 설정(새로 고침 모드)으로 활성화되어 있다고 가정합니다. 구성 맵이 변경되면 다음 8080이 새로 고쳐집니다.
@Configuration @ConfigurationProperties(prefix = "bean") public class MyConfig { private String message = "a message that can be changed live"; // getter and setters }
변경 사항을 확인하려면 다음과 같이 메시지를 주기적으로 출력하는 다른 8080을 만듭니다.
@Component public class MyBean { @Autowired private MyConfig config; @Scheduled(fixedDelay = 5000) public void hello() { System.out.println("The message is: " + config.getMessage()); } }
다음과 같이 ConfigMap을 사용하여 애플리케이션에서 인쇄한 메시지를 변경할 수 있습니다.
apiVersion: v1 kind: ConfigMap metadata: name: reload-example data: application.properties: |- bean.message=Hello World!
Pod와 연결된
구성 맵에서 metrics.message
라는 속성의 변경 사항은 프로그램 출력에 반영됩니다.
9.5.4. PropertySource 다시 로드 운영 모드
다시 로드 기능은 다음 두 가지 작동 모드를 지원합니다.
- event
-
(기본값) Kubernetes API(웹 소켓)를 사용하여 ConfigMap 또는 시크릿의 변경 사항을 감시합니다. 모든 이벤트는 구성을 다시 확인하고 변경 시 다시 로드됩니다. 구성 맵 변경 사항을 수신하려면 서비스 계정의
view
역할이 필요합니다. 상위 수준 역할(예:). 보안에는편집
해야 합니다(기본적으로 시크릿은 모니터링되지 않음). - 폴링
-
구성 맵 및 시크릿에서 정기적으로 구성을 다시 생성하여 변경되었는지 확인합니다. 폴링 기간은
spring.cloud.kubernetes.reload.period
속성을 사용하여 구성할 수 있으며 기본값은 15초입니다. 모니터링된 속성 소스와 동일한 역할이 필요합니다. 예를 들어, 파일 마운트된 시크릿 소스에서 폴링을 사용하면 특정 권한이 필요하지 않습니다.
9.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에서 사용해서는 안 됩니다. 런타임에 이러한 속성을 변경하면 예기치 않은 결과가 발생할 수 있습니다. -
속성 또는 전체 구성 맵을 삭제해도
새로 고침
수준을 사용할 때 빈의 원래 상태가 복원되지 않습니다.