Kylian 태그 관리 글쓰기 방명록
주요 개념/kubernetes (1)
2023-09-15 14:17:23
개념

- kubernetes는 워커 노드의 장애가 발생하더라도 정상적, 혹은 부분적으로 기능을 수행할 수 있도록 결함 감내(fault tolerant) 시스템으로 디자인되어 있습니다. kubernetes의 마스터 노드는 인프라의 상태를 주기적으로 워커 노드로부터 수신하며, 어떤 이유로 인해 문제가 발생하면 다시 복구하도록 동작합니다.

 

- 그러나 모든 경우의 문제를 해결하는 데는 한계가 있으며 특정 노드의 유지 보수를 위해 운영 중이던 파드의 우아한 종료(gracefully shutting down)를 위한 개입이 필요할 수 있습니다.

  • 노드가 준비되지 않았습니다.
  • 노드에 연결할 수 없습니다.
  • 디스크 부족
  • 네트워크를 사용할 수 없습니다

 

1. Cordon

- cordon 사전적 뜻: 저지선(경찰군인 등이 설치한 진입이나 진출) [비상경계선]의 의미

=> kubernetes의 클러스터 노드 중 하나가 어떠한 이유(리소스 부족, 물리적 결함 등)로 고장이 나면서, SchedulingDisabled 또는 Not Ready  상태로 표시되어 더 이상 해당 노드에 Pod가 생성되진 않지만,

기존에 있던 Pod는 running로 운영되고 있습니다.

해당 노드에 더 이상 파드가 생성되지 않도록 보호하고 문제 해결을 위해 Cordon을 진행합니다. 

 

- node describe 정보를 확인하니 NoSchedule Taint(해당 노드가 오염되어 스케쥴링 불가) 또는NodeNotSchedulable
상태가 되어 스케쥴링이 불가능한 노드가 된 것을 확인합니다.

이때, 좀 더 확실하게 고장난 노드(worker-1)가 스케쥴링이 불가능한 노드로 설정하고 문제를 파악하고자 합니다.

 

Cordon(차단) 설정

1-1 명령어

  • cordon 적용
kubectl cordon [node 이름]
  • cordon 해제
kubectl cordon [노드 이름]

- node의 상태 및 daemonset, pod의 상태 확인 => running 상태

1-2 적용확인: worker-1 노드에 cordon 적용 후 디플로이먼트 배포

kubectl create deployment nginx --image=nginx --replicas=3

=> worker-1 노드를 제외한 다른 노드에만 배포된 것을 확인

 

1-3 uncordon 적용

kubectl uncordon [노드 이름]

 


2. Drain

drain 사전적 뜻: 배수구, 물 빠짐, 배출 등의 의미로, 노드에 존재하는 모든 Pod를 제거하고, Pod를 다른 노드에 스케쥴링하도록 합니다. drain한 node는 cordon을 실행한 것과 동일하게 SchedulingDisabled 상태가 되기 때문에 신규 Pod를 스케쥴링하지 않습니다.

- drain은 기존에 운영하던 온프레미스와 public-cloud를 연결하여 하이브리드 클라우드로 운영 시 자원 낭비에 따른 서버 반납이나 커널 업그레이드와 같은 하드웨어 유지보수를 위한 중단 등으로 의도적으로 워커 노드를 축소시키고자 할 때, 축소 대상의 노드에서 운영중인 애플리케이션 Pod을 다른 노드로 모두 배출(drain)할 때 사용합니다.

Drain(배출) 설정

2-1 명령어

  • 드레인 적용
kubectl drain [노드 명] 

- 이 때 아래와 같이 오류가 뜬다. 이유는 daemonset이 아직 작동 중이라서 그렇다.

  • 노드를 내리는 작업에서 문제가 발생하는 경우 권장하는 옵션을 사용
    • --delete-local-data: local data 를 모두 삭제
    • --ignore-daemonsets: demonset 을 무시하고 모두 삭제
    • --force: 강제로 모두 삭제

* 데몬셋(daemonset)이란? 데몬셋은 파드를 생성하고 관리하는데 항상 실행되어야 할 특정 파드를 관리한다.

- ex. kube-proxy

 

  • 드레인 해제
kubectl uncordon [노드 명]

드레인을 해제하고 다른 노드의 파드를 삭제하거나 scale로 파드 수를 조정하면 해당 노드에 재배포된 것을 확인



Kylian. Designed by bskyvision.