2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

쿠버네티스에서 노드가 Ready 상태가 아닐 때 해결 방법은?

_____
Q1: 쿠버네티스 노드가 Ready 상태가 아닙니다. 먼저 무엇을 확인해야 하나요?
A1: 노드 상태 확인을 위해 `kubectl get nodes` 명령어를 실행하고, 해당 노드의 상태를 확인하세요. 또한 `kubectl describe node <노드명>`을 통해 상세 이벤트 및 상태 메시지를 확인하는 것이 중요합니다.

---

Q2: 노드가 NotReady 상태가 되는 일반적인 원인은 무엇인가요?
A2: 주요 원인은 다음과 같습니다.
- 노드의 Kubelet 서비스 비정상 (중지 또는 오류)
- 네트워크 문제로 인해 마스터와의 통신 불가
- 리소스 부족 (CPU, 메모리, 디스크 등)
- 시스템 시간 불일치
- 인증서 만료 또는 자격증명 문제
- 노드의 OS 레벨 문제 (커널 패닉, 디스크 풀 등)

---

Q3: Kubelet 서비스 상태는 어떻게 확인하고 재시작하나요?
A3:
```bash
sudo systemctl status kubelet
sudo systemctl restart kubelet
```
Kubelet이 제대로 작동하지 않으면 노드는 NotReady 상태가 됩니다. 서비스 로그는 `journalctl -u kubelet -f` 명령어로 확인 가능합니다.

---

Q4: 노드와 컨트롤 플레인 간 네트워크 연결 문제를 어떻게 점검하나요?
A4:
- 노드에서 API 서버(보통 6443 포트) 접속 여부 확인:
```bash
curl -k https://:6443/version
```
- 방화벽 설정 및 보안 그룹에서 관련 포트가 차단되어있는지 점검
- 노드와 마스터간 DNS 혹은 IP 변경 여부 확인

---

Q5: 리소스 부족이 의심될 때는 어떻게 하나요?
A5: 노드의 CPU, 메모리, 디스크 사용량을 점검하세요.
```bash
top
df -h
```
디스크 공간 부족시 불필요한 로그나 캐시 파일을 삭제하고, 필요한 자원 확장을 고려하세요.

---
Q6: 노드가 생성 직후 Ready 상태가 아니면 어떻게 해야 하나요?
A6: 노드가 마스터에 정상적으로 등록되었는지, 인증서 및 토큰이 올바른지 확인하세요. `kubeadm reset` 후 재조인 하거나, `kubeadm join` 명령을 다시 실행해서 토큰과 인증서를 재설정할 수 있습니다.

---

Q7: 인증서 만료 문제는 어떻게 확인하고 갱신하나요?
A7: 노드의 kubelet 인증서 경로(`/var/lib/kubelet/pki/kubelet-client-current.pem` 등)를 확인하고, `openssl x509 -in -noout -dates`로 만료일을 확인하세요. 필요시 인증서를 재생성하거나 kubelet을 재시작합니다.

---

Q8: 노드의 상태가 계속 NotReady라면 노드를 클러스터에서 제거하고 다시 추가하는 방법은?
A8:
1. 노드 드레이닝(작업 중인 파드 안전하게 이동)
```bash
kubectl drain <노드명> --ignore-daemonsets --delete-emptydir-data
```
2. 노드 삭제
```bash
kubectl delete node <노드명>
```
3. 노드에서 kubeadm reset 실행 후, 다시 조인
```bash
sudo kubeadm reset
sudo kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
```

---

Q9: 노드의 시간 동기화 문제는 어떻게 확인하고 해결하나요?
A9: NTP 또는 chrony 서비스가 정상 작동하는지 확인하세요. 시간 오차가 큰 경우 인증서 검증이 실패할 수 있으므로 다음 명령어로 확인 및 재설정합니다.
```bash
timedatectl status
sudo systemctl restart ntp
```

---

Q10: 문제 해결을 위한 로그 수집은 어떻게 하나요?
A10:
- Kubelet 로그: `journalctl -u kubelet -f`
- 컨테이너 런타임 로그 (예: Docker): `sudo journalctl -u docker`
- 노드 시스템 로그: `/var/log/syslog` 또는 `/var/log/messages`
이러한 로그를 분석해 원인을 파악합니다.

---

요약 : 쿠버네티스 노드가 NotReady 상태일 때는 Kubelet 서비스 상태, 네트워크 연결, 리소스 상태, 인증서 유효성, 시간 동기화, 시스템 로그를 순차적으로 점검/복구하며, 필요시 노드를 드레인 후 재조인하는 과정을 거칩니다.
쿠버네티스에서 노드가 "Ready" 상태가 아닐 때, 이는 클러스터의 안정성과 애플리케이션의 가용성에 심각한 영향을 미칠 수 있습니다.

노드가 Ready 상태가 아닐 경우, 해당 노드에서 실행 중인 파드(pod)는 정상적으로 작동하지 않거나, 새로운 파드가 해당 노드에 스케줄링되지 않을 수 있습니다.

이 문제를 해결하기 위해서는 여러 가지 접근 방법이 있습니다.

아래에 그 과정을 상세히 설명하겠습니다.

1. 노드 상태 확인먼저, 노드의 상태를 확인해야 합니다.

`kubectl get nodes` 명령어를 사용하여 노드의 상태를 확인할 수 있습니다.

```bashkubectl get nodes```이 명령어를 실행하면 각 노드의 상태가 "Ready", "NotReady", "SchedulingDisabled" 등으로 표시됩니다.

"NotReady" 상태인 노드를 확인합니다.



2. 노드의 이벤트 및 로그 확인노드가 "NotReady" 상태인 경우, 해당 노드에서 발생한 이벤트를 확인해야 합니다.

이벤트를 확인하기 위해 다음 명령어를 사용할 수 있습니다.

```bashkubectl describe node <노드이름>```이 명령어는 노드에 대한 상세 정보를 출력하며, 이벤트 섹션에서 문제의 원인을 파악할 수 있는 유용한 정보를 제공합니다.

예를 들어, 메모리 부족, 디스크 공간 부족, 네트워크 문제 등 다양한 원인이 있을 수 있습니다.



3. 시스템 리소스 확인노드가 "NotReady" 상태인 이유 중 하나는 시스템 리소스 부족입니다.

CPU, 메모리, 디스크 공간 등을 확인해야 합니다.

SSH를 통해 해당 노드에 접속한 후, 다음 명령어를 사용하여 리소스 사용량을 확인할 수 있습니다.

```bash CPU 및 메모리 사용량 확인top 디스크 사용량 확인df -h```리소스가 부족하다면, 불필요한 프로세스를 종료하거나, 디스크 공간을 확보해야 합니다.



4. Kubelet 서비스 확인Kubelet은 쿠버네티스 노드에서 실행되는 주요 컴포넌트로, 노드의 상태를 보고하는 역할을 합니다.

Kubelet 서비스가 정상적으로 실행되고 있는지 확인해야 합니다.

SSH로 노드에 접속한 후, 다음 명령어를 사용하여 Kubelet의 상태를 확인합니다.

```bashsystemctl status kubelet```Kubelet이 비정상적으로 실행되고 있다면, 로그를 확인하여 문제의 원인을 파악하고, Kubelet을 재시작할 수 있습니다.

```bash Kubelet 로그 확인journalctl -u kubelet Kubelet 재시작sudo systemctl restart kubelet```

5. 네트워크 문제 확인네트워크 문제로 인해 노드가 "NotReady" 상태가 될 수 있습니다.

노드가 클러스터의 API 서버와 통신할 수 있는지 확인해야 합니다.

다음 명령어를 사용하여 노드에서 API 서버에 ping을 시도해 볼 수 있습니다.

```bashping ```네트워크 설정이 잘못되었거나, 방화벽 설정이 문제를 일으킬 수 있습니다.

이 경우, 네트워크 설정을 검토하고 수정해야 합니다.



6. 노드 재부팅위의 방법으로 문제를 해결할 수 없는 경우, 노드를 재부팅하는 것도 하나의 방법입니다.

재부팅 후 Kubelet과 관련된 서비스가 정상적으로 시작되면서 노드가 "Ready" 상태로 돌아올 수 있습니다.

```bashsudo reboot```

7. 클러스터 상태 점검 클러스터의 전반적인 상태를 점검해야 합니다.

다른 노드의 상태와 파드의 상태를 확인하여, 문제가 발생한 노드 외에 다른 노드에서도 문제가 발생하고 있는지 확인합니다.

```bashkubectl get pods --all-namespaces``` 결론노드가 "Ready" 상태가 아닐 때는 여러 가지 원인이 있을 수 있으며, 이를 해결하기 위해서는 시스템 리소스, Kubelet 서비스, 네트워크 설정 등을 점검해야 합니다.

문제를 파악하고 해결한 후, 노드가 정상적으로 "Ready" 상태로 돌아오면 클러스터의 안정성을 유지할 수 있습니다.

작성자: 정하연 [비회원] | 작성일자: 1년 전 2024-09-05 03:45:23
조회수: 259 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.