2020. 3. 14. 17:05 ㆍ개발 이야기/오픈소스
안녕하세요
오늘은 정말 핫하고 또 핫한 Container Orchestration인
쿠버네티스(Kubernetes)를 소개하려고 합니다.
요즘 사람인 같은 이적 시장에 보면 심심치 않게 보이는게 바로 이 쿠버네티스 경력자인데요. docker를 사용하는 회사는 무조건 이 쿠버네티스를 검토까지는 하지 않았을까 생각이 듭니다.
하지만..! 관심이 없다면 아 뭐 또 새로운거 나왔다보다~ 하고 넘어가겠지만, 이 관리 시스템이 어떤일을 하는지 알게 된다면 그냥 넘어갈 수 없을 것 입니다. 그 만큼 매력적이기 때문이죠.
먼저 설명하기 앞서서, 두 가지만 알고 가겠습니다.
하나는 Docker 인데요. 지난번에 간략히 소개를 했었는데요. Docker가 뭔지 모르신다면 아래의 글을 참고해주시기를 바랍니다.
그리고 나머지 하나는 Docker 사용자라면 대부분 알고 있을 MSA(Micro Services Architectue) 입니다. 저는 MSA라는 단어를 알기 전부터 MSA 구조로 개발을 하다가 MSA라는 단어를 알게된 케이스인데요 개발자라면 당연히 생각할 수 있는 아키텍처라고 생각합니다.
쉽게 말해 서비스를 잘게 쪼개서 블록처럼 어디에도 붙여 쓸 수 있고 하나의 기능을 수정했을 때 하나의 블록만 교체하여 서비스의 흐름이 끊기지 않게 하는 아키텍처입니다. 지난번에 JWToken을 설명했었는데요. 이런 토큰 기반의 api는 토큰만 맞다면 어디서도 사용이 가능하겠죠?
이런 인증을 통해 잘게 upload면 upload, Auth면 Auth, payment면 payment 잘게 잘라 아키텍처를 구성하는 것을 바로 MSA라고 합니다.
자 그럼
쿠버네티스를 알아보겠습니다.
쿠버네티스란 ?
쿠버네티스(K8s)는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다.
애플리케이션을 구성하는 컨테이너들의 쉬운 관리 및 발견을 위해서 컨테이너들을 논리적인 단위로 그룹화합니다. 쿠버네티스는 Google에서 15년간 프로덕션 워크로드 운영한 경험을 토대로 구축되었으며, 커뮤니티에서 제공한 최상의 아이디어와 방법들이 결합되어 있습니다.
무려 Google에서 구축한 시스템으로 컨테이너화된 애플리케이션은 Docker와 같이 컨테이너 기반의 서비스를 이야기합니다. 이런 컨테이너 기반의 서비스를 배포, 스케일링, 관리까지 해주는 시스템입니다.
Google에서 15년간 운영해보고 만들었다니 상당히 믿음이 가죠? 쿠버네티스의 특성을 소개하겠습니다.
행성 규모 확장성
Google이 일주일에 수십억 개의 컨테이너들을 운영하게 해준 원칙들에 따라 디자인되었기 때문에, 쿠버네티스는 운영팀의 규모를 늘리지 않고도 확장될 수 있습니다.
무한한 유연성
지역적인 테스트든지 글로벌 기업 운영이든지 상관없이, 쿠버네티스의 유연성은 사용자의 복잡한 니즈를 모두 수용하기 때문에 사용자의 애플리케이션들을 끊임없고 쉽게 전달할 수 있습니다.
어디서나 동작
쿠버네티스는 오픈소스로서 온-프레미스, 하이브리드, 또는 퍼블릭 클라우드 인프라스트럭처를 활용하는데 자유를 제공하며, 워크로드를 사용자에게 관건이 되는 곳으로 손쉽게 이동시켜 줄 수 있습니다.
위의 특성을 지키기 위해 쿠버네티스는 어떤 기능을 가지고 있을까요?
공식 페이지의 소개된 기능을 참고해 첨언해보겠습니다.
서비스 디스커버리와 로드 밸런싱
쿠버네티스를 사용하면 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할 필요가 없다. 쿠버네티스는 파드에게 고유한 IP 주소와 파드 집합에 대한 단일 DNS 명을 부여하고, 그것들 간에 로드-밸런스를 수행할 수 있다.
엔드포인트슬라이스
쿠버네티스 클러스터에서 확장 가능한 네트워크 엔드포인트 추적.
자동화된 롤아웃과 롤백
쿠버네티스는 애플리케이션 또는 애플리케이션의 설정 변경시 점진적으로 롤아웃하는 동시에 애플리케이션을 모니터링해서 모든 인스턴스가 동시에 종료되지 않도록 보장한다. 만약 어떤 문제가 발생하면 쿠버네티스는 변경 사항을 롤백한다. 성장하는 디플로이먼트 솔루션 생태계를 이용한다.
서비스 토폴로지
클러스터 토폴로지를 기반으로 서비스 트래픽 라우팅.
배치 실행
쿠버네티스는 서비스 외에도 배치와 CI 워크로드를 관리할 수 있으며, 원하는 경우 실패한 컨테이너를 교체할 수 있다.
자가 치유
오류가 발생한 컨테이너를 재시작하고, 노드가 죽었을 때 컨테이너를 교체하기 위해 다시 스케줄하고, 사용자 정의 상태 체크에 응답하지 않는 컨테이너를 제거하며, 서비스를 제공할 준비가 될 때까지 클라이언트에 해당 컨테이너를 알리지 않는다.
IPv4/IPv6 이중 스택
파드와 서비스에 IPv4와 IPv6 주소 할당
Horizontal 스케일링
간단한 명령어나 UI를 통해서 또는 CPU 사용량에 따라 자동으로 애플리케이션의 스케일을 업 또는 다운한다.
먼저 크게 8개의 기능이 있다고 합니다. 사실 쿠버네티스를 사용하기 위해 필요한 이해는 서비스 디스커버리와 로드 밸런싱, 자동화된 롤아웃과 롤백, 자가 치유 이 세 가지의 기능만 이해한다면 충분할 것 같아 이 세 가지 기능에 대해 추가 설명을 해보도록 하겠습니다.
설명에 앞서 쿠버네티스의 몇 가지 개념을 짚고 넣어가겠습니다.
클러스터 아키텍처 안에는 노드가 존재하는데 노드는 클러스터에 따라서, VM 또는 물리 머신이 될 수 있습니다. 각 노드는 파드를 동작시키기 위해 필요한 서비스를 포함하고 마스터 컴포넌트에 의해 관리되고 있습니다. Pod(파드)는 쿠버네티스 객체 모델 중 가장 작은 배포 가능한 객체로 쿠버네티스 애플리케이션의 기본 실행 단위 입니다. 클러스터에서 Running 프로세스를 나타냅니다.
그림으로 한번 보겠습니다.
클러스터의 구성은 Admin이 구성하기 나름입니다. 클러스터는 여러 컴퓨터를 한 대처럼 사용하기 위한 개념이고, 클러스터 안에 노드들은 실제 컴퓨터가 될 수 있고 VM으로도 구성할 수 있습니다. Pod는 위에서 설명했듯, 서버에서 돌아가는 프로세스의 개념으로 쿠버네티스의 가장 작은 개념입니다. 마스터에서 특정 어플리케이션을 실행하면 리소스가 남는 Node 중에 하나의 Node에서 Pod 형태로 실행되게 됩니다.
쿠버네티스의 서비스 디스커버리와 로드밸런싱 만약 위의 그럼에 있는 Pod가 모두 하나의 A application이라면 이 A에 대한 요청이 무수히 많이 들어올 경우 Master에서 로드밸런싱 기능 제공해 각 Node에 분산 요청을 하게 해줍니다. 익숙하지 않은 서비스 디스커버리 메커니즘을 사용하기 위해 애플리케이션을 수정할 필요가 없습니다.
자동화된 롤아웃과 롤백 위의 개념을 이용하여 컨테이너 배포시 기존에 사용하던 컨테이너의 리소스르 새로운 컨테이너로 이전이 가능합니다.
자가 치유 쿠버네티스는 Pod가 에러가 발생하여 정상적인 동작이 어려운 경우 새로운 Pod를 띄어줍니다. 여기서 꼭 같은 Node가 아닌 리소스가 여유있는 Node를 찾아 알아서 띄어지기 때문에 모든 Node의 리소스가 full이 난 경우가 아니면 수초 내로 정상 동작이 가능해집니다.
이런 기능을 통해서 쿠버네티스는 확장성, 유연성, 그리고 High Availability(고 가용성)을 지켜주고 있습니다. 그리고 오픈 소스다보니 정말 사용하지 않을 수가 없는 매력적인 솔루션이라고 생각이 들었습니다. 때문에 많은 IT 업체와 솔루션 회사에서 쿠버네티스를 이용한 프로젝트들이 활발하게 이뤄지고 있다고 생각이 들었습니다.
이상으로,
쿠버네티스의 기능과 특정을 알아봤습니다. 왜 요즘 많이 사용쿠버네티스의 이런 관리적인 측면이 아주 매력적이고 문제가 발생한 Pod에 대해 정말 빠른시간에 복구되는 것을 직접 겪어봤는데요. 저는 사실 서비스가 꺼졌다는 것도 체감을 하지 못했었습니다. 그 만큼 잘 만들었고 멋진 개념과 아키텍처로 이루어 졌다고 생각이 들었습니다. 하지만 저는 쿠버네티스를 처음에 구성할 때, 그리고 관리할 때 명령어 사용이나 config 설정 때문에 조금 어려움이 있었는데요.
이 부분에 대해서 다음 블로그에서 다루어보도록 하겠습니다.
'개발 이야기 > 오픈소스' 카테고리의 다른 글
# 오픈소스 OpenTracing - Jaeger (0) | 2020.03.25 |
---|---|
# 오픈소스 분산형 NoSQL DBMS Cassandra(카산드라) (0) | 2020.03.17 |
# 오픈소스 모니터링 시스템 Prometheus, 시각화 소프트웨어 Grafana (0) | 2020.03.06 |
# Docker 소개 (0) | 2020.03.04 |
비동기 B2C 서버 구축하기 - monit (0) | 2019.11.05 |