728x90
반응형
쿠버네티스는 어떤 경우에 사용하고 어떤 장점들이 있는지 알아보자
쿠버네티스(Kubernetes) : 컨테이너 오케스트레이션 도구의 일종, 여러 개의 컨테이너(=서버)를 관리하는 도구
- k와 s사이에 8개의 글자가 있다는 의미로 k8s 라고 줄여 쓰기도 한다.
- 일반적인 프로그래머가 쿠버네티스를 활발하게 사용할 일은 많지 않다.
- 다만 쿠버네티스로 어떤 일을 할 수 있는가에 대한 지식은 시스템을 개발할 때 유용할 수 있다.
- 쿠버네티스로 관리되는 시스템은 이를 전제로 개발해야, 이점을 제대로 살릴 수 있다.
- 쿠버네티스는 여러 대의 물리적 서버가 존재한다는 것을 전제로 한다.( 또는 여러 가상 머신)
- 쿠버네티스는 번거로운 컨테이너 생성이나 관리의 수고를 덜어주는 도구다.
- 도커 컴포즈에서 사용되는 컴포즈 파일과 비슷한 정의 파일(매니페스트 파일)만 작성하면, 이 정의에 따라 모든 물리적 서버에 컨테이너를 생성하고, 생성한 컨테이너를 관리해준다.
쿠버네티스의 '마스터 노드'와 '워커 노드'가 무엇인지 알아보고, 각 역할이 무엇이고 사용자의 명령이 어떤 경로를 통해 전달되는지 이해해보자
클러스터의 구성 - 마스터 노드와 워커 노드
- 쿠버네티스 = 마스터 노드 + 워커 노드
- 마스터 노드 : 전체적인 제어를 담당하는 노드
- 컨테이너를 실행하지는 않고, 워커 노드에서 실행되는 컨테이너를 관리하는 역할
- 따라서 도커 엔진 같은 컨테이너 엔진도 설치되지 않는다.
- 워커 노드 : 실제 동작을 담당하는 노드
- 컨테이너가 실제 동작하는 서버로 컨테이너 엔진이 설치돼야 하는 노드이다.
- 노드: 물리적 서버와 일치하는 개념이라 보면 되고, 클러스터 구성 방법에 따라 물리적 서버가 없을 수도 있음
- 마스터 노드 : 전체적인 제어를 담당하는 노드
- 이렇게 마스터 노드와 워커 노드로 구성된 쿠버네티스 시스템을 클러스터라고 한다.
- 클러스터는 사람이 개입하지 않아도 마스터 노드에 설정된 내용에 따라 워커 노드가 관리되며 자율적으로 동작함
- 관리자는 마스터 노드의 초기 설정 후 가끔 조정만 하면 되고, 직접 워커 노드를 관리하는 일도 없다.
- 쿠버네티스는 도커 엔진 등의 컨테이너 엔진과는 별개의 소프트웨어다.
- 그래서, 쿠버네티스 SW와 CNI(=Container Networking Interface=가상 네트워크 드라이버)를 설치해야 한다.
- 마스터 노드에는 컨테이너 등의 상태 관리를 위한 etcd라는 데이터베이스가 설치된다.
- 워커 노드에는 도커 엔진 같은 컨테이너 엔진이 필요하다.
- 마스터 노드를 설정하는 관리자의 컴퓨터에는 kubectl을 설치해야 하고, kubecctl을 설치해야 마스터 노드에 로그인하여 초기 설정을 하거나 추후 조정이 가능하다.
컨트롤 플레인과 kube-let
- 마스터 노드는 컨트롤 플레인을 통해 워커 노드를 관리한다.
- etcd 외에는 모두 쿠버네티스에 포함되어 있어, etcd와 쿠버네티스만 설치하면 모든 설치가 완료된다.
- 마스터 노드 내 컨트롤 플레인의 구성
항목 | 내용 |
kube-apiserver | 외부와 통신하는 프로세스, kubectl로부터 명령을 전달받아 실행한다. |
kube-controller-manager | 컨트롤러를 통합 관리&실행한다. |
kube-scheduler | 파드를 워커 노드에 할당한다. |
cloud-controller-manager | 클라우드 서비스와 연동해 서비스를 생성한다. |
etcd | 클러스터 관련 정보 전반을 관리하는 데이터베이스 |
- 워커 노드에서는 kube-let과 kube-proxy가 동작한다.
- kube-let가 마스터 노드의 kube-scheduler와 연동하며 워커 노드에 컨테이너 또는 볼륨을 배치하고 실행한다.
- 이들 역시 쿠버네티스에 포함돼 있어, 따로 설치할 필요없다.
- 워커 노드의 구성
항목 | 내용 |
kube-let | 마스터 노드에 있는 kube-scheduler와 연동하며 워커 노드에 파드를 배치하고 실행한다. 또 실행중인 파드의 상태를 정기적으로 모니터링하며 kube-scheduler에 통지한다. |
kube-proxy | 네트워크 통신의 라우팅 메커니즘 |
정의된 상태를 항상 유지하는 쿠버네티스
- '컨테이너 몇 개, 볼륨 몇 개로 구성하라' 와 같이 YAML에 정의된 상태를 유지하기 위해, 자동으로 컨테이너를 생성하거나 삭제하는 것이 쿠버네티스이다.
- 컨테이너를 만들 때 외에는 관여하지 않는 도커 컴포즈와 다르게, 쿠버네티스는 특정 상태를 유지하는 기능이 있다.
- 또한 쿠버네티스는 여러 대의 물리적 서버에 걸쳐 시스템을 구성할 수 있다.
- 컨테이너 4개로 정의된 상태에서, 컨테이너 하나가 종료되어 3개가 되면 쿠버네티스는 자동으로 4개를 맞추기 위해 컨테이너를 자동으로 생성한다.
- 쿠버네티스를 사용하는 시스템에서 컨테이너를 삭제하고 싶다면,
컨테이너 삭제 명령어를 입력하는 것이 아닌, 정의 파일에서 컨테이너 개수를 수정해야 한다. - 쿠버네티스의 목표는 특정 상태를 유지하는 것이다. 사람이 개입해서 컨테이너를 삭제해서는 안된다.
로드 밸런서
- 로드 밸런싱 : 한 대의 서버에 모든 요청이 집중되지 않도록 여러 대의 서버를 갖추고 요청을 각 서버에 분산하는 것
- 하지만 시스템은 요청이 많은 시기와 그렇지 않은 시기가 있다.
- 그렇지 않은 시기에는 시스템이 놀기 때문에 비용이 낭비된다.
- 이 비용 문제를 해결하는 것이 도커와 쿠버네티스!!
- 부하에 맞춰 컨테이너를 늘리거나 줄일 수 있다면 놀고 있는 서버를 줄일 수 있다.
- 또 요청이 많은 시기에 물리적 서버가 아닌 클라우드에서 서버를 늘리면 좋다.
etcd의 역할
- 도커 컴포즈와 쿠버네티스의 차이점 중 하나는 정의 파일(매니페스트 파일)의 관리 방법이다.
- 쿠버네티스는 정의 파일이 데이터베이스로 관리된다.
- 쿠버네티스가 정의 파일을 읽어 들이면 내용은 etcd(데이터베이스)에 저장된다.
- 파드는 이 정보를 근거로 관리된다.
- 또 다른 차이점으론, 쿠버네티스의 정의 파일은 명령어로 수정이 가능하다.
728x90
'docker & kubernetes' 카테고리의 다른 글
쿠버네티스 사용하기 3 | Docker&Kubernetes 학습 35 (1) | 2025.01.01 |
---|---|
쿠버네티스 사용하기 2 | Docker&Kubernetes 학습 34 (2) | 2024.12.23 |
컨테이너 사용법 9 | Docker&Kubernetes 학습 32 (1) | 2024.12.14 |
컨테이너 사용법 8 | Docker&Kubernetes 학습 31 (1) | 2024.12.14 |
컨테이너 사용법 7 | Docker&Kubernetes 학습 30 (1) | 2024.12.11 |