[k8s] 쿠버네티스 도입
도커를 사용해 여러 애플리케이션을 배포할 때, 한 컨테이너에 문제가 생겨 종료되는 경우 관리자가 문제를 확인하고 컨테이너를 다시 시작해 줘야 한다.
또, 특정 컨테이너에만 트래픽이 몰리는 경우 역시 관리자가 문제를 확인하고 스케일링 작업을 수행해 줘야 한다.
AWS ECS 클라우드를 사용하는 경우 위에서 언급한 문제를 일부 해결해 주지만, 클라우드가 제공하는 기능에 의존적이게 돼 클라우드 변경 시 다른 방법을 찾아야 한다.
이런 문제를 해결하기 위해 Kubernetes가 도입됐다.
쿠버네티스는 컨테이너화된 애플리케이션의 배포, 확장 관리를 자동화하는 오픈소스 시스템으로 배포 환경에 관계없이 어디서든 사용될 수 있다.
1. 확장성
트래픽에 따라 컨테이너 인스턴스를 확장하거나 축소할 수 있고 로드밸런싱을 통해 트래픽을 분산시켜 서비스의 안정성을 높인다.
2. 헬스 체크
실패하거나 비정상적인 컨테이너는 다시 시작시키고 준비되지 않은 컨테이너에는 트래픽이 전송되지 않는다.
3. 롤백
애플리케이션을 버전 별로 관리하고 안전하게 배포할 수 있다.
신 버전에 문제가 발생할 경우 이전 버전으로 롤백할 수 있다.
이 외에도 배치 작업 실행, 데이터 관리 등 애플리케이션 배포에 사용할 수 있는 다양한 기능을 제공한다.
도커 컴포즈는 주로 단일 호스트 환경에서 여러 컨테이너를 묶어서 간단하게 실행할 수 있도록 하는 도구이고, 쿠버네티스는 대규모, 분산, 클러스터 환경에서 컨테이너들을 관리할 때 사용한다.
쿠버네티스는 여러 노드가 서로 연결돼 하나의 단위로 작업하는 클러스터로 구성된다.
Pod
쿠버네티스의 가장 작은 배포 단위로, 하나 이상의 컨테이너를 포함할 수 있어 저장 공간과 네트워크를 공유하고 어떻게 실행될지에 대한 정보를 가진다. (일반적으로는 하나의 컨테이너만 사용한다)
각 Pod는 고유한 IP 주소를 가지고 Pod 내부의 컨테이너들은 localhost로 서로 통신할 수 있다.
AWS의 ECS를 생각하면 편하다.
정확하진 않지만.. 도커 컴포즈로 묶인 컨테이너 그룹 정도로 이해하자.
도커에서 볼륨을 설정하지 않으면 데이터를 잃어버리는 것 처럼, Pod도 재시작 시 데이터를 잃어버린다.
하나의 Worker Node에서 하나 이상의 Pod를 사용할 수 있다.
같은 Pod 인스턴스를 여러개 생성해 스케일링하고 요청을 분산시킬 수 있다.
Worker Node
컨테이너들이 실행되는 서버로, 애플리케이션을 배포하는 컴퓨터라고 생각하면 된다. (컴퓨터 3대면 Worker Node 3개)
Pod 형태로 묶인 컨테이너를 실행하고 CPU, 메모리, 저장공간 등을 제공한다.
Worker Node 내부의 kube-proxy 컴포넌트는 클러스터 내 다른 노드나 외부 네트워크와의 통신을 관리하고 서비스 추상화를 통해 외부에서 Pod에 접속할 수 있게 한다. (기본적으로 iptables로 라우팅)
Worker Node의 Kublet은 각 노드에서 실행되는 주요 컴포넌트로, 마스터 노드와 통신하고 Pod의 실행을 관리한다.
Master Node
전체 클러스터의 모든 제어를 담당한다.
kube-apiserver : 클러스터와의 모든 통신의 중심점으로, 모든 컴포넌트들이 api를 통해 상호작용한다.
kube-scheduler : 새로 생성된 pod을 감지하고 worker node를 할당한다.
kube-controller-manager : 클러스트의 상태를 조정하고 내부를 지속적으로 모니터링한다.
etcd : 쿠버네티스의 모든 구성 데이터를 저장하는 데이터베이스 시스템이다.
컴퓨터 5대로 쿠버네티스를 설정하려면, 먼저 Master Node로 사용할 컴퓨터를 설정하고 쿠버네티스의 필수 컴포넌트를 설치한다.
나머지 컴퓨터들은 Worker Node로 사용된다. 역시 쿠버네티스 필수 컴포넌트를 설치하자.
마스터 노드에서 제공하는 토큰과 주소를 통해 각 워커 노드를 클러스터에 등록하고, 클러스터 내부의 Pod 간 통신이 가능하도록 네트워크 플러그인을 구성한다.
즉, 쿠버네티스는 구축된 클러스터를 활용할 뿐, 클러스터 구축은 개발자가 직접 해야 한다.
'DevOps > Docker && Kubernetes' 카테고리의 다른 글
[Docker] 네트워킹과 Docker Compose (1) | 2023.12.10 |
---|---|
[Docker] Dockerfile 프로젝트 배포하기 (2) | 2023.12.06 |
[Docker] Docker Compose (0) | 2023.03.24 |
[Docker] 도커 파일 시스템과 볼륨 (0) | 2023.03.09 |
[Docker] 도커 활용하기 (0) | 2023.03.08 |
댓글
이 글 공유하기
다른 글
-
[Docker] 네트워킹과 Docker Compose
[Docker] 네트워킹과 Docker Compose
2023.12.10 -
[Docker] Dockerfile 프로젝트 배포하기
[Docker] Dockerfile 프로젝트 배포하기
2023.12.06 -
[Docker] Docker Compose
[Docker] Docker Compose
2023.03.24 -
[Docker] 도커 파일 시스템과 볼륨
[Docker] 도커 파일 시스템과 볼륨
2023.03.09