내 잡다한 노트
쿠버네티스 노드 관리 본문
1. 노드가 다운되었을 때 발생하는 문제
- 클러스터에서 **노드(Node)**가 다운되면, 해당 노드에서 실행 중이던 Pod에 접근할 수 없게 됩니다.
- Pod가 여러 복제본(Replicas)으로 구성된 경우:
- 예: 블루 Pod는 여러 복제본이 있어 다른 노드에서 서비스가 계속 제공되므로 사용자에게 영향이 없음.
- Pod가 단일 인스턴스로 실행 중인 경우:
- 예: 그린 Pod는 다른 복제본이 없으므로 사용자에게 서비스가 중단됨.
2. Kubernetes의 동작 원리
- 노드가 빠르게 복구된 경우:
- 노드가 빠르게 복구되면, kubelet이 다시 시작되어 Pod가 정상적으로 실행됩니다.
- 노드가 5분 이상 다운된 경우:
- Kubernetes는 기본적으로 5분간 노드 상태를 감시하다가 노드가 복구되지 않으면 Pod을 종료(terminate) 처리합니다.
- 해당 Pod가 ReplicaSet의 일부인 경우:
- 새로운 노드에서 자동으로 Pod가 다시 생성됩니다.
- ReplicaSet에 포함되지 않은 경우:
- Pod는 재생성되지 않고 완전히 사라집니다.
- Pod Eviction Timeout:
- Pod Eviction Timeout: 노드가 비활성 상태로 간주되기 전까지 기다리는 시간(기본값: 5분).
- 이 시간은 Kubernetes Controller Manager에서 설정할 수 있음.
3. 유지보수를 위한 안전한 노드 관리
노드 유지보수를 진행할 때, 예상치 못한 문제가 발생하지 않도록 다음과 같은 절차를 따를 수 있습니다.
(1) Drain 명령어
- 노드에서 실행 중인 **모든 워크로드(Pod)**를 안전하게 다른 노드로 이동.
- Pod 이동 과정:
- Pod는 현재 노드에서 종료(terminate) 처리.
- ReplicaSet이나 Deployment의 설정에 따라 다른 노드에서 새롭게 생성.
- 결과:
- 노드는 "스케줄링 불가(unschedulable)" 상태가 되며, 새로운 Pod는 이 노드에 할당되지 않음.
kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data
- --ignore-daemonsets: DaemonSet에 속한 Pod는 이동되지 않도록 설정.
- --delete-emptydir-data: emptyDir 볼륨을 사용하는 Pod도 제거.
(2) Cordon 명령어
- 노드를 스케줄링 불가(unschedulable) 상태로 표시.
- 기존 Pod는 그대로 유지되며, 새로운 Pod만 스케줄링되지 않음.
kubectl cordon <node-name>
(3) Uncordon 명령어
- 노드를 다시 스케줄링 가능한 상태로 복구.
kubectl uncordon <node-name>
4. Drain과 Cordon의 차이점
명령어설명Pod 동작
Drain | 노드를 스케줄링 불가 상태로 표시하고, Pod를 이동. | 기존 Pod는 종료되고, 다른 노드로 재배치. |
Cordon | 노드를 스케줄링 불가 상태로 표시. | 기존 Pod는 그대로 유지. |
Uncordon | 노드를 다시 스케줄링 가능한 상태로 복구. | 새로운 Pod가 이 노드에 스케줄링 가능. |
유의 사항
- Pod는 원래 노드로 돌아오지 않음:
- Drain을 수행한 후, Pod는 다른 노드에서 새로 생성되며, 원래 노드로 자동 복귀하지 않음.
- ReplicaSet의 중요성:
- 단일 Pod 대신 ReplicaSet을 사용하면 Pod가 다른 노드에서 자동으로 생성되어 가용성이 보장됨.
- DaemonSet:
- DaemonSet에 의해 관리되는 Pod는 Drain 명령어로 이동되지 않음. 이는 DaemonSet Pod가 각 노드에 1개씩 실행되어야 하기 때문.
- RBAC 및 네임스페이스 관리:
- 노드 관리 명령어를 사용할 권한이 있어야 하며, 올바른 네임스페이스에서 명령을 실행해야 함.
'DevOps > 쿠버네티스' 카테고리의 다른 글
[K8S] Multi container pods design patterns (1) | 2024.11.17 |
---|---|
쿠버네티스에서 ~From 이라는 키워드란? (2) | 2024.11.17 |
쿠버네티스 Secrets (0) | 2024.11.17 |
쿠버네티스 ConfigMap (0) | 2024.11.16 |
쿠버네티스 업데이트 및 배포 전략 (0) | 2024.11.16 |