[클라우드/쿠버네티스] 쿠버네티스 아키텍처

2024. 6. 22. 22:58
728x90
반응형

 

출처

1) Cloud Native DevOps with Kubernetes / 쿠버네티스를 활용한 클라우드 네이티브 데브옵스

 

 

쿠버네티스의 구조

1) 마스터 노드: 쿠버네티스 클러스터의 Control Plane을 구성하는 중심 노드. 전체 클러스터의 상태를 관리하고 감독하는 역할 . API서버, 스케줄러, 컨트롤매니저, etcd로 구성되어 있음

2) 워커 노드: 실제 응용 프로그램 및 서비스가 실행되는 노드. 마스터 노드에서 할당된 작업을 실행하며, 클러스터 내부에서 POD의 실제 실행을 담당. 여러 워커 노드가 클러스터 전체의 컴퓨팅 리소스를 제공하며, 응용 프로그램과 서비스를 호스팅하는 역할을 담당. kublelet, 컨테이너 런타임, kube-proxy로 구성되어 있음

3) kubectl: 쿠버네티스 클러스터를 관리하기 위한 CLI

출처: aws.plainenglish.io

 

 

마스터 노드

1) API서버: 클러스터의 상태 및 설정 정보를 저장하고 RESTful API를 통해 클러스터 내부 및 외부에서의 모든 작업을 관리

2) 스케줄러: 새로운 POD가 어느 워커 노드에 실행될지를 결정하고 예약 > 여러 요소를 고려하여 최적의 노드를 선택

3) 컨트롤 매니저: 클러스터의 전반적인 상태와 동작을 제어함.

4) etcd: 분산된 키-값 데이터베이스. 클러스터의 모든 상태 데이터를 안정적으로 저장. 모든 노드와 구성 요소 간의 일관성을 유지하는 데 사용됨

 

 

워커 노드

1) kubelet: 마스터 노드에서 전달된 POD스펙을 기반으로 노드 상에서 POD를 관리하고 실행(마스터 노드와 워커 노드간 연결을 담당). 컨테이너 런타임과 통신하여 POD의 상태를 유지하고, 로그 및 리소스 사용량을 수집(하나의 에이전트라고 생각하면 이해하기 쉬움)

2) 컨테이너 런타임: 컨테이너를 실행하고 관리하는 소프트웨어(도커 등)

3) kube-proxy: 서비스의 네트워크 프록시와 같은 역할을 수행하여 서비스 디스커버리와 로드 밸런싱을 제공함.

 

 

kubectl

1) POD, 서비스, 볼륨 등 쿠버네티스 리소스의 생성, 수정, 삭제 등을 관리

2) 클러스터의 상태를 조회하고 리소스에 대한 정보를 가져옴

3) 디버깅과 모니터링을 위한 도구로 사용됨

 

 

파드(POD)

1) 쿠버네티스에서 가장 기본적인 배포 단위. 하나 이상의 컨테이너를 포함하는 단위(일반적으로 1:1의 관계)

2) 쿠버네티스는 하나의 컨테이너를 개별적으로 배포하는 것이 아닌 POD 단위로 배포

3) POD 내의 컨테이너들은 IP, Port를 공유함

4) POD가 재시작되면 IP가 변경되며 POD 내의 컨테이너들의 파일들이 모두 사라지게 됨

5) POD 내에 배포된 컨테이너 간에는 볼륨을 공유할 수 있음

 

 

Volume

1) DB와 같이 영구적으로 파일을 저장해야 하는 경우 POD가 기동될 때 컨테이너에 마운트하여 사용됨

2) POD와 라이프사이클이 같음

 

 

Service

1) 클러스터 내의 애플리케이션에 대한 네트워크 접근성을 제공

2) 여러 개의 POD에 대한 네트워크 경로와 EndPoint을 제공하여 애플리케이션이 네트워크를 통해 서로 통신할 수 있도록 구성

3) Label Selector로 POD를 선택하여 하나의 EndPoint로 노출시킬 수 있음

     Label Selector: 서비스를 정의할 때 어떤 POD들을 Service로 묶을 것인지를 정의하는데 사용

4) 스케일링이 가능하며, POD의 수가 증가하거나 감소해도 서비스의 IP 주소나 DNS 이름은 변경없음

5) 애플리케이션의 네트워크 관리를 단순화하고, 동적 환경에서의 운영을 효과적으로 지원

 

 

Service 유형

1) ClusterIP: 기본적인 서비스 유형, 클러스터 내부에서만 접근 가능한 가상 IP를 제공
2) NodePort: 각 노드의 특정 포트를 통해 서비스에 외부에서 접근할 수 있도록 허용
3) LoadBalancer: 클라우드 프로바이더에서 제공하는 로드 밸런서를 사용하여 외부에서 서비스에 접근할 수 있도록 허용
4) ExternalName: 외부 서비스에 대한 CNAME을 제공하여 쿠버네티스 내부에서 외부 서비스에 접근할 수 있도록 허용

 

 

Namespace

1) 하나의 쿠버네티스 클러스터 내의 리소스를 논리적으로 그룹화하고 분리하는 메커니즘

2) POD, Service 등의 Namespace별로 생성, 관리가 될 수 있고, 사용자의 권한도 Namespace별로 나눠서 부여할 수 있음

3) Namespace별로 리소스의 할당량을 지정할 수 있고, 리소스를 나눠서 관리할 수 있음

4) 다른 Namespace의 POD간 통신이 가능함

 

 

쿠버네티스 컨트롤러

1) 기본 오브젝트들을 생성하고 관리

2) Replication Controller(RC), ReplicaSet, DaemonSet, Job, StatefulSet, Deployment 등이 있음

 

 

RC(Replication Controller)

1) POD를 관리해주는 역할

2) 지정된 숫자로 POD를 기동시키고 관리

3) Replica의 갯수, Pod Selector, Pod Template 3가지로 구성되어 있음

4) Equality 기반 Selector를 이용

 

 

ReplicaSet

1) RC의 새버전

2) Set기반의 Selector를 이용

 

 

Deployment

1) RC와 ReplicaSet의 상위 추상화 개념

2) 실제 운영에서는 Deployment를 사용

 

 

DS(DaemonSet)

1) POD각 각 노드에서 하나씩만 띄워지도록 하는 POD를 관리하는 컨트롤러

2) DS에 의해 관리되는 POD는 모든 노드에 균등하게 하나씩만 배포됨

3) 특정 노드에만 POD를 배포할 수 있도록 POD의 node selector를 이용해 라벨에서 특정 노드만을 선택할 수 있게 지원

 

 

Job

1) 배치 또는 한 번 실행되고 끝나는 형태의 워크로드 모델을 지원하는 컨트롤러

2) Job에 의해 관리되는 POD는 Job이 종료되면 POD 또한 같이 종료됨

3) Job을 정의할 때 컨테이너 스펙 부분에 image뿐만 아니라, 컨테이너에서 Job을 수행하기 위한 CMD를 같이 입력해 사용

 

728x90
반응형

BELATED ARTICLES

more