Cloud/Kubernetes

[K3S] 쿠버네티스 마스터 노드 부하 줄이기

개요

오라클 클라우드 프리티어에 K3S를 설치하여 사용하던 중 마스터 노드가 느려지거나 멈추는 현상이 생겼다. 아무것도 건들지 않았는데 자연적으로 멈출때도 있었고, 무언가 컴포넌트를 추가했을 때에 느려지거나 멈추는 현상이 확실히 보였다. 증상은 아래와 같다.

  • ssh 접속 지연 및 멈춤
  • kuber-api 응답 지연 및 멈춤
  • kubernetes에서 운영중인 서비스 응답 멈춤

문제점

메모리 사용률

오라클 클라우드 마스터 노드 메모리 사용률

평소 85%정도의 메모리를 사용중인데, 추가적으로 컴포넌트를 사용하게 되면 메모리 점유율이 증가하다가 멈추는 현상을 볼 수 있다.

위 사진은 추가 컴포넌트를 설치하여 메모리 점유율이 증가하여 멈춘 그래프이지만, 가만히 운영중에도 메모리 점유율이 천천히 증가하다 멈추는 경우도 있었다.

컨트롤 플레인 컴포넌트

마스터 노드에서 실행중인 컨트롤 플레인 컴포넌트들

마스터 노드가 멈추게되면 pod으로 실행중인 컨트롤 플레인 컴포넌트도 영향을 받기 때문에, 워커 노드가 살아있어도 운영중인 서비스가 멈추게 되는 문제가 발생했다.

local-path-provisioner 컴포넌트가 멈추게 되면서, 웹 사이트는 정상 작동중이지만 데이터베이스 저장소를 사용하지 못하면서 서비스가 멈추는 것 같다.

해결법

마스터 노드 taint

kubectl taint node k3s-master node-role.kubernetes.io=master:NoSchedule

taint 적용 확인

kubectl describe node k3s-master | grep -i taint

마스터 노드 drain

kubectl drain k3s-master --ignore-daemonsets --delete-local-data
kubectl uncordon k3s-master

drain 적용 확인

kubectl get pod -o wide -n kube-system

Pod이 정상적으로 시작되지 않을 때

kubectl get pod -n kube-system
kubectl delete pod -n kube-system [Pod_Name]

 

deployments로 pods이 배포되기 때문에 pod을 종료시켜 재시작되는것을 확인합니다.

마치며

오라클 클라우드 마스터 노드 메모리 사용률

결론적으로 메모리 점유율이 안정되었다.

그리고 서비스에 필요한 컴포넌트를 워커 노드로 옮겨놓았기 때문에, 마스터 노드가 죽어도 서비스에 접속이 가능하게 되었다.