쿠버네티스의 개념에 대해서 설명하고 있습니다. 도커와 달리 진입 장벽이 높다고 들었는데, 읽어보면서 조금 어렵다고 생각했습니다. 확실히 편해질수록 기능이 많고, 복잡한 것은 어쩔 수 없는 것 같습니다.
그림과 실습으로 배우는 도커 & 쿠버네티스 - 여덟 번째 이야기
쿠버네티스란?
위의 목차를 클릭하면 해당 글로 자동 이동 합니다.
쿠버네티스란?
- 쿠버네티스는 '컨테이너 오케스트레이션 도구' 이다.
- (docker swarm 역시 오케스트레이션 도구라고 알고 있는데, 무슨 차이가 있는지 공부를 해보면 좋을 것 같다.)
- 오케스트레이션은 시스템 전체를 통괄하고 여러 개의 컨테이너를 관리하는 일을 말한다.
- 'k8s'로 줄여쓰기도 한다. k와 s 사이에 여덟 개의 글자가 있다는 뜻이다.
- 쿠버네티스는 여러 개의 컨테이너 (서버) 를 관리할 때 쓰이므로, 일반적인 개발자들이 쓸 일이 많지 않다.
- 도커는 한 대의 물리적 서버에서 실행되는 경우가 많았지만, 쿠버네티스는 여러 대의 물리적 서버가 존재하는 것을 전제로 한다.
- 각 물리적 서버마다 여러 대의 컨테이너가 실행된다.
- 쿠버네티스는 이런 환경에서 컨테이너 관리의 수고를 덜어준다.
- 쿠버네티스는 '마스터 노드' 와 '워커 노드' 로 구성된다. 노드는 물리적 서버와 일치하는 개념이라고 볼 수 있다.
- 마스터 노드:
- 컨테이너를 실행하지는 않으며, 워커 노드에서 실행되는 컨테이너를 관리한다.
- 도커 엔진과 같은 컨테이너 엔진이 설치되지 않는다.
- 워커 노드:
- 실제 서버로 컨테이너가 동작하는 서버이다.
- 컨테이너 엔진이 설치되어 있다.
- 마스터 노드와 워커 노드로 구성된 쿠버네티스 시스템을 '클러스터' 라고 한다.
- 워커 노드는 마스터 노드의 설정대로 알아서 관리되므로 관리자가 직접 워커 노드를 관리하는 일은 없다.
- 쿠버네티스는 컨테이너 엔진과는 별개의 소프트웨어이다.
- 쿠버네티스를 사용하기 위해서는 쿠버네티스 소프트웨어와 CNI (가상 네트워크 드라이버) 를 설치해야 한다.
- 여기서 가상의 네트워크는 도커와는 다르다.
- 도커에서는 물리적 컴퓨터 안에서의 네트워크이고, 쿠버네티스에서는 서로 다른 물리적 컴퓨터를 로컬 네트워크로 묶을 때 사용된다.
- 마스터 노드에는 컨테이너 상태 관리를 위한 'etcd' 라는 데이터베이스가 설치된다.
- 마스터 노드를 관리하는 컴퓨터에는 'kubectl' 을 설치한다.
- 마스터 노드는 '컨트롤 플레인' 을 통해 워커 노드를 관리한다.
- kube-apiserver: 외부와 통신하는 프로세스, kubectl로부터 명령을 전달받아 실행함.
- kube-controller-manager: 컨트롤러를 통합, 관리, 실행한다.
- kube-scheduler: 파드를 워커 노드에 할당한다.
- cloud-controller-manager: 클라우드 서비스와 연동해 서비스를 생성한다.
- etcd: 클러스터 관련 정보들을 관리하는 데이터베이스
- 워커 노드에서는 'kube-let' 와 'kube-proxy' 가 동작한다.
- kube-let: kube-schedular와 연동됨. 파드 배치, 파드 모니터링 및 스케줄러에 통지.
- kube-proxy: 네트워크 통신의 라우팅 매커니즘.
- 쿠버네티스는 항상 바람직한 상태를 유지한다.
- 컨테이너는 n개 볼륨은 m개로 구성해라 -> YAML 파일에 정의 -> 쿠버네티스는 이 상태를 유지하려고 한다.
- 도커 컴포즈는 옵션을 지정할 수는 있으나 모니터링 기능이 없으므로 컨테이너를 만들 때 외에는 관여하지 않는다.
- 예를 들어, 컨테이너 한 개가 망가지면, 쿠버네티스는 망가진 컨테이너를 제거하고 새 컨테이너로 교체하여 상태를 유지한다.
- 컨테이너를 삭제하고 싶으면 직접 삭제하는 것이 아니라 정의 파일을 수정해야 한다.
- 직접 삭제하면 쿠버네티스는 정의된 바람직한 상태를 유지하기 위해 컨테이너를 다시 생성할 것이다.
- 쿠버네티스를 이해하려면 '로드 밸런서' 도 알아야 한다.
- 로드 밸런싱이란 한 대의 서버에 모든 요청이 집중되지 않도록 요청을 분산시키는 것이다.
- 서버에 들어오는 요청은 일정하지 않다. 많을 때 또는 적을 때 둘 중 하나의 기준으로 서버를 구축하면 문제가 생길 수 있다.
- 요청이 적을 때를 기준으로 한다면: 서버 수가 적어서 요청이 많아지면 부하가 발생해 응답이 지연되거나 망가질 수 있다.
- 요청이 많을 때를 기준으로 한다면: 요청이 적을 때 몇 개의 서버가 놀고 비용이 낭비될 수 있다.
- 쿠버네티스는 이런 문제를 해결하기 위해 등장했다.
- 클라우드 환경에서 서버를 쉽게 늘렸다가 줄일 수 있어 확장성이 좋다.
- 도커 컴포즈와의 차이를 또 언급하자면 쿠버네티스는 정의 파일이 데이터베이스로 관리되고, 커맨드를 사용해 수정이 가능하다.
쿠버네티스의 구성과 관련 용어
- 파드:
- 컨테이너와 볼륨을 함께 묶은 것이다. 기본적으로 파드 하나에 컨테이너가 한 개이지만, 여러 개일 수도 있다. 볼륨의 경우 없을 수도 있다.
- 서비스:
- 파드를 모은 것이다. 서비스가 관리하는 파드는 구성이 동일하고 이 파드들은 서로 다른 워커 노드에서 동작할 수도 있다.
- 쉽게 생각하면 로드 밸런서라고 볼 수 있다. 각 서비스는 고정 IP (Cluster IP) 를 부여받고, 이 주소로 들어오는 통신을 관리한다.
- 그러나 서비스가 분배하는 통신은 하나의 워커 노드로 국한된다. 여러 워커 노드 간의 분배는 실제 '로드 밸런서' 또는 '인그레서' 가 담당한다. 이들은 별도의 노드 (워커 노드와 마스터 노드가 아니다.) 에서 동작하거나 물리적 전용 하드웨어이다.
- 서비스 외에도 파드의 수를 관리하는 '레플리카 세트' 가 존재한다.
- 장애 등의 이유로 파드가 종료됐을 때 모자라는 파드를 보충하거나, 정의 파일이 수정되면 그에 맞게 파드 수를 조절한다.
- 즉, 파드는 서비스와 레플리카 세트에 의해 관리된다.
- 레플리카 세트가 관리하는 동일한 구성의 파드를 '레플리카' 라고도 부른다.
- 레플리카 세트는 다루기가 어려워 단독으로 쓰이는 경우는 드물다. 따라서 '디플로이먼트' 와 함께 쓰인다.
- 디플로이먼트는 파드의 배포를 관리한다. 파드가 사용하는 이미지 등 파드에 대한 정보를 갖고 있다.
- 파드, 서비스, 레플리카세트, 디플로이먼트 등을 '리소스' 라고 부른다.
- 이런 리소스들은 50 여 종류가 있는데, 일부만 많이 사용된다.
- 초보자라면 앞서 설명한 네 개 정도만 알아도 된다.
- 파드, 서비스, 레플리카 등을 '00 오브젝트' 라고도 한다.
- 리소스들은 etcd에서 '00 오브젝트' 형태로 관리되기 때문이다.
- 데이터베이스에 오브젝트로 등록된 정보를 바탕으로 인스턴스를 생성하게 된다.
- 서버 한 대로 쿠버네티스 사용이 가능할까?
- 가능하다. 파드가 망가지더라도 자동으로 파드를 재생성해 대체하므로 관리가 편해진다. 특히, 클라우드 환경에서는 직접 관리가 필요없어 더욱 효과적일 수 있다.
- 또, 표준화된 실행 환경이므로 시스템을 납부할 때도 적합하다. 시스템이 쿠버네티스를 기반으로 한다면 설정 정보도 같이 배포되므로 설치 후 설정이 간단하다.
쿠버네티스를 이해하기 위해서는 필요한 개념들이 많은 것 같다. 그리고 한 대의 서버로도 쿠버네티스를 사용할 수 있다고 놀랐던 것 같다. 근데, 앞서 docker swarm도 오케스트레이션 도구라고 했었는데, 작은 규모라면 docker swarm이 더 편할 수도 있다고 한다.
추천글
2024.08.18 - [책으로 하는 공부] - [책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여섯 번째 이야기
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여섯 번째 이야기
이번 시간이 도커에 대해 설명하는 마지막 부분입니다. 다음 게시글은 도커 컴포즈, 그리고 그 다음은 쿠버네티스에 대해 다룰 예정입니다. 본 게시글은 도커 이미지를 만들고, 내가 만든 이미
se-dobby.tistory.com
2024.08.18 - [책으로 하는 공부] - [책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 일곱 번째 이야기
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 일곱 번째 이야기
책에서는 도커 컴포즈를 마지막으로 도커에 관한 설명이 끝납니다. 현재까지는 글쓴이도 아는 내용이라 어렵지 않았던 것 같습니다. 책 자체는 아주 좋은 것 같습니다. 도커에 대해 이해하는 것
se-dobby.tistory.com
'책으로 하는 공부' 카테고리의 다른 글
[책 요약] 객체지향의 사실과 오해 - 첫 번째 이야기 (0) | 2024.08.22 |
---|---|
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 아홉 번째 이야기 (0) | 2024.08.20 |
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 일곱 번째 이야기 (0) | 2024.08.18 |
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 여섯 번째 이야기 (0) | 2024.08.18 |
[책 요약] 그림과 실습으로 배우는 도커 & 쿠버네티스 - 다섯 번째 이야기 (0) | 2024.08.15 |