Link Search Menu Expand Document

쿠버네티스 노드 구성 및 관리 개요

경계선(cordon)과 드레인(drain)

  • 문제가 생길 것으로 예상되거나 유지보수가 필요한 노드에 사용

경계선(cordon)

쿠버네티스 노드 구성 및 관리 - 02 경계선

  • 경계선이 설정된 노드에는 파드가 배포되지 않음

    드레인(drain)

쿠버네티스 노드 구성 및 관리 - 03 드레인

  • 유지보수를 목적으로 노드 내의 파드들을 다른 노드로 옮김
  • 파드들을 모두 옮긴 이후 경계선이 설정됨

    노드이름(nodeName)

쿠버네티스 노드 구성 및 관리 - 04 노드이름

  • 파드가 특정 노드이름을 가진 노드에 배포됨

    노드 레이블(label)

쿠버네티스 노드 구성 및 관리 - 05 노드 레이블

  • 노드이름을 사용하는 것보다 효과적인 노드 관리가 가능
  • 레이블 삽입: k label node nodeName key=value
  • 레이블 삭제: k label node nodeName key-
  • keyvalue를 함께 적는 것이 명료

노드셀렉터(nodeSelector)

쿠버네티스 노드 구성 및 관리 - 06 노드셀렉터

쿠버네티스 노드 구성 및 관리 - 07 노드셀렉터

  • 노드셀렉터를 통하여 노드 레이블을 지정하여 파드 배포 가능

노드 어피니티(affinity) 그리고 안티 어피니티

노드 어피니티 조건

쿠버네티스 노드 구성 및 관리 - 08 노드 어피니티

  • requiredDuringSchedulingIgnoredDuringExecution: 파드가 노드에 배포되도록 규칙을 만족해야 함
  • requiredDuringSchedulingIgnoredDuringExecution: 규칙을 만족하는 노드에 배포되도록 스케줄러가 시도하지만 보증하지는 않음
  • 아래 2가지 배포 규칙은 현재 지원되지 않음
    • requiredDuringSchedulingRequiredDuringExecution의 경우 노드 어피니티 요구 사항을 충족하지 않는 노드에서 파드를 제거

현재 노드 상태

쿠버네티스 노드 구성 및 관리 - 05 노드 레이블

nodeAffinity.yaml

쿠버네티스 노드 구성 및 관리 - 09 노드 어피니티

  • keyinmemory이고 valueredis인 노드
  • 조건이 하나이기 때문에 노드셀렉터와 똑같이 동작

nodeAffinity-preferred.yaml

쿠버네티스 노드 구성 및 관리 - 10 노드 어피니티

  • weight가 클수록 가중치가 높아짐
    • keygpupool이고 valuesnvidia인 레이블은 필수
    • keyacclerator이고 valuestesla-a100인 레이블을 선호

anti-nodeAffinity.yaml

쿠버네티스 노드 구성 및 관리 - 11 안티 어피니티

  • operatorNotIn일 경우에는 keyvalues 조합이 맞지 않는 경우를 선호함

테인트(Taints)와 톨러레이션(Tolerations)

  • 테인트(Taints): 특정 노드에 접근 방지
  • 톨러레이션(Tolerations): 테인트에 의한 접근 방지를 해제

마스터 노드에 걸려 있는 테인트와 톨러레이션

쿠버네티스 노드 구성 및 관리 - 12 테인트와 톨러레이션

테인트와 톨러레이션 4가지 조건

  1. Effect
    • NoSchedule: 가장 기본적인 설정. 노드에 테인트가 설정되어 있지 않은 경우 파드가 노드에 스케줄되지 않음. 이 경우 톨러레이션을 통한 배포만 가능함.
    • PreferNoSchedule: NoSchedule과 유사하지만 스케줄러에서 더 이상 할당할 수 있는 노드가 없는 경우 테인트 설정을 무시하고 스케줄함
    • NoExecute: NoSchedule에 현재 할당된 파드에도 바로 적용되도록 스케줄을 다시 조정하는 기능 추가. 즉 톨러레이션이 없는 파드는 모두 노드에서 제거함
  2. Key: 사용자가 지정하는 기준 대상 키
  3. Value: 사용자가 지정한 키에 대한 값
  4. Operator: 키와 값에 대한 연산자 (ExistsEqual) 기본 값은 Equal

테인트와 톨러레이션에 의한 파드 할당 조건

쿠버네티스 노드 구성 및 관리 - 13 테인트와 톨러레이션

daeomonset-w-tolerations.yaml

쿠버네티스 노드 구성 및 관리 - 14 테인트와 톨러레이션

  • 위와 같이 톨러레이션을 적용하여 마스터 노드에도 배포 가능

DB를 보호하라!

쿠버네티스 노드 구성 및 관리 - 15 테인트와 톨러레이션

  • 인메모리 DB인 redis가 배포된 워커 노드 #3에 테인트를 설정하여 보호

DB에도 배포하기

쿠버네티스 노드 구성 및 관리 - 16 테인트와 톨러레이션

  • 톨러레이션을 설정하여 DB 워커 노드에도 배포할 수 있음

deployment-w-tolerations.yaml

쿠버네티스 노드 구성 및 관리 - 17 테인트와 톨러레이션

  • 그러나 이러한 코드만을 적용하면 DB 워커 노드 뿐만 아니라 다른 노드에도 배포됨
  • DB 워커 노드에만 배포하기 위해서는 추가적인 조치가 필요

테인트와 톨러레이션에 대한 오해 풀기

쿠버네티스 노드 구성 및 관리 - 18 테인트와 톨러레이션

  • 톨러레이션은 테인트에 의한 보호를 해제하는 역할
  • DB 워커 노드에만 배포하기 위해서는 톨러레이션과 더불어 어피니티를 적용해야 함