Kubernetes란?
Kubernetes는 Google의 Go언어로 작성된 컨테이너 오케스트레이터입니다.
이전에는 Microsoft Hyper-V 또는 VMware 제품과 같은 머신을 생성하고 배포하기 위한 솔루션이 있었습니다.
컨테이너에는 동일한 Docker가 있었습니다. 이를 통해 여러 컨테이너를 동시에 관리할 수 있었습니다.
하지만 아키텍처에서 컨테이너를 사용하는 서비스 및 애플리케이션을 위한 대규모 다중 구성요소 제품을
배포하는 데는 이 기술을 사용할 수 없었습니다.
그래서 등장한 것이 Kubernetes입니다.
Kubernetes를 사용하면 컨테이너를 사용하여 전체 클러스터 배포를 자동화하고, 다양한 정책과 설정을 유연하게 설정하고, 코드형 인프라 접근 방식을 사용할 수 있습니다.
동시에 Kubernetes를 사용하면 컨테이너의 가벼움으로 인해 서비 리소스를 보다 효율적으로 배포할 수 있습니다.
각각 별도의 운영 체제 복사본을 실행하는 가상 머신은 매우 느리고 많은 리소스를 소비합니다.
Kubernetes는 각 서버에 대해 별도의 OS를 요구하지 않고도 하나의 서버에서 컨테이너를 실행할 수 있습니다.
Kubernetes는 간단히 말해서 서버에 호스팅된 애플리케이션을 효과적으로 관리하고 장비의 리소스 활용도를 최적화할 수 있는 시스템입니다.
Kubernetes의 역할
- 가상 머신에 비해 애플리케이션을 쉽고 효율적으로 구축하고 배포할 수 있다.
- 지속적인 개발, 구현 및 배포 이 모든 것은 컨테이너 이미지가 빠르고 쉬운 롤백을 통해 안정적으로 구축 및 배포되도록 보장한다.
- 애플리케이션 및 기타 시스템의 성능에 대한 정보를 얻는다.
- 개발, 테스트, 출시 과정에서 동일한 환경을 사용하면 클라우드에서와 동일한 방식으로 노트북에서 작업할 수 있다.
- 클라우드 및 다른 운영체제와의 호환성 (Ubuntu, RHEL, CoreOS, 온프레미스, Google Kubernetes Engine)
- 애플리케이션을 빠르고 쉽게 배포하고 관리할 수 있는 작고 유연한 분산형 MS서비스
- 각 개별 컨테이너에 보장된 용량을 제공하는 리소스를 격리
Kubernetes의 핵심 구성요소
- Node - 가상머신
- Pod - 하나 이상의 컨테이너로 구성되고 단일 단위로 실행되는 애플리케이션 관리용 모듈
- API 서버
- 라벨은 피드와 같은 객체에 첨부되는 키/값 쌍
- 볼륨 - 여러 컨테이너를 동시에 실행하기 위한 리소스
- kube-scheduler - pod를 추적하고 pod가 실행될 가상 머신을 선택
- kube-controller-manager - 노드 및 포드에서 컨트롤러를 실행하기 위한 것
- kube-proxy – 포드의 트래픽 라우팅 관리를 담당
- kubelet – 포드 상태와 컨테이너 실행을 모니터링
- 컨테이너 런타임
이러한 구성 요소는 추가 도구를 사용하여 자동으로 설치하거나 수동으로 개별적으로 설치할 수 있습니다.
API를 사용하여 컨테이너와 통신하고 측정항목을 가져온 다음 시작, 중지 또는 강제 종료 명령을 실행합니다.
Kubernetes 애플리케이션 작동 방식
Kubernetes는 컨테이너를 자동으로 구성하고 관리합니다.
이 프로세스를 컨테이너 오케스트레이션이라고 합니다. 버튼 하나로 애플리케이션을 원래 버전으로 되돌리거나 성능을 높이거나 애플리케이션의 특정 부분을 업데이트할 수 있습니다.
Kubernetes가 컨테이너에서 애플리케이션을 실행하려면 런타임 환경을 갖추고 있어야 합니다.
Containerd, Docker, rkt 또는 runc와 같은 소프트웨어일 수 있습니다.
Kubernetes에 필요한 가장 중요한것은 실행 중인 Pod간에 노드 리소스를 동적으로 배포하는 것 입니다.
이 프로세스를 구현하기 위해 Kubernetes cAdviso를 사용하여 각 노드에서 성능 및 리소스 사용(CPU 및 RAM 지속 시간, 파일 및 네트워크 시스템의 부하)에 대한 정보를 수집합니다.
Kubernetes의 중요한 부분은 Pod에 수집된 애플리케이션 컨테이너를 자동으로 시작, 중지 및 관리하는 Kubelet 구성요소 입니다. 포드에 문제가 발생하면 Kubelet는 노드에서 포드를 재배포하고 다시 시작하려고 시도를 하게 됩니다.
정리
- 프로젝트에 수십 또는 수백 개의 컨테이너가 있는 경우 Kubernetes를 사용할 가치가 있습니다.
- Kubernetes 자체는 구성에 따라 리소스를 확장할 시기, 프로젝트에 새 용량을 추가할 시기 등을 결정
- Kubernetes 인프라를 유지 관리하는 것은 비용이 많이 드는 노력이며 강력한 전문가 팀이 필요합니다.
내부 팀에 많은 돈이 지출될 것이며, 외부 직원이 있으며 잘못된 계약자를 선택할 위험이 높습니다.
즉, 각 상황을 고려하여 프로젝트에 넣을 것이지 잘 판단해서 사용하는 것이 최선의 선택입니다.
감사합니다.
'Data Engineer' 카테고리의 다른 글
mongo db란? (0) | 2023.09.22 |
---|---|
Flask란? (Flask 설치방법) (0) | 2023.09.21 |
데이터 웨어하우스(Data Warehouse)와 데이터 레이크(Data Lake)의 차이점 (0) | 2023.09.15 |
정형 데이터 vs 반정형 데이터 vs 비정형 데이터 (0) | 2023.09.15 |
Apache Spark란? (0) | 2023.09.08 |