프록시 디스커버리 캐시 구성
프록시 디스커버리 캐시 구성 (Configuring Proxy Discovery Cache)
Linkerd 프록시는 디스커버리 결과, 요청, 연결 등의 상태를 메모리에 유지하고 캐시해 더 효율적으로 트래픽을 처리해요. 이 캐시의 타임아웃을 구성하는 방법을 알아봐요.
본문
Linkerd 프록시는 디스커버리 결과, 요청, 연결 같은 인메모리 상태를 유지해요. 이 상태는 프록시가 트래픽을 더 효율적으로 처리할 수 있도록 캐시돼요. 캐시된 디스커버리 결과는 컨트롤 플레인 장애 상황에서도 복원력을 높여줘요.
CPU와 메모리 사용량을 낮게 유지하기 위해, 캐시된 항목은 일정 시간 사용되지 않으면 버려져요. 항목이 타임아웃 내에 참조되지 않으면 퇴출(evict)되고, 참조되면 타이머가 초기화돼요.
이 타임아웃은 다음 두 가지 구성 값으로 관리돼요.
proxy.outboundDiscoveryCacheUnusedTimeout: 캐시된 서비스 디스커버리 결과, 연결, 클라이언트에 대한 퇴출 타임아웃. 기본값 5s.proxy.inboundDiscoveryCacheUnusedTimeout: 캐시된 정책 디스커버리 결과에 대한 퇴출 타임아웃. 기본값 90s.
이 값들은 Helm 또는 CLI로 설치/업그레이드 시 전역적으로 구성해 모든 데이터 플레인에 적용할 수 있고, 네임스페이스나 워크로드 레벨의 어노테이션으로 특정 네임스페이스나 특정 워크로드에만 적용할 수도 있어요.
Helm으로 구성하기
Helm으로 Linkerd를 설치/업그레이드할 때 proxy.outboundDiscoveryCacheUnusedTimeout와 proxy.inboundDiscoveryCacheUnusedTimeout 값을 사용할 수 있어요. 예를 들어:
helm upgrade linkerd-control-plane \
--set proxy.outboundDiscoveryCacheUnusedTimeout=60s \
--set proxy.inboundDiscoveryCacheUnusedTimeout=120s \
linkerd/linkerd-control-plane
Linkerd CLI로 구성하기
다른 Helm 값과 마찬가지로 --set 플래그로도 사용할 수 있어요.
linkerd upgrade \
--set proxy.outboundDiscoveryCacheUnusedTimeout=60s \
--set proxy.inboundDiscoveryCacheUnusedTimeout=120s \
| kubectl apply -f -
어노테이션으로 구성하기
네임스페이스나 pod 템플릿 레벨에서 config.linkerd.io/proxy-outbound-discovery-cache-unused-timeout와 config.linkerd.io/proxy-inbound-discovery-cache-unused-timeout 어노테이션을 사용할 수도 있어요.
kind: Deployment
apiVersion: apps/v1
metadata:
name: my-deployment
# ...
spec:
template:
metadata:
annotations:
config.linkerd.io/proxy-outbound-discovery-cache-unused-timeout: "60s"
config.linkerd.io/proxy-inbound-discovery-cache-unused-timeout: "120s"
# ...
이 값들은 워크로드를 주입(inject)하기 전에 존재해야 한다는 점을 주의하세요. 이미 존재하는 워크로드에 적용하려면 해당 워크로드를 롤아웃해야 해요.
타임아웃을 바꿔야 할 때
압도다수 경우 기본값이면 충분해요. 느린 클라이언트(2개 이상의 레플리카에서 초당 5 RPS 이하)를 사용할 때, 컨트롤 플레인이 내려가자마자 클라이언트가 예상치 못한 연결 종료 오류를 겪는다면 더 큰 값으로 실험해 보는 것을 고려하세요. 디스커버리 결과에 대한 더 높은 캐시 유휴 타임아웃은 이런 문제를 완화하는 데 도움이 될 수 있어요.