이번 프로젝트에서 쿠버네티스는 제가 맡은 부분은 아니긴 하지만,
프로젝트를 진행하면서 저도 개념을 알고 있어야 할 것 같아서 간단하게 개념을 정리해보고 넘어가려 합니다!
kubernetes.io/ko/docs/concepts/overview/what-is-kubernetes/
주 내용은 쿠버네티스 공식 문서와 조대협님의 블로그를 참고하여 작성하였습니다.
쿠버네티스란?
컨테이너화된 디플로이 자동화, 스케일링, 컨테이너화된 어플리케이션의 관리를 위한 오픈 소스 시스템입니다. 즉, 컨테이너별 자원 제한, 문제 발생 시 자동 재시작, 컨태이너 배포 및 확장 등의 기능을 지원하는 컨테이너 오케스트레이션 도구입니다.
초기에는 어플리케이션이 물리 서버에서 실행이 되고, 한 물리 서버에서 여러 어플리케이션을 실행하게 되어 한 어플리케이션이 리소스의 대부분을 차지하게 되어 다른 어플리케이션의 성능에 영향을 주는 경우가 생길 수 있었습니다. 이를 해결하기 위해 여러 물리 서버에 각 어플리케이션을 실행하는 방식을 수행하였으나 물리 서버를 많이 유지하기 위해 많은 비용이 드는 등의 문제가 있었습니다.
이 해결책으로 가상화 기술로 단일 물리 서버의 CPU에서 여러 VM을 실행하는 방식을 수행하였습니다. 가상화 기술을 사용하면 어플리케이션간 격리를 할 수 있으므로 일정 수준의 보안성을 제공할 수 있습니다. 또한 리소스를 효율적으로 사용할 수 있는 등의 많은 이점이 있습니다.
현재 많은 기업에서는 컨테이너를 이용하여 개발을 합니다. 컨테이너는 VM과 사용할 때 비슷한 느낌이지만 어플리케이션과 운영체제를 공유합니다. VM과 마찬가지로 컨테이너에는 파일 시스템, CPU, 메모리, 프로세스 공간 등이 있습니다.
(예전에 이에 대해 쓴 글이 있습니다! - hanjustudy.tistory.com/14?category=789280)
가상 머신과 컨테이너를 비교해보면,
격리 수준에 있어서 가상머신은 Host OS와 다른 VM으로부터 완벽하게 격리되는 반면에, 컨테이너는 Host와 다른 컨테이너로부터 어느정도 격리되긴 하지만 VM만큼은 아닙니다.
운영체제의 경우 가상머신은 커널을 포함하여 완전한 운영체제를 실행하므로 더 많은 리소스가 필요하지만, 컨테이너는 어플리케이션에 필요한 서비스만 포함하도록 조정하여 시스템 리소스 사용을 줄일 수 있습니다.
(더 많은 차이점을 보려면 - docs.microsoft.com/ko-kr/virtualization/windowscontainers/about/containers-vs-vm 에 잘 비교가 되어 있습니다!)
쿠버네티스는 어플리케이션을 포장하고 실행하는 좋은 방법입니다. 실제 서비스가 구동되는 환경에서는 어플리케이션을 실행하는 컨테이너를 관리하고 가동 중지 시간 등을 확인할 수 있어야 합니다. 만약 어떤 컨테이너가 다운이 된다면 다른 컨테이너를 다시 시작해야하는데, 이것을 직접 손으로 다시 하는 것보다 시스템이 직접 해준다면 더욱 편리할 것입니다.
쿠버네티스로 할 수 있는 일들을 나열해보면,
서비스 디스커버리와 로드 밸런싱
쿠버네티스는 DNS 이름을 사용하거나 자체 IP 주소를 사용하여 컨테이너를 노출할 수 있습니다. 컨테이너에 대한 트래픽이 많으면, 쿠버네티스는 네트워크 트래픽을 로드밸런싱하고 배포하여 배포가 안정적으로 이루어질 수 있습니다.
(이 부분은 이번 프로젝트를 수행하면서 필요한 부분이라 가능하다면 프로젝트를 진행하면서 직접 해보고 글로 남기도록 하겠습니다!)
스토리지 오케스트레이션
쿠버네티스를 사용하면 로컬 저장소, 공용 클라우드 공급자 등과 같이 원하는 저장소 시스템을 자동으로 탑재 할 수 있습니다.
자동화된 롤아웃과 롤백
쿠버네티스를 사용하여 배포된 컨테이너의 원하는 상태를 서술할 수 있으며 현재 상태를 원하는 상태로 설정한 속도에 따라 변경할 수 있습니다. 예를 들어 쿠버네티스를 자동화해서 배포용 새 컨테이너를 만들고, 기존 컨테이너를 제거하고, 모든 리소스를 새 컨테이너에 적용할 수 있습니다.
이외에도 자동화된 빈 패킹, 자동화된 복구 등이 있습니다.
쿠버네티스 용어
클러스터
클러스터는 컨테이너화된 어플리케이션을 실행하기 위한 일련의 노드 머신입니다. 만약 쿠버네티스를 실행 중이라면 클러스터를 실행하고 있는 것입니다. 클러스터에는 마스터 노드와 워커 노드가 있습니다.
마스터
마스터는 어느 어플리케이션을 실행하고 어플리케이션이 어느 컨테이너 이미지를 사용할지와 같이 클러스터를 원하는 상태로 유지 및 관리합니다. 마스터는 클러스터 전체를 관리해주는 컨트롤러입니다.
노드
컨테이너가 배포될 물리 서버 또는 가상 머신입니다.
파드
단일 노드에 배포된 하나 이상의 컨테이너 그룹입니다. 파드는 쿠버네티스에서 가장 기본적인 배포 단위로 여러개의 컨테이너를 묶어서 파드 단위로 관리할 수 있게 해줍니다. 파드 내의 컨테이너는 IP와 포트를, 그리고 디스크 불륨을 공유한다고 하는데 조만간 개발할 때 다시 언급하겠습니다!
네임스페이스
네임스페이스는 한 쿠버네티스 클러스터 내의 논리적인 분리 단위입니다. 클러스터는 동일한 물리 클러스터를 기반으로 하는 여러 가상 클러스터를 지원하고 이런 가상 클러스터를 네임스페이스라고 합니다.
추가적인 부분은 추후 개발을 해보며 포스트하도록 하겠습니다~
'개발 일지' 카테고리의 다른 글
[개발일지] Kubernetes를 활용한 ELK 구축 (1/3) (0) | 2020.11.20 |
---|---|
[개발 일지] Elastic Stack (Elastic Search, Logstash, Kibana, Beats) (0) | 2020.11.06 |