Static Pod : kubelet 데몬이 직접 관리하는 파드

날아올라돼지야·2024년 9월 5일

쿠버네티스 마스터

목록 보기
19/27

Static Pod란 무엇인가?

Kubernetes의 Static PodKubelet이 직접 관리하는 특수한 유형의 Pod입니다. 일반적으로 Kubernetes는 API 서버를 통해 Pod를 관리하지만, Static Pod는 Kubelet이 지정된 디렉토리에서 직접 YAML 파일을 읽어들여 실행합니다. 이 방식은 Kubernetes 클러스터에서 API 서버와 상관없이 중요한 컴포넌트를 직접 실행하거나 관리할 때 사용됩니다.

다시 말해, Static Pod는 API 서버가 아닌 Kubelet에 의해 관리되며, 주로 마스터 노드에서 중요한 시스템 컴포넌트 (예: etcd, kube-apiserver, kube-controller-manager, kube-scheduler)를 실행하는 데 사용됩니다.

Static Pod의 특징

  1. API 서버와 독립적: Static Pod는 Kubelet에 의해 직접 관리되므로, API 서버에 문제가 발생해도 Pod가 계속 실행됩니다.
  2. Kubelet에서 직접 관리: Kubelet이 설정된 파일 경로에서 직접 Pod 정의 파일을 읽고 실행합니다. 이로 인해 Kubernetes 리소스에 kubectl 명령어로 Static Pod를 조작할 수 없습니다.
  3. 자동 생성되는 Mirror Pod: Static Pod가 실행될 때, 해당 Pod의 정보를 Kubernetes API 서버에 반영하기 위해 Mirror Pod라는 개념을 사용합니다. API 서버는 이 Mirror Pod를 통해 Static Pod 상태를 확인할 수 있습니다.

Static Pod를 사용하는 이유

  1. 마스터 노드 구성 요소 실행: Kubernetes의 마스터 노드 구성 요소인 etcd, kube-apiserver, kube-controller-manager, kube-scheduler는 모두 Static Pod로 실행됩니다. 이러한 구성 요소는 Kubernetes 클러스터의 중심이기 때문에, API 서버에 의존하지 않고 관리할 수 있어야 합니다.
  2. API 서버 없이도 중요한 서비스 실행: API 서버가 비정상적인 상황에서 중요한 컴포넌트를 유지하기 위한 용도로 사용됩니다.
  3. 특정 노드에 필수적인 Pod 배포: Static Pod는 Kubelet의 파일 경로에 저장된 YAML 파일로 정의되기 때문에, 특정 노드에 필수적인 애플리케이션을 배포할 때 유용합니다.

Static Pod의 작동 방식

  1. Static Pod 설정 경로: Kubelet이 실행될 때 특정 경로에 저장된 Pod 정의 파일을 지속적으로 모니터링합니다.
  2. Pod 실행: Kubelet이 Pod 정의 파일을 읽고 Pod를 실행합니다. Pod가 실행되면, Kubelet은 해당 Pod의 상태를 API 서버에 Mirror Pod 형태로 보고합니다.
  3. Mirror Pod 생성: Kubelet은 Static Pod에 대한 정보를 Kubernetes API 서버에 전달하여 Mirror Pod를 생성합니다. Mirror Pod는 kubectl 명령어로 상태를 확인할 수 있지만, 수정하거나 삭제할 수 없습니다.

Static Pod를 만드는 방법

Static Pod를 생성하려면 Kubelet이 Pod 정의 파일을 읽을 수 있는 경로에 YAML 파일을 저장해야 합니다. Kubelet은 --pod-manifest-path 플래그를 사용하여 이 경로를 지정합니다.

  1. Kubelet에 Static Pod 경로 설정
    Kubelet이 실행될 때 --pod-manifest-path 플래그를 사용하여 Pod 정의 파일 경로를 지정합니다. 예를 들어:

    kubelet --pod-manifest-path=/etc/kubernetes/manifests
  2. Static Pod YAML 파일 생성

    아래 예시처럼 Static Pod를 정의하는 YAML 파일을 생성하고, 위에서 지정한 경로 (/etc/kubernetes/manifests)에 저장합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: static-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
  3. Kubelet이 Static Pod 실행
    Kubelet은 --pod-manifest-path로 지정된 디렉토리에서 파일을 모니터링하고, 해당 경로에 새로운 파일이 저장되면 자동으로 Pod를 실행합니다.

  4. Mirror Pod 확인

    Static Pod는 kubectl 명령어로 수정하거나 삭제할 수 없지만, 해당 Pod의 상태를 확인할 수 있는 Mirror Pod는 확인할 수 있습니다.

    kubectl get pods

Static Pod와 일반 Pod의 차이점

특징Static Pod일반 Pod
관리 주체Kubelet (API 서버와 무관)Kubernetes API 서버
Pod 정의 위치로컬 파일 시스템 (Kubelet의 --pod-manifest-path)etcd (Kubernetes 클러스터 내부 저장소)
API 서버 통합 여부Mirror Pod를 통해 상태만 통합API 서버에서 직접 관리
생성, 수정, 삭제 방법파일 수정 후 Kubelet이 감지하고 반영kubectl 명령어로 생성, 수정, 삭제 가능
적용 대상특정 노드에서만 실행모든 노드에 스케줄링 가능

Static Pod의 주요 활용 사례

  1. 마스터 구성 요소 실행: Kubernetes 클러스터의 핵심 구성 요소들은 Static Pod로 실행됩니다. 예를 들어, kube-apiserver, etcd, kube-scheduler 등은 Static Pod로 실행됩니다.
  2. 필수 서비스 관리: 특정 노드에서 항상 실행되어야 하는 필수 서비스를 Static Pod로 실행하여 API 서버 장애 시에도 유지할 수 있습니다.
  3. 클러스터 복구: API 서버가 장애가 발생하더라도 Static Pod는 독립적으로 관리되므로, 클러스터 복구 시 유용합니다.

Static Pod 실습

다음 실습을 통해 Static Pod를 직접 생성해보고 동작을 확인해보세요.

실습 1: Static Pod 생성

  1. Kubelet에 Static Pod 경로 설정

    먼저, Kubelet이 Static Pod를 관리할 경로를 설정합니다. /etc/kubernetes/manifests 경로에 Static Pod 정의 파일을 저장하도록 설정합니다.

    kubelet --pod-manifest-path=/etc/kubernetes/manifests
  2. Static Pod 정의 파일 생성

    다음과 같이 Static Pod를 정의하는 YAML 파일을 /etc/kubernetes/manifests/static-nginx.yaml 경로에 저장합니다.

    apiVersion: v1
    kind: Pod
    metadata:
      name: static-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
  3. Pod 실행 확인

    kubectl 명령어로 실행 중인 Mirror Pod를 확인합니다. Mirror Pod는 Static Pod의 상태를 API 서버에 반영한 것입니다.

    kubectl get pods
  4. Pod 수정 및 반영

    Static Pod의 정의를 수정하려면 /etc/kubernetes/manifests/static-nginx.yaml 파일을 직접 수정해야 합니다. 수정 후 Kubelet이 자동으로 변경 사항을 감지하여 Pod를 재실행합니다.

실습 2: Static Pod 삭제

  1. Static Pod는 Kubelet이 관리하므로 kubectl delete 명령어로 삭제할 수 없습니다. 대신, /etc/kubernetes/manifests/static-nginx.yaml 파일을 삭제하여 Pod를 중지시킵니다.

    rm /etc/kubernetes/manifests/static-nginx.yaml
  2. 이후 다시 kubectl 명령어로 Mirror Pod가 삭제되었는지 확인하세요.

    kubectl get pods

요약

  • Static Pod는 Kubelet이 직접 관리하는 Pod로, API 서버 없이도 노드에서 실행됩니다.
  • 주요 Kubernetes 마스터 구성 요소는 Static Pod로 실행됩니다.
  • Static Pod는 로컬 파일 시스템에서 정의되고 Kubelet에 의해 관리됩니다.
  • Mirror Pod를 통해 Kubernetes API 서버에서 Static Pod의 상태를 확인할 수 있습니다.
  • Static Pod는 API 서버의 장애 시에도 중요한 구성 요소를 실행 상태로 유지하는 데 유용합니다.
profile
무슨 생각하며 사니

0개의 댓글