Context: 당신은 k8s-cluster의 관리자입니다. 현재 클러스터는 여러 가지 복합적인 문제로 인해 정상적으로 작동하지 않고 있습니다. 아래의 4가지 작업을 수행하여 클러스터를 정상 상태로 복구하십시오.

유의사항:

  • 작업의 순서는 정해져 있지 않지만, 논리적인 의존성이 있을 수 있습니다.

  • 모든 변경 사항은 영구적이어야 합니다.

📝 Task 1: 노드 장애 조치

k8s-worker1 노드가 현재 NotReady 상태로 보고되고 있습니다.

조건:

  1. k8s-worker1 노드를 진단하고, 정상적인 Ready 상태로 전환하십시오.

  2. 해당 노드에서 Kubelet 서비스가 정상적으로 실행되어야 합니다.


📝 Task 2: 애플리케이션 스케줄링 문제 해결

Default 네임스페이스의 broken-app Deployment에 속한 Pod들이 실행되지 못하고 Pending 상태에 머물러 있습니다.

조건:

  1. broken-app Pod들이 k8s-worker1 노드에 정상적으로 배치되어 Running 상태가 되도록 하십시오.

  2. Deployment의 수정 없이, 클러스터 설정을 변경하여 해결해야 합니다.


📝 Task 3: 클러스터 DNS 복구

클러스터 내부의 서비스 디스커버리 기능이 작동하지 않습니다.

조건:

  1. kube-system 네임스페이스의 coredns Deployment가 정상적으로 작동하도록 수정하십시오.

  2. coredns는 최소 2개의 레플리카(Replicas)를 가져야 합니다.


📝 Task 4: 서비스 검증

위의 모든 작업을 완료한 후, 클러스터가 정상 작동하는지 검증하십시오.

검증 방법:

  1. 임시 Pod(test-pod)를 생성하여 kubernetes.default 서비스의 도메인 이름 해석(NSLookup)이 성공해야 합니다

나의 풀이.

Task1

  1. 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
  1. 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

  1. 문제 해석 (지문 → 기술 용어)

“서비스 디스커버리가 작동하지 않음” ↓ DNS 해결 문제 ↓ CoreDNS 문제 의심

  1. 쿠버네티스 아키텍처 지식 적용

DNS = CoreDNS Pod들이 담당 CoreDNS Pod들 = Deployment가 관리 문제 해결 = Deployment 상태부터 확인

  1. 조사 우선순위 설정

Top-Down 접근: Deployment (전체) → Pod (개별) → Container (상세)

사고 과정:

  1. “CoreDNS 뭐가 문제지?”
  2. “Deployment 상태를 봐야지”
  3. “CoreDNS는 kube-system에 있어”

→ 명령어 도출: kubectl get deployment coredns -n kube-system

  kubectl get pods -n kube-system -w | grep coredns

Task4