728x90
들어가며,
요즘 어플리케이션이 복잡해지면서 도커를 통해 컨테이너 단위 묶어 다루는 환경을 구성한다.
컨테이너는 쉽게 어디서든 어플리케이션을 실행할 수 있도록 패키징하는 기술이며, 이러한 컨테이너를 다루는 도구가 도커와 쿠버네티스다.
도커에서 생성한 컨테이너를 배포, 확장, 관리하기 위해 오케스트레이션 플랫폼을 이용하는데, 오픈 소스이면서 확장성이 좋아 K8s는 현재 표준이 되었다.
어플리케이션 배포 환경의 변화
전통적인 배포 시대
- 물리적인 서버 위에 어플리케이션을 돌리다 보니 여러 어플리키이션의 리소스 한계를 겪음.
가상화된 배포 시대
- 가상화 VM을 통해 VM간의 어플리케이션을 격리하여 하드웨어 자원을 효율적으로 활용.
- OS위에 놓인 하이퍼바이저는 하나의 시스템 상에서 여러 개의 VM을 구동할 수 있도록 동작한다.
- 다시 VM에는 OS, Bin/Library 등의 환경을 놓고 여러 개의 App을 구동한다.
- 다만, VM역시 완전한 컴퓨터이기 때문에 OS를 설치해야 하며, 컨테이너 중심에 비해 무겁다는 단점.
컨테이너 개발 시대
- Container Runtime을 통해 VM기반에서의 단점을 해결한다.
- 별도의 OS를 설치할 필요없이 OS를 컨테이너 간의 공유 방식으로 동작하되, 전통 방식과 달리 컨테이너 별로 리소스 할당량을 나누었기 때문에 자원을 효율적으로 사용할 수 있게 된다.
- 다만, OS에 문제가 발생하면 전체 컨테이너에 영향을 준다는 단점이 있다.
쿠버네티스 클러스터의 구성
쿠버네티스 클러스터는 여러 노드를 가지고 있어 동시에 파드를 처리할 수 있다.
또한, 컨트롤 플레인에서 모든 Pod를 조율하여 각 노드에게 전달하므로 효율적으로 운영된다. 만약 하나의 노드에 문제가 생겨도 다른 노드가 역할을 대신 수행하여 계속해서 서비스를 제공할 수 있다.
컨프롤 플레인
- kube-apiserver : API를 노출하는 컴포넌트
- etcd : 클러스터의 데이터를 담는 저장소
- kube-scheduler : Pod를 감지하고 노드를 선택
- kube-controller-manager : 컨트롤러 프로세스를 실행하는 컴포넌트
- 노드 컨트롤러: 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.
- 잡 컨트롤러: 일회성 작업을 나타내는 잡 오브젝트를 감시한 다음, 해당 작업을 완료할 때까지 동작하는 파드를 생성한다.
- 엔드포인트슬라이스 컨트롤러: (서비스와 파드 사이의 연결고리를 제공하기 위해) 엔드포인트슬라이스(EndpointSlice) 오브젝트를 채운다
- 서비스어카운트 컨트롤러: 새로운 네임스페이스에 대한 기본 서비스어카운트(ServiceAccount)를 생성한다.
- cloud-controller-manager : 클라우드 별로 클러스터를 클라우드 API에 연결하고, (클라우드용, 클러스터용) 컴포넌트를 구분한다.
워커 노드
- kubelet : API서버와 통신하여 할당된 Pod에서 컨테이너가 확실하게 동작할 수 있도록 Pod를 실행하고 유지.
- kube-proxy : 클러스터 내의 서비스와 파드의 네트워크 정보를 기록하고 이 정보를 참조해 통신을 돕는다.
- 컨테이너 런타임 : 실제 컨테이너를 실행하는 도구 ex) 도
'Docker, K8S, AWS' 카테고리의 다른 글
Docker 도커란? 도커 이미지 사용 방법 (1) | 2024.01.23 |
---|