전공영역 공부 기록

pod 안전성 설정 - Readiness gate

악분 2024. 12. 24. 00:00
반응형

 

 

1. 개요

이 글은 pod Readiness Gate가 무엇이고 왜 필요한지 설명합니다.

 

 

2. Readiness gate란

Readiness gate는 pod conidtion 중 한개입니다. 디폴트로 비활성화 되어 있고 활성화하면 true, false속성을 갖습니다.

 

3. Readiness gate를 왜 사용하는걸까?

Readiness gate는 인프라 레이어에서 pod를 안전하게 호출하기 위한 기능입니다. 인프라 레이어와 안전한 호출 키워드가 핵심입니다.

 

인프라 레이어는 쿠버네티스 외부에 있는 환경입니다. 그리고 쿠버네티스와 관계가 높은 외부 리소스는 로드밸런서입니다. pod를 외부에서 호출하려면 노드포트를 제외한 방법은 로드밸런서를 통해서 호출하는 방법밖에 없습니다.

 

로드밸런서는 쿠버네티스가 제어하지 못하는 환경입니다. 따라서 Pod 개수가 적고 Rolling Update 전략을 사용할 때, 로드밸런서 호출 오류가 잠시 발생할 수 있습니다.

 

아래 그림은 AWS ALB(애플리케이션 로드밸런서)입니다. pod 개수가 1개이고 Rolling update를 한 직후를 캡처했습니다. 기존 pod는 ALB에 제거된 상태(Draining)이고 새로운 pod는 ALB에 등록되고 있는 상태(Initial)입니다.

 

제거된 상태화 등록상태는 모두 트래픽을 받지 못합니다. 따라서 Rolling update를 한 직후에 ALB를 호출하면 ALB는 연결된 pod가 없기 때문에 5xx HTTP 상태코드를 리턴합니다.

 

Readiness gate는 pod개수가 적고 Rolling udpate로 인해 로드밸런서 호출 오류를 해결합니다. 새로운 pod가 먼저 로드밸런서에 등록됩니다. 등록상태가 정상이 된 다음에야 기존 pod가 로드밸런서에 제거됩니다.

 

4. Readiness gate 활성화 방법

Readiness gate는 로드밸런서 컨트롤러에 따라 활성화 방법이 다릅니다. AWS 로드 밸런서 컨트롤러(ALB controller)는 namespace에 label을 추가하여 Readiness gate를 활성화합니다.

kubectl label namespace readiness elbv2.k8s.aws/pod-readiness-gate-inject=enabled

 

5. 실습

실습 과정은 저의 github과 유투브로 대체합니다.

 

6. 참고자료

반응형