쿠버네티스 아키텍쳐

greenTea·2023년 8월 16일
0

쿠버네티스를 사용하는 이유

컨테이너 기술의 탄생

컨테이너 기술, 특히 도커의 등장으로 인해 개발자들에게 운영 체제 레벨에서의 가상화를 제공하여 애플리케이션을 일관된 방식으로 배포할 수 있는 방법을 제공했습니다.
도커를 사용해보셨다면 아시겠지만 정말로 편리합니다. 만약 Redis를 사용한다고 가정한다면 기존에는 Redis를 다운받아서 자신의 환경에 맞게 설정을 맞춰줘야 했습니다. 그러나 도커를 이용한다면 정말 간편하게 명령어 하나로 실행이 가능하게 됩니다.
(실제로 저의 경우 MySQL이 컴퓨터에서 잘 작동하지 않아 도커로 띄워서 사용하고 있습니다.😭)

컨테이너 관리의 복잡성 증가

👍컨테이너의 인기가 높아지면서, 수십, 수백, 수천 개의 컨테이너를 효과적으로 관리하고 스케줄링하는 도구의 필요성이 증가했습니다. 이러한 컨테이너를 효율적으로 관리하고, 서비스 간의 통신, 스토리지 연결, 스케일링, 업데이트 등의 작업을 자동화하기 위한 도구가 필요했습니다.

쿠버네티스 탄생

🫠쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 플랫폼으로, 커뮤니티와 여러 기업의 지원을 받으며 현재 가장 널리 사용되는 컨테이너 오케스트레이션 도구로 자리매김했습니다. 쿠버네티스의 학습 곡선은 높지만 배워둔다면 수십, 수백개의 컨테이너를 보다 편리하게 관리할 수 있게 됩니다. (아직 배우는 입장이지만 여러 컨테이너를 띄워서 사용할 경우 정말 간편한 것을 느낄수 있었습니다.)

장점

쿠버네티스는 현대 애플리케이션의 배포, 스케일링 및 운영을 자동화하기 위한 오픈소스 컨테이너 오케스트레이션 도구로서, 다음과 같은 장점을 가지고 있습니다.

1. 스케일링
현대의 웹 애플리케이션은 수십만, 수백만, 혹은 그 이상의 사용자를 위해 설계되기 때문에, 그에 따른 트래픽의 증가를 처리하기 위한 자동 스케일링이 필수적입니다. 쿠버네티스는 애플리케이션의 요구에 따라 자동으로 파드를 추가하거나 제거할 수 있습니다.

2. 고가용성
쿠버네티스는 애플리케이션과 관련 인프라의 가용성을 최대화하기 위해 설계되었습니다. 한 서버나 데이터 센터에 장애가 발생하더라도, 쿠버네티스는 애플리케이션을 다른 곳에 자동으로 재배포하여 서비스 중단 시간을 최소화합니다.

3. 배포와 롤백
새로운 버전의 애플리케이션을 배포할 때, 쿠버네티스는 롤링 업데이트를 사용하여 서비스 중단 없이 업데이트를 수행합니다. 또한 문제가 발생하면 이전 버전으로 쉽게 롤백할 수 있습니다.

4. 로드 밸런싱
쿠버네티스는 애플리케이션의 트래픽을 자동으로 분산시켜, 서비스의 부하를 균등하게 나눕니다.

5. 자원 최적화
애플리케이션에 필요한 CPU, 메모리 등의 자원을 특정할 수 있어, 오버 프로비저닝 없이도 자원을 효율적으로 활용할 수 있습니다.

6. 컨테이너화의 복잡성 관리
컨테이너는 환경 일관성, 이식성, 의존성 관리 등 여러 가지 이점을 제공하지만, 대규모로 컨테이너를 운영하려면 복잡한 작업이 필요합니다. 쿠버네티스는 이러한 복잡성을 해결하여 컨테이너 운영을 쉽게 만들어 줍니다.

🫡쉽게 말해서 수 많은 컨테이너의 관리과 용이하다는 장점이 있다고 이해하시면 됩니다.


쿠버네티스 아키텍쳐

🫠쿠버네티스마스터 노드워커 노드로 구분됩니다.
마스터 노드를 통해 워커 노드를 관리할 수 있습니다.
위 그림에서 Control Plane = Master node라 생각하시면 되고 Node워커노드라고 이해하시면 됩니다.

마스터 노드

1. kube-apiserver
api-server를 통해 명령어를 입력받고 명령어가 올바른지등을 검증한 후에 다른 작업을 이어나갑니다.(다른 작업이란 다른 컴포넌트와 통신을 하며 진행하는 것을 말합니다.)

2. kube-scheduler
정말 쉽게 말해서 현재 등록된 워커 노드중 누가 가장 명령어를 실행하기에 적합한지를 파악하고 있는 컴포넌트라고 생각하시면 됩니다. api에서 scheduler에게 물어보게 되면 적합한 노드의 정보를 반환하게 됩니다.

3. kube-controller-manager
실행된 컨테이너의 개수와 상태등이 요구사항에 맞는지등을 파악하는 컴포넌트입니다. 예를 들어서 2개의 컨테이너가 실행되어야 하는데 1개만 실행되고 있다면 controller-manager를 통해 파악할 수 있게 됩니다.

4. etcd
key:value 형태로 값을 저장하는데 쿠버네티스 상태 정보, 워커노드 상태 정보등을 가지고 있습니다.

워커 노드

1. kubelet
워커 노드에서 가장 핵심적인 컴포넌트로, 마스터 노드API 서버와 통신합니다.
마스터 노드로부터 받은 스케줄링 명령을 바탕으로 해당 노드에 컨테이너가 포함된 Pod를 실행하고 관리합니다.
Pod의 상태를 주기적으로 체크하여 마스터 노드에 보고합니다.

2. kube-proxy
네트워크 프록시 역할을 하는 컴포넌트로, 워커 노드의 네트워크 규칙을 관리하고 이를 통해 서비스를 Pod에 라우팅합니다.

3. 컨테이너 런타임 엔진
컨테이너 실행을 위한 엔진으로 대표적인 예로 도커가 있습니다.(실제로도 도커를 많이 사용합니다.)

3. pod
쿠버네티스에서 가장 작은 배포 단위이며, 하나 이상의 컨테이너로 구성됩니다. 하나의 컨테이너를 실행하면 하나의 pod가 생긴다고 이해하시면 됩니다.

😎지금까지 쿠버네티스에 대한 기본적인 정보를 알아보았습니다.
쿠버네티스를 구성하는 방법에는 여러 방법이 있지만 편하신 방법을 이용하시면 될 것 같습니다.

profile
greenTea입니다.

0개의 댓글