tech/k8s 2

[k8s] 서비스를 통한 트래픽 전달 과정

서비스는 여러 파드들에 트래픽을 로드밸런싱해주는 역할을 한다. 부족하지만 이 과정에 대해 이해한 것들을 정리해 보려 한다 서비스의 IP,Port로 보낸 트래픽이 Pod의 Ip,Port 로 로드밸런싱 되는 상세 과정 k8s에서 서비스를 생성하고 pod를 매핑시키게 되면 서비스의 IP,Port가 생성된다. 이렇게 생성된 서비스의 IP와 Port로 향하는 트래픽은 패킷이 노드를 떠날때 노드마다 설치된 kube-proxy 에 의해서 매핑된 파드중 하나의 IP,Port로 랜덤하게 전달된다. 정확하게는 패킷이 노드를 떠날때 커널에서 kube-proxy에 의해 설정된 iptables 규칙을 참고하여 도착지의 Ip,Port 가 서비스의 Ip,Port쌍중에 하나인지를 확인한 후, 맞다면 그에 매핑된 파드의 Ip,Port..

tech/k8s 2024.03.02

[k8s] 무중단 배포를 위한 설정들

deployment 를 통한 배포시 타이밍적으로 "API 요청을 받을 수 없는 상태의 pod에 API 요청이 가는" 상황이 일시적으로 발생하는것으로 확인되었다. 원인은 "서비스에서 pod를 제외한 후 pod를 terminating 시키는 것이 아니라, pod를 죽인 후 service에서 제외시키는" 것 때문이다. 이 문제를 k8s의 의도한 바를 토대로 해결하기 위해서는, 어플리케이션에서 graceful shutdown 구현이 필요하다. 사실 정확하게는 graceful shutdown 을 구현한다해도 무조건적으로 service가 어플리케이션 트래픽을 끊는 시간보다 늦게 종료처리될것이라는 보장을 어떻게 하는지에 대해선 정확한 이해를 하지 못했다. 쉽게 해결하는 방법은 pod 를 terminating 시키는 ..

tech/k8s 2024.01.02