k8s 노드 스케줄 관리

작성자 박형춘 수정일 2024-02-16 15:34

노드가 비정상 상태가 될 경우 k8s는 신규 생성되는 파드가 해당 노드로 스케줄 되지 않게 taint 필드에 플래그를 지정합니다.  https://support.agilesoda.ai/ko/support/solutions/articles/150000026968-taint-toleration


노드의 리붓 또는 클러스터 재구성 작업을 해야할 경우 수동으로 노드에 taint 플래그를 지정해 스케줄을 제한할 수 있습니다.


아래는 테스트를 위한 간단한 deploy 예시입니다. (hdcd-worker3-122 노드에만 스케줄되게 지정)

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: bogaewon
  name: bogaewon
  #namespace: devai-cluster
  namespace: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: bogaewon
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: bogaewon
    spec:
      nodeSelector:
        kubernetes.io/hostname: hdcd-worker3-122
      containers:
      - image: busybox
        name: bogaewon
        command: ["ping","localhost"]
        resources: {}

status: {}


위의 deploy 를 반영한 결과는 아래와 같습니다. 이제 hdcd-worker3-122 노드에 스케줄되지 않게 테스트를 진행합니다.


1. cordon 

   : 지정한 노드의 스케줄을 제한합니다. (신규 생성되는 파드만 해당되며 기존 파드는 그대로 유지됩니다)

   

현재 노드의 상태


명령 반영

kubectl cordon hdcd-worker3-122


노드의 상태를 보면 스케줄이 차단되어 있음을 확인할 수 있습니다.


하지만 아직 실행중인 파드는 계속 동작합니다. 


deploy scale 명령을 통해 신규 파드를 스케줄합니다. (replica 2 -> 4)


파드의 상태를 보면 신규로 생성된 파드는 pending 상태입니다. (노드에 스케줄이 차단되어 있기 때문)


다시 hdcd-worker3-122 노드에 스케줄이 가능하도록 변경합니다.


2. uncordon

    : 지정한 노드가 다시 스케줄 가능하도록 변경합니다.


명령 반영

kubectl uncordon hdcd-worker3-122


노드의 상태를 보면 스케줄이 가능함을 확인할 수 있습니다.


파드의 상태를 다시보면 pending 상태인 파드가 다시 스케줄되어 동작함을 확인할 수 있습니다.



3. drain

:  지정한 노드의 스케줄을 제한합니다. (해당 노드에 실행중인 파드도 모두 중지하며 다른 노드로 스케줄 시도합니다.) 

drain 명령은 cordon 명령의 상위 호환 명령입니다.


명령 반영

kubectl drain hdcd-worker3-122


위 명령의 결과는 아래와 같은 오류를 발생합니다.


모든 노드에 반드시 하나씩 실행되는 데몬셋은 일반 파드보다 상위 레벨의 스케줄링이므로 오류를 발생시키게됩니다.

따라서 --ignore-daemonsets 옵션을 추가하여 데몬셋으로 생성되는 파드도 중지시킵니다.


kubectl drain hdcd-worker3-122 --ignore-daemonsets


현재 배포된 deploy는  hdcd-worker3-122 노드에만 배포되게 지정되어 있으므로 파드는 pending 상태로 유지됩니다.


다시 스케줄 가능하게 변경하려면 uncordon 명령을 사용합니다.




drain 명령 추가 옵션
  --delete-local-data : emptydir 옵션으로 마운트된 파드가 걸려있을 경우 사용
  --force : 기본 drain 명령은 graceful 방식으로 파드 중지. force 옵션 사용시 강제 제거.


아티클이 유용했나요?

훌륭합니다!

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

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

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

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

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

피드백 전송

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

02-558-8300