Context: 당신은 k8s-cluster의 관리자입니다. 현재 클러스터는 여러 가지 복합적인 문제로 인해 정상적으로 작동하지 않고 있습니다. 아래의 4가지 작업을 수행하여 클러스터를 정상 상태로 복구하십시오.
유의사항:
-
작업의 순서는 정해져 있지 않지만, 논리적인 의존성이 있을 수 있습니다.
-
모든 변경 사항은 영구적이어야 합니다.
📝 Task 1: 노드 장애 조치
k8s-worker1 노드가 현재 NotReady 상태로 보고되고 있습니다.
조건:
-
k8s-worker1노드를 진단하고, 정상적인Ready상태로 전환하십시오. -
해당 노드에서 Kubelet 서비스가 정상적으로 실행되어야 합니다.
📝 Task 2: 애플리케이션 스케줄링 문제 해결
Default 네임스페이스의 broken-app Deployment에 속한 Pod들이 실행되지 못하고 Pending 상태에 머물러 있습니다.
조건:
-
broken-appPod들이k8s-worker1노드에 정상적으로 배치되어Running상태가 되도록 하십시오. -
Deployment의 수정 없이, 클러스터 설정을 변경하여 해결해야 합니다.
📝 Task 3: 클러스터 DNS 복구
클러스터 내부의 서비스 디스커버리 기능이 작동하지 않습니다.
조건:
-
kube-system네임스페이스의corednsDeployment가 정상적으로 작동하도록 수정하십시오. -
coredns는 최소 2개의 레플리카(Replicas)를 가져야 합니다.
📝 Task 4: 서비스 검증
위의 모든 작업을 완료한 후, 클러스터가 정상 작동하는지 검증하십시오.
검증 방법:
- 임시 Pod(
test-pod)를 생성하여kubernetes.default서비스의 도메인 이름 해석(NSLookup)이 성공해야 합니다
나의 풀이.
Task1
- kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 3h27m v1.30.14
k8s-worker1 NotReady <none> 3h26m v1.30.14
- kubectl describe node k8s-worker1
매우 많이 나옴. https://kubernetes.io/docs/reference/kubectl/generated/kubectl_describe/
현재의 문제 경우 위에서부터 읽는 경우 Conditions : 에서 발견 가능
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Thu, 11 Dec 2025 15:01:20 +0900 Thu, 11 Dec 2025 15:01:20 +0900 CalicoIsUp Calico is running on this node
MemoryPressure Unknown Thu, 11 Dec 2025 15:35:30 +0900 Thu, 11 Dec 2025 15:37:53 +0900 NodeStatusUnknown Kubelet stopped posting node status.
DiskPressure Unknown Thu, 11 Dec 2025 15:35:30 +0900 Thu, 11 Dec 2025 15:37:53 +0900 NodeStatusUnknown Kubelet stopped posting node status.
PIDPressure Unknown Thu, 11 Dec 2025 15:35:30 +0900 Thu, 11 Dec 2025 15:37:53 +0900 NodeStatusUnknown Kubelet stopped posting node status.
Ready Unknown Thu, 11 Dec 2025 15:35:30 +0900 Thu, 11 Dec 2025 15:37:53 +0900 NodeStatusUnknown Kubelet stopped posting node status.
그 다음 훑어봐야 하는 곳은 Events:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal NodeNotReady 26m node-controller Node k8s-worker1 status is now: NodeNotReady
Label 밑의 Taint도 문제인거 발견하기 (Task2)
Taints: node.kubernetes.io/unreachable:NoExecute
maintenance=true:NoSchedule
Kubelet stopped posting node status. 가 강력한 힌트 > kubelet이 워커 노드에서 뭔가 문제가 있나? 결정적으로 event 에서도 NodeNotReady
워커 노드로 접속 >
ssh root@100.74.129.75
kubelet 부터 확인
systemctl status kubelet
최근 로그 확인
Dec 11 15:37:11 k8s-worker1 systemd[1]: Stopping kubelet: The Kubernetes Node Agent...
Dec 11 15:37:11 k8s-worker1 systemd[1]: kubelet.service: Deactivated successfully.
Dec 11 15:37:11 k8s-worker1 systemd[1]: Stopped kubelet: The Kubernetes Node Agent.
Dec 11 15:37:11 k8s-worker1 systemd[1]: kubelet.service: Consumed 1min 19.727s CPU time.
kubelet이 정지된 것을 확인
해결하기!
systemctl start kubelet
systemctl enable kubelet
# 서비스 상태 확인
systemctl status kubelet
# 실시간 로그 확인
journalctl -u kubelet -f
워커노드에서 빠져나오기
마스터노드에서 다시 Task 2 문제 풀이
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 4h v1.30.14
k8s-worker1 Ready <none> 3h58m v1.30.14
[root@k8s-master ~]# kubectl describe node k8s-worker1 | grep "Ready"
**Ready** True Thu, 11 Dec 2025 16:19:08 +0900 Thu, 11 Dec 2025 16:18:58 +0900 Kubelet**Ready** kubelet is posting ready status
Normal NodeNot**Ready** 42m node-controller Node k8s-worker1 status is now: NodeNot**Ready**
Normal NodeNot**Ready** 99s kubelet Node k8s-worker1 status is now: NodeNot**Ready**
Normal Node**Ready** 99s kubelet Node k8s-worker1 status is now: Node**Ready**
[root@k8s-master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
broken-app-654c7d464f-4ddt7 0/1 Pending 0 50m
broken-app-654c7d464f-mdrcp 0/1 Pending 0 50m
broken-app-654c7d464f-xhqwh 0/1 Pending 0 50m
[root@k8s-master ~]# kubectl describe pod broken-app-654c7d464f-4ddt7
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 3m12s (x11 over 54m) default-scheduler 0/2 nodes are available: 1 node(s) had untolerated taint {maintenance: true}, 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/2 nodes are available: 2 Preemption is not helpful for scheduling.
FailedScheduling > untolerated taint taint 가 문제네
https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/
taint 제거 명령어 찾기.
해결 : kubectl taint nodes k8s-worker1 maintenance=true:NoSchedule-
kubectl get pods -w
NAME READY STATUS RESTARTS AGE
broken-app-654c7d464f-4ddt7 1/1 Running 0 57m
broken-app-654c7d464f-mdrcp 1/1 Running 0 57m
broken-app-654c7d464f-xhqwh 1/1 Running 0 57m
Task3
- 문제 해석 (지문 → 기술 용어)
“서비스 디스커버리가 작동하지 않음” ↓ DNS 해결 문제 ↓ CoreDNS 문제 의심
- 쿠버네티스 아키텍처 지식 적용
DNS = CoreDNS Pod들이 담당 CoreDNS Pod들 = Deployment가 관리 문제 해결 = Deployment 상태부터 확인
- 조사 우선순위 설정
Top-Down 접근: Deployment (전체) → Pod (개별) → Container (상세)
사고 과정:
- “CoreDNS 뭐가 문제지?”
- “Deployment 상태를 봐야지”
- “CoreDNS는 kube-system에 있어”
→ 명령어 도출: kubectl get deployment coredns -n kube-system
kubectl get pods -n kube-system -w | grep coredns