HA클러스터의 health check

작성자 김아름 수정일 2022-10-17 15:22

#HA cluster, #이중화, #kubernetes, #쿠버네티스, #high available

들어가며

  • 안정적인 서비스를 위해 쿠버네티스에서는 고가용성 클러스터를 구축할 수 있습니다.

  • 그렇다면, 어떻게 클러스터 상태를 관리하는지 알아보겠습니다.



High Availability cluster의 Health Check

cluster health check 하는 흐름에 대해 이해해 보겠습니다.


  1. cluster의 node들은 kubelet은 node-status-update-frequency에 구성된 빈도를 기반으로 API server를 업데이트 합니다. (default 10s)

  2. master의 controller는 node-monitor-period에 구성된 빈도를 기반으로 API server에서 node 상태를 확인합니다. (default 5s)

  3. master의 controller가 node-monitor-grace-period를 통해 node의 비정상을 감지하면, controller manager를 통해 unhealthy를 표시합니다. (default 40s)

  4. controller manager는 pod-eviction-timeount 값 만큼 기다린 후, terminate 상태를 설정하여 pod를 제거하도록 API server를 업데이트 합니다. (default 5min)

  5. kube proxy는 API server에서 pod 종료를 수신합니다.

  6. kube proxy는 액세스할 수 없는 pod를 제거하고 endpoint를 업데이트 합니다.



위 흐름에 의해 health check를 수행합니다.

default값에 따르면, 액세스할 수 없는 pod를 제거하고 정상 상태로 돌아가는데 총 5분 40초가 소요됩니다.


만약 더 빠른 장애 대응을 하고자 한다면, 감지 시간을 변경할 수 있습니다.

순서는 아래와 같습니다.

  1. node status update frequecy 줄이기
  2. node monitor period, node monitor grace period 줄이기
  3. pod eviction timeout 줄이기


1. node status update frequency 줄이기

해당 작업은 모든 노드에서 진행합니다.


/var/lib/kubelet/kubeadm-flags.env 파일에서 --node-status-update-frequency=4s 값을 추가합니다.

KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=spsd.docker.io:15001/pause:3.2 --node-status-update-frequency=4s"

그 후, kubelet을 재시작 합니다.

systemctl restart kubelet


2. node monitor period, node monitor grace period 줄이기

해당 작업은 master 노드에서 진행합니다.


/etc/kubernetes/manifests/kube-controller-manager.yaml 파일을 수정합니다.

spec.containers.comand에 2개의 매개변수를 추가합니다.

- --node-monitor-period=2s    
- --node-monitor-grace-period=16s

해당 파일을 수정하면 kube-system에 있는 kube-controller-manager pod가 재 기동 하여 바로 적용됩니다.


3. pod eviction timeout 줄이기

해당 작업은 master 노드에서 진행합니다.


/etc/kubernetes/manifests/kube-apiserver.yaml 파일을 수정합니다.

spec.containers.comand에 3개의 매개변수를 추가합니다.

- --enable-admission-plugins: DefaultTolerationSeconds
- --default-not-ready-toleration-seconds: "20"
- --default-unreachable-toleration-seconds: "20"

해당 파일을 수정하면, 앞으로 생성될 pod들에 대해 적용이 됩니다.

만일 현재 구동 중인 pod들 에도 적용하려면, kubectl edit pod 로 수정해주어야 합니다.




마무리

  • HA cluater 구성 시, node down time을 설정하는 방법에 대해 알아보았습니다.

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300