Featured image of post 메인터넌스와 노드 정지

메인터넌스와 노드 정지

메인터넌스, 노드 정지

메인터넌스와 노드 정지

스케줄링 대상에서 제외와 북귀(cordon/uncordon)

  • 쿠버네티스 노드는 두 상태를 가짐
    • SchedulingDisabled: 노드가 스케줄링 대상에서 제외 (파드 신규 생성 x), 이미 실행 중인 파드에는 영향 없음
    • SchedulingEnabled: 기본 상태
1
2
3
4
5
## 노드 중 하나를 SchedulingDisabled로 변경
$ kubectl cordon NODE_NAME

## 노드 중 하나를 SchedulingEnabled로 변경
$ kubectl uncordon NODE_NAME

노드 배출 처리로 인한 파드 축출(drain)

  • 실행 중인 파드를 축출해야 할 경우 사용
  • SchedulingDisabled 상태로 바꾼 후 각 파드에 SIGTERM 신호를 보내므로 cordon을 실행할 필요 없음
1
2
## 실행 중인 파드를 모두 축출(데몬셋 이외)
$ kubectl drain NODE_NAME --force --ignore-daemonsets
  • drain시 다음과 같은 케이스에서는 에러가 발생
    • 디플로이먼트등으로 관리되지 않는 파드 삭제(단일 파드는 파드 삭제 후 재성성이 불가하기 때문)
      • –force옵션으로 해결 가능
    • 로컬 스토리지 사용하는 파드 삭제(로컬 스토리지 데이터가 삭제되므로)
      • –delete-local-data로 해결 가능
    • 데몬셋이 관리하는 파드 삭제
      • –ignore-daemonset 옵션을 사용해 해결 가능

PodDisruptionBudget(PDB)을 사용한 안전한 축출

  • 파드 축출 시 특정 디플로이먼트하에 있는 레플리카가 동시에 정지되면 다운타임이 발생
  • 여러 노드에서 동시 배출 처리를 한 경우 해당 현상이 발생할 확률 증가
    • 노드가 배출 처리를 할 때 파드를 정지할 수 있는 최대 수를 제한하는 리소스
    • 최소 기동 개수와 최대 정지 개수를 보면서 노드상의 파드 축출
      • HPA에 의해 파드 수가 변화하는 환경에서는 백분율로 지정하는 것이 좋음
  • 동시에 여러 노드를 배출 처리하는 경우에도 효과적
  • minAvailable, minUnavailable은 둘 중 하나만 설정 가능
  • 파드에 여러 PDB가 연결되면 축출 실패
Hugo로 만듦
JimmyStack 테마 사용 중