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 |