Certificate/CKA

CKA Troubleshooting - Control Plane Failure 문제 분석 및 해결

ygtoken 2025. 3. 4. 20:35
728x90

CKA(Certified Kubernetes Administrator) 시험에서는 Kubernetes 클러스터의 Control Plane 장애를 진단하고 해결하는 능력이 중요한 평가 요소입니다. 본 글에서는 'Control Plane Failure' 문제를 상세히 분석하고 해결 방법을 설명하겠습니다.


1. 문제 설명: 컨트롤 플레인 장애(Control Plane Failure)

📌 출제 의도

이 문제는 Kubernetes 클러스터의 Control Plane이 정상적으로 동작하지 않을 때, 문제를 진단하고 해결하는 능력을 평가합니다. 주요 진단 항목은 다음과 같습니다.

  • API Server, Controller Manager, Scheduler의 상태 확인 및 복구
  • etcd 데이터베이스의 장애 복구
  • kubelet 및 노드의 상태 점검

문제 상황

  1. kubectl get nodes를 실행해도 Control Plane 노드가 보이지 않습니다.
  2. kubectl get pods -n kube-system을 실행했을 때 Control Plane 구성 요소(API Server, Controller Manager, Scheduler)가 실행되지 않거나 CrashLoopBackOff 상태입니다.
  3. etcd 서비스가 정상적으로 실행되지 않고 있습니다.

2. 문제 해결 접근법

1단계: Control Plane 구성 요소 상태 확인

먼저, kubectl get pods -n kube-system을 실행하여 Control Plane의 구성 요소들이 정상적으로 실행되고 있는지 확인합니다.

kubectl get pods -n kube-system

이후, 문제가 있는 구성 요소의 상태를 확인합니다.

kubectl describe pod <문제_있는_pod> -n kube-system
kubectl logs <문제_있는_pod> -n kube-system

만약 API Server가 실행되지 않는다면, 다음과 같이 kube-apiserver 로그를 확인할 수 있습니다.

sudo journalctl -u kube-apiserver -f

2단계: etcd 상태 확인 및 복구

Control Plane이 정상적으로 동작하려면 etcd가 올바르게 실행되고 있어야 합니다. etcd의 상태를 확인하려면 다음 명령어를 실행합니다.

kubectl -n kube-system get pods | grep etcd

etcd가 CrashLoopBackOff 상태이거나 실행되지 않는다면, 서비스 로그를 확인해야 합니다.

sudo journalctl -u etcd -f

etcd가 실행되지 않는 원인으로는 다음과 같은 경우가 있을 수 있습니다.

  • etcd 데이터 디렉터리 손상
  • etcd 서비스 설정 파일 오류
  • etcd 클러스터 멤버십 문제

📌 etcd 서비스 재시작

sudo systemctl restart etcd

3단계: API Server, Controller Manager, Scheduler 복구

Control Plane 구성 요소 중 하나라도 실행되지 않으면 Kubernetes 클러스터가 정상적으로 동작하지 않습니다. /etc/kubernetes/manifests/ 경로에서 해당 구성 요소들의 설정 파일이 올바르게 존재하는지 확인해야 합니다.

📌 API Server, Controller Manager, Scheduler 설정 파일 확인

ls -l /etc/kubernetes/manifests/

이 디렉터리에 kube-apiserver.yaml, kube-controller-manager.yaml, kube-scheduler.yaml 파일이 존재해야 합니다. 만약 존재하지 않거나 손상되었다면, 백업에서 복구해야 합니다.

📌 kube-apiserver.yaml 예제 수정

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - name: kube-apiserver
    image: k8s.gcr.io/kube-apiserver:v1.24.0  # 버전 확인 필요
    command:
    - "kube-apiserver"
    args:
    - "--etcd-servers=https://127.0.0.1:2379"
    - "--service-cluster-ip-range=10.96.0.0/12"
    - "--client-ca-file=/etc/kubernetes/pki/ca.crt"

설정을 변경한 후, kubelet이 변경 사항을 감지하도록 강제로 재시작합니다.

sudo systemctl restart kubelet

4단계: kubelet 상태 확인 및 재시작

Control Plane의 문제는 kubelet이 정상적으로 실행되지 않아 발생할 수도 있습니다. kubelet 상태를 확인하려면 다음 명령어를 실행합니다.

sudo systemctl status kubelet

만약 kubelet이 실행되지 않는다면, 다음 명령어를 실행하여 로그를 확인합니다.

sudo journalctl -u kubelet -f

이후, kubelet을 재시작합니다.

sudo systemctl restart kubelet

3. 결론

위 단계를 거쳐 Control Plane 장애를 해결할 수 있습니다. Kubernetes Control Plane 문제를 해결할 때는 다음 접근법을 기억하세요.

문제 해결 접근법 정리

  1. Control Plane 구성 요소 상태 확인 → kubectl get pods -n kube-system
  2. etcd 상태 확인 및 복구 → kubectl -n kube-system get pods | grep etcd
  3. API Server, Controller Manager, Scheduler 설정 점검 → /etc/kubernetes/manifests/ 확인
  4. kubelet 상태 확인 및 재시작 → sudo systemctl restart kubelet
728x90