K8S 아키텍처, 마스터 노드

개발 및 관리/클라우드 2023. 9. 7. 23:27 posted by HighLighter
반응형

*** K8S 아키텍처, 마스터 노드

1. 마스터: K8S의 설정 환경 저정하고 전체 클러스터 관리하는 역할 / etc, kube-apiserver, kube-scheduler, kube-controller-manager
 - 클러스터 전체를 관리하는 컨트롤러 / 클러스터의 컨트롤 Plan 제공
 - 클러스터에 대한 전반적인 결정을 수행하고 클러스터 이벤트(예컨데, Deployment의 Replicas 필드가 요구조건을 충족되지 않을 경우 새로운 Pod 구동 시키는 것)를 감지하고 반응
 - 클러스터 내 어떠한 머신에서도 동작 가능
 - Api Server, Controller Manager, Scheduler, etcd로 구성
 - 관리자는 Master의 Api Server를 통해 K8S를 관리하며 모든 컴포넌트들은 Api Server를 통해 서로 통신
 
1-1. kube-scheduler
- 노드가 배정되지 않은 새로 생성된 파드를 감지하고 그것이 구동될 노드를 선택하는 마스터 상의 컴포넌트
- 새로운 파드들이 만들어질 때 현재 클러스터 내에서 자원할당이 가능한 노드들 중에서 알맞은 노드를 선택해서 그곳에 파드를 실행하는 역할
- 파드는 처음 실행 될 때 여러 가지 조건을 지정해서 실행하는데, kube-scheduler가 그 조건에 맞는 노드를 찾아주는 역할
- 스케줄링 결정을 위해서 고려되는 요소는 리소스에 대한 개별 및 총제적 요구사항, HW/SW/정책적 제약, Affinity 및 Anti-affinity 명세, 데이터 지역성, Workload 간 간섭, Deadline을 포함 

1-2. kube-controller-manager
- 컨트롤러를 구동하는 마스터 상의 컴포넌트
- 논리적으로, 각 컨트롤러는 개별 프로세스이지만, 복잡성을 낮추기 위해 모두 단일 Binary 컴파일 되고 단일 프로세스 내에서 실행

1-3. cloud-controller-manager
- 클라우드 Provider와 상호작용하는 컨트롤러 작동
- 클라우드 밴더 코드와 K8S 코드가 서로 독립적으로 발전시켜 나갈 수 있도록 지원

1-4. kube-apiserver
- K8S는 MSA 구조 / 여러 개의 분리된 프로세스로 구성
- K8S Api를 노출하는 마스터 상의 컴포넌트, 쿠버네티스 컨트롤 플레인에 대한 Front-end
- 요청이 왔을 때, 그 요청이 유효한지 검증하는 역할
- K8S의 모든 요청은 kube-apiserver를 통해서 다른 곳으로 전달
- kube-apiserver는 수평적으로 확장이 가능하게 설계가 되어, 여러 대 장비에 여러 개를 실행 가능 

1-5. etcd
- 고가용성을 제공하는 분산 key-value 저장소
- K8S에서 필요한 모든 데이터를 저장하는 DB
- 프로세스 1개만 사용 가능하지만, 데이터 안전성을 위해 여러 개의 장비에 분산해서 etcd 자체를 클러스터링 구성해서 실행하는 것이 일반적인 방법
- 안정적인 운영을 위해서 주기적으로 etcd에 있는 데이터 백업 필요
- curl 등 http 클라이언트/라이브러리로 작업 가능

2. 노드: Pod나 Container 처럼 K8S에서 동작하는 Workload를 호스팅하는 역할 / kubelet, kube-proxy , docker 등이 실행 / 실제 사용자가 사용하는 컨테이너들은 대부분 노드에서 실행

반응형