자격증/CKA

[CKA] Udemy 74. Static Pods

14ben 2024. 7. 13. 19:26
728x90

Kubernetes 아키텍처와 kubelet의 역할

  • 이전 강의에서 Kubernetes 아키텍처와 kubelet의 기능에 대해 논의했음.
  • kubelet은 Kubernetes의 여러 컨트롤 플레인 구성 요소 중 하나로,
  • kube-apiserver로부터 노드에 로드할 파드에 대한 지시를 받음.
  • 이 지시는 kube-scheduler의 결정에 따라 이루어지며, ETCD 데이터 저장소에 저장됨.

 

Master 노드 없이 kubelet의 동작

  • 만약 kube-apiserver, kube-scheduler, 컨트롤러, ETCD 클러스터가 없고,
  • 마스터 노드가 없으며 다른 노드도 없다면 어떻게 될까?
  • kubelet이 독립적으로 노드를 관리할 수 있는지?
    • kubelet은 독립적으로 노드를 관리할 수 있음.
    • kubelet이 설치된 호스트에는 Docker도 있어 컨테이너를 실행할 수 있음.
  • Kubernetes 클러스터가 없으므로 kube-apiserver도 없음.
  • kubelet은 파드를 생성할 수 있는 능력을 가짐.

 

Static Pods의 생성

  • 파드를 생성하려면 파드 정의 파일이 필요함.
  • kube-apiserver 없이 kubelet에 파드 정의 파일을 제공하는 방법은?
  • 서버의 특정 디렉토리에서 파드 정의 파일을 읽도록 kubelet을 구성할 수 있음.
  • 이 디렉토리에 파드 정의 파일을 배치하면 kubelet이 주기적으로 디렉토리를 확인하고
  • 파일을 읽어 호스트에 파드를 생성함.
  • 파드가 생성될 뿐만 아니라, 애플리케이션이 충돌하면 kubelet이 이를 재시작함.
  • 디렉토리 내 파일이 변경되면 kubelet이 파드를 재생성함.
  • 파일을 제거하면 파드가 자동으로 삭제됨.
  • 이러한 방식으로 생성된 파드를 Static Pods라 부름.

 

Static Pods의 제한

  • 이 방법으로는 파드만 생성할 수 있음.
  • ReplicaSets, Deployments, Services 등은 생성할 수 없음.
  • kubelet은 파드 수준에서만 동작하므로 Static Pods만 이해할 수 있음.

 

Static Pods의 설정

  • 지정된 디렉토리는 호스트의 어느 디렉토리든 가능하며, 이 디렉토리의 위치는 kubelet 서비스 실행 시 옵션으로 전달됨.
  • 이 옵션의 이름은 pod-manifest-path이며, 여기서는 /etc/kubernetes/manifests 디렉토리로 설정됨.
  • 다른 설정 방법으로는 config 옵션을 사용하여 별도의 구성 파일 경로를 제공하고, 그 파일 내에 staticPodPath를 정의할 수 있음.
  • kubeadm 도구로 설정된 클러스터는 이 접근 방식을 사용함.
  • 기존 클러스터를 검사할 때는 kubelet 옵션을 확인하여 디렉토리 경로를 파악함.

 

 

 

Static Pods의 확인

  • Static Pods가 생성되면 docker ps 명령어로 확인할 수 있음.
  • kubectl 명령어는 API 서버와 함께 동작하므로 API 서버가 없을 때는 사용할 수 없음.
  • 노드가 클러스터의 일부일 때는 API 서버 요청을 통해 파드를 생성할 수 있음.
  • kubelet은 Static Pods와 API 서버로부터 요청받은 파드를 동시에 생성할 수 있음.

 

Static Pods와 API 서버의 상호작용

  • kubelet이 Static Pod를 생성하면, 클러스터의 일부인 경우 kube-apiserver에 미러 객체를 생성함.
  • kubectl get pods 명령어를 통해 마스터 노드에서 Static Pods를 다른 파드와 동일하게 볼 수 있음.
  • 이러한 미러 객체는 읽기 전용이며, 일반적인 파드처럼 수정하거나 삭제할 수 없음.
  • Static Pods의 이름은 자동으로 노드 이름이 추가됨.

 

Static Pods의 용도

  • Static Pods는 Kubernetes 컨트롤 플레인 구성 요소를 노드에 배포하는 데 사용될 수 있음.
  • kubelet을 마스터 노드에 설치하고, API 서버, 컨트롤러, ETCD 등의 컨트롤 플레인 구성 요소를
  • 도커 이미지로 사용하는 파드 정의 파일을 생성함.
  • 이러한 정의 파일을 지정된 매니페스트 폴더에 배치하면, kubelet이 이를 파드로 배포함.
  • 이 방식으로 바이너리를 다운로드하거나 서비스를 구성할 필요 없이 컨트롤 플레인 구성 요소를 관리할 수 있음.
  • kubeadm 도구로 설정된 클러스터에서 kube-system 네임스페이스의 파드 목록을 보면
  • 컨트롤 플레인 구성 요소들이 파드로 존재함을 확인할 수 있음.

 

Static Pods와 DaemonSets의 차이점

  • DaemonSets는 클러스터의 모든 노드에 애플리케이션 인스턴스가 하나씩 있도록 보장함.
  • DaemonSets는 kube-apiserver를 통해 DaemonSet 컨트롤러에 의해 관리됨.
  • Static Pods는 kube-apiserver나 다른 Kubernetes 컨트롤 플레인 구성 요소의 개입 없이 kubelet에 의해 직접 생성됨.
  • Static Pods는 Kubernetes 컨트롤 플레인 구성 요소 자체를 배포하는 데 사용될 수 있음.
  • Static Pods와 DaemonSets에 의해 생성된 파드는 kube-scheduler에 의해 무시됨.

 

 

728x90

'자격증 > CKA' 카테고리의 다른 글

[CKA] Udemy Lightning Lab (2/7)  (2) 2024.07.22
[CKA] Udemy Lightning Lab (1/7)  (2) 2024.07.17
[CKA] Udemy 71. Daemon Sets  (0) 2024.07.13
[CKA] Udemy 66. Taints and Tolerations vs Node Affinity  (0) 2024.07.13
[CKA] Udemy 63. Node Affinity  (0) 2024.07.13