-
쿠버네티스(Kubernetes,k8s)란?MSA & 쿠버네티스(Kubernetes) - k8s 2022. 3. 2. 16:30
쿠버네티스란?
쿠버네티스는 그리스어로 "키잡이"를 뜻에서 유래되었습니다.
쿠버네티스 또는 k8s로 불리는데 k8s라는 표기는 첫 글자 k와 마지막 글자 s 사이에 8글자를 나타내는 약식 표기입니다.
컨테이너화 된 애플리케이션의 자동 배포, 스케일링 등을 제공하는 오픈소스 기반의 관리시스템입니다.
구글에 의해 설계되었고 리눅스 재단인 CNCF에 의해 관리되고 있습니다.
도커를 포함하여 일련의 컨테이너 도구들과 함께 동작합니다.
컨테이너화된 애플리케이션..?
아래 글을 읽어보시면 좀 더 이해가 잘되실 텐데 VM에서 O/S가 빠져있는 것이 바로 컨테이너이며 이 컨테이너를 통해 배포함을 의미합니다.
쿠버네티스를 사용하는 이유?
전통적인 배포 시대
애플리케이션을 물리 서버에서 실행했습니다.
만약에 하나의 물리 서버에 여러 애플리케이션을 실행한다면, 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있습니다.
그렇게 되면 다른 애플리케이션은 리소스를 받지 못해 성능이 저하될 수 있습니다.
이에 대한 해결책으로는 서로 다른 여러 물리 서버에서 각 애플리케이션을 실행하는 것이지만 물리 서버를 많이 유지하기 위해서 비용이 들었습니다.
구체적으로 설명하자면 각각 용도가 다른 3개의 물리 서버가 있습니다.
하나는 메일 서버, 다른 하나는 웹 서버, 나머지 하나는 내부 레거시 애플리케이션을 실행하는 서버입니다.
각 서버는 잠재적인 실행 용량의 일부에 불과한 30% 용량만 사용하고 있습니다.
내부 운영을 위해서는 3개의 애플리케이션이 실행되어야 하기 때문에 3개의 물리 서버를 사용해야 합니다.
가상화된 배포 시대
애플리케이션은 물리 서버에서 실행하던 전통적인 배포 시대의 문제점을 해결하기 위해 가상화가 도입되었습니다.
이를 통해 단일 물리 서버의 CPU에서 여러 가상 시스템(VM)을 실행할 수 있습니다.
VM 간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공할 수 있습니다.
또한 물리 서버의 리소스를 보다 효율적으로 활용할 수 있어 하드웨어 비용을 절감할 수 있습니다.
각 VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신입니다.
위의 서버 3개의 예시로 다시 설명해보겠습니다.
3개의 애플리케이션을 실행하기 위해 각각의 물리 서버를 두었지만 가상화를 도입함으로써 메일 서버를 2개의 고유한 서버로 분할하여 독립적인 테스트를 처리하여 하드웨어를 효율적으로 사용할 수 있습니다.
컨테이너 개발 시대
컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제를 공유합니다.
따라서 VM보다 가볍게 여겨집니다.
또한 특정 클라우드 벤더에 종속적이지 않습니다.
컨테이너를 통해 배포하면 자원을 효율적으로 이용할 수 있으며, VM과는 달리 OS를 공유하기 때문에 더 가볍다 까지 이해가 잘 되었습니다.
그러면 Kubernetes가 필요한 이유와 할 수 있는 일에 대해 알아보겠습니다.
만약 컨테이너를 통해 배포된 애플리케이션이 다운된다면 빠르게 다른 컨테이너를 통해 재시작해야 합니다.
새벽에 만약 애플리케이션이 다운된다면...? 부랴부랴 다시 개발자가 재시작을 해야 합니다.
또는 만약 수천 개의 컨테이너를 운영해야 한다면 어떻게 될까요..?
이 동작이 시스템에 의해 처리된다면 좋지 않을까요?
이에 대한 해답으로 Kubernetes는 분산 시스템을 탄력적으로 실행할 수 있는 프레임워크를 제공합니다.
즉, 애플리케이션의 확장 및 장애 조치를 처리하고 배포 패턴 등을 제공합니다.
Kubernetes가 제공하는 것
- 서비스 검색 및 로드 밸런싱
DNS 이름을 사용하거나/ 자체 IP 주소를 사용하여 컨테이너를 노출합니다.
컨테이너에 대한 트래픽을 분석하여 트래픽이 많으면 로드 밸런싱을 통해 트래픽을 분산하여 배포가 안정적으로 이루어지도록 할 수 있습니다.
- 스토리지 오케스트레이션
local storage, public cloud 제공업체 등과 같이 선택한 스토리지 시스템을 자동으로 탑재할 수 있습니다.
- 자가 치유
실패한 컨테이너를 다시 시작하고, 교체합니다. 사용자 정의 상태 확인에 응답하지 않은 컨테이너를 종료하고 제공할 준비가 될 때까지 이를 클라이언트에 알리지 않습니다.
- 자동화된 롤아웃과 롤백
수많은 컨테이너를 버전 업했는데 문제가 발생해 다시 롤백해야 하는 경우가 발생할 수 있습니다. 쿠버 네티스는 수많은 컨테이너를 관리하여 자동화된 롤아웃 롤백을 지원합니다.
Kubernetes vs Docker
도커는 컨테이너, Kubernetes는 오케스트레이션입니다.
오케스트레이션이란 여러 개의 애플리케이션을 조율하고 관리하기 위해 등장했습니다.
오케스트레이션 툴 비교
Kubernetes vs Docker Swarm vs Apache Mesos
위의 3가지 툴은 대표적인 컨테이너 오케스트레이션 툴입니다.
Kubernetes가 사실상 표준(de facto)이며 압도적인 시장점유율을 보여줍니다.
하지만 표준이라는 이유로만 그냥 사용할 수 없습니다.
3가지 툴을 다루어보지 않았기 때문에 간단하게만 비교해 보겠습니다.
특징 비교
클러스터 설치
Swarm : 대부분 도커 기반으로써 설치와 설정이 아주 쉽습니다.
K8s : 설정이 조금 더 복잡합니다. yaml을 활용하여 클러스터의 모든 서비스를 정의할 수 있습니다.
Mesos : 일반적으로 작은 클러스터에서는 설치와 설정이 쉽지만 규모가 커질수록 설정이 산술적으로 복잡해집니다.
Container Deployment
Swarm : docker native이기 때문에 설정 또한 매우 간단합니다.
K8s : YAML 기반으로 하여 배포 애플리케이션의 모든 구성요소를 설정 가능합니다.
Mesos: Json 기반으로 하여, Mesos와 마라톤 REST API에 전달할 설정 파일을 정의할 수 있습니다.
클러스터 구성을 위한 최소 사이즈
Swarm : 하나의 서버로 모든 것이 가능합니다.
K8s : 노드를 관리하는 하나의 마스터 서버와 하나의 노드가 필요합니다.
Mesos : 하나의 마스터, 하나의 슬레이브가 필요합니다.
확장성
Swarm : 소~중형 시스템에서 사용하기 적합합니다.
K8s : 중~대형 시스템에서 사용하기 적합합니다.
Mesos : 대~초대형 시스템에서 사용하기 적합합니다.
출처
https://kubernetes.io/ko/docs/home/(쿠버네티스 문서)
https://ko.wikipedia.org/wiki/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4(쿠버네티스 -위키백과)
https://www.redhat.com/ko/topics/virtualization/what-is-virtualization
https://www.itworld.co.kr/news/135282(쿠버네티스 vs 도커)
https://www.youtube.com/watch?v=Ia8IfowgU7s(유튜브 영상 : 초보를 위한 쿠버네티스 안내서 - 컨테이너 오케스트레이션?)
https://chrisjune-13837.medium.com/infra-kubernetes-vs-swarm-vs-mesos-%EB%B9%84%EA%B5%90-b04b2cd032ab(Kubernetes vs Swarm vs Mesos 비교)
https://www.youtube.com/watch?v=S3FVcdZcZnA (유튜브 영상 : 니콜라스의 쿠버네티스)
'MSA & 쿠버네티스(Kubernetes) - k8s' 카테고리의 다른 글
Message System이란? (0) 2022.03.18 서비스 메시(Service Mesh)란? + API Gateway와 차이점 (0) 2022.03.17 API 게이트웨이(Gateway)란? (0) 2022.03.14 프록시 서버란? (0) 2022.03.13 MSA 아키텍쳐란? (0) 2022.03.05