이 글은 아래 자료를 참고하여 작성되었습니다.
Udemy [Kubernetes For the Absolute Beginners]
https://kubernetes.io/docs/concepts/architecture/
1. 오케스트레이션이란?
컨테이너를 배포하고 관리하는 모든 프로세스! (ex) 컨테이너 사이의 의존성 관리, scale up / down)
쿠버네티스 역시, 대표적인 컨테이너 오케스트레이션 기술이다.
2. 쿠버네티스의 장점
- 고가용성 (High Availability):
- 장애가 발생한 컨테이너를 자동으로 교체하고, 애플리케이션을 여러 노드에 분산 배치하여 단일 장애점(Single Point of Failure)을 방지한다
- 서비스 디스커버리와 로드 밸런싱 (Service Discovery and Load Balancing):
- 파드 간의 원활한 통신을 지원하고, 로드 밸런싱을 통해 트래픽을 효율적으로 분배한다
- 확장성 (Scalability):
- 트래픽 증가 시 자동으로 새로운 파드를 생성하고, 트래픽 감소 시 파드를 줄여 자원을 효율적으로 사용한다
- 자동화된 배포 및 복구 (Automated Deployment and Recovery):
- 비정상 종료된 파드를 자동으로 복구하고, 애플리케이션의 원하는 상태를 유지한다
3. 쿠버네티스 아키텍처
- 노드 (Node): 노드는 쿠버네티스가 설치되어 있는 장비를 의미한다. (이때 장비는 물리 머신 / 가상 머신을 모두 포함한다)
- 클러스터 (cluster): 클러스터는 같이 묶여 있는 노드들의 집합이다. 하나의 노드에 문제가 발생하더라도, 애플리케이션은 다른 노드에서 여전히 접근가능하다
- 마스터 노드(Master Node): 클러스터를 관리하는 책임이 있는 노드로서, 클러스터의 상태를 관리하고 워커 노드에서 실행되는 애플리케이션의 배포와 관리를 책임진다.
- API 서버 (API Server): 클러스터의 주요 진입점으로, 클라이언트의 요청을 받아들이고 쿠버네티스 클러스터의 상태를 관리한다. RESTful API를 통해 클러스터와 상호작용한다.
- 스케줄러 (Scheduler): 새로 생성된 파드를 적절한 워커 노드에 할당한다. 리소스 요구사항, 정책, 우선순위 등을 고려하여 파드를 배치한다.
- 컨트롤러 매니저 (Controller Manager): 여러 컨트롤러를 실행하여 클러스터의 상태를 관리한다. 노드 컨트롤러, 레플리케이션 컨트롤러, 엔드포인트 컨트롤러 등이 포함됨!
- 노드 컨트롤러 (Node Controller): 클러스터의 노드를 관리하고, 노드의 상태를 모니터링한다. 노드가 응답하지 않을 경우 해당 노드를 비활성화하고, 그 노드에서 실행 중인 모든 파드를 다른 노드로 재배치한다.
- 레플리케이션 컨트롤러 (Replication Controller): 특정 파드의 복제본(replica) 수를 유지하여 애플리케이션의 가용성과 확장성을 보장한다.
- 엔드포인트 컨트롤러 (Endpoint Controller): 서비스와 파드 간의 네트워크 연결을 관리한다. 서비스와 관련된 파드의 IP 주소 목록을 유지하고 업데이트한다
- etcd: 분산키-값 저장소로, 여러 노드와 마스터를 포함한 클러스터의 모든 정보를 분산 방식으로 저장하며, 고가용성을 위해 여러 인스턴스로 구성될 수 있다. 마스터 간의 충돌을 방지하기 위한 lock 기능을 구현한다
- 워커 노드 (Worker Node): 워커 노드는 애플리케이션 컨테이너를 실제로 실행하는 역할을 수행한다. 각 워커 노드에는 여러 파드(Pod)가 배치되며, 이를 통해 애플리케이션의 기능이 제공된다.
- Kubelet: 각 워커 노드에서 실행되는 에이전트로, API 서버와 통신하여 파드를 생성, 업데이트 및 삭제한다. 파드와 컨테이너의 상태를 주기적으로 확인하고 보고하고, 노드에서 컨테이너가 예상대로 실행되도록 보장한다.
- 컨테이너 런타임 (Container Runtime): 컨테이너를 실행하는 소프트웨어. 파드 내의 컨테이너를 생성하고 관리한다. Docker, containerd, CRI-O 등이 사용될 수 있다.
- Kube-Proxy: 쿠버네티스 클러스터에서 서비스의 네트워크 프록시와 로드 밸런싱을 담당하는 컴포넌트
- IP 주소 및 포트 관리 : 각 서비스에 대해 가상 IP 주소(ClusterIP)를 할당하고, 이를 사용하여 클러스터 내부에서 서비스에 접근할 수 있게 한다. 클러스터 외부에서 접근할 수 있도록 NodePort나 LoadBalancer 타입의 서비스를 설정할 수도 있다.
- 네트워크 프록시 (Network Proxy): 클러스터 내부에서 서비스로 들어오는 요청을 해당 서비스의 파드로 포워딩하는 역할을 한다. 이를 통해 클라이언트는 서비스의 가상 IP 주소로 요청을 보내고, kube-proxy는 이 요청을 실제로 처리할 파드로 전달한다.
- 로드 밸런싱: 서비스 타입이 LoadBalancer인 경우, kube-proxy는 클러스터 외부에서 들어오는 요청을 서비스에 연결된 다양한 파드로 분산시킨다.
'Kubernetes' 카테고리의 다른 글
6. Core Concepts - pod (0) | 2024.06.24 |
---|---|
5. Introduction - Minikube (1) | 2024.06.24 |
4. Introduction - Kubernetes with YAML (1) | 2024.06.24 |
3. Introduction - YAML (0) | 2024.06.18 |
1. Kubernetes Overview - container (0) | 2024.06.16 |