쿠버네티스를 들어는봤는데... 컨테이너를 관리하는거라고 알고는 있는데...
정확히 이 녀석이 무엇을 하는건지 이해가 잘 안가는 분들을 위한 
Kubernetes 기초개념!


안녕하세요! 지난시간에 Container와 Docker에 대한 글을 작성하였었는데 Kubernetes가 과연 무엇인지? 왜 컨테이너를 이야기하면 쿠버네티스가 나오는지? 그럼 컨테이너와 쿠버네티스가 같은것인지? 이번시간에 자세히 다뤄보도록 하겠습니다!

지난글에서 설명드린 Container와 Docker가 기억나시나요?

예를들어 여러분이 새롭게 오픈한 신규 서비스가 있다고 가정해보겠습니다.

개발자들이 열씸히 코드를 개발하여 요즘 핫하디 핫한 컨테이너화 하게 구축을 한 후 서버에 이 컨테이너를 배포를 하였습니다.

대망의 오픈 첫날! 사용자가 신규 서비스로 접속을 하기 시작합니다.

가장 떨리는 순간이죠

하지만? 너무나 핫한 신규서비스이기에 저희가 예측했던 사용자보다 훨씬 더 많은 사용자가 몰리기 시작하네요...
즐거운 비명입니다.

음... 사용자가 몰리니...
scale out을 해야할 시점인 것 같습니다.

서버의 확장? 자신있습니다!
클라우드 환경이라면 더더욱 간단하죠

서버를 확장하였어요!!!

근데 잠시만....
저희 신규서비스는 컨테이너 환경인데......
안에있는 컨테이너들은..... 어떻게 옮겨야하지....?


여차저차해서 새롭게 확장한 서버에 컨테이너를 가져왔습니다!!

하지만.....
이렇게 가져온 컨테이너를 어떻게 적절하게 배치를 해야하는걸까요......

이렇게해서
다수의 컨테이너를 관리해주는
Container Orchestration 이라는 개념이 나오게 되었습니다!

즉,
오케스트레이션 이란 단어를 들으면 다음의 이미지를 떠올리신 분들이 계시리라 생각되는데

출처 : KBS 교향악단


저희 컨테이너 환경에서의 오케스트레이션은
다음의 이미지라 생각하시면 조금 쉬우실 것 같습니다!


쿠버네티스도 이러한 컨테이너 오케스트레이션 중 하나의 툴인데 쿠버네티스 뿐만아니라, Docker Swarm, Rancher, Apache Mesos 등등 여러가지 툴이 존재하고 있습니다.

그중에서 이번 글에서는 대표적인, De facto(사실상 업계표준) Kubernetes에 대하여 알아보겠습니다!!

Kubernetes란?

Kubernetes

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식성이 있고, 확장가능한 오픈소스 플랫폼이다.
쿠버네티스는 선언적 구성과 자동화를 모두 용이하게 해준다. 쿠버네티스는 크고, 빠르게 성장하는 생태계를 가지고 있다.
쿠버네티스 서비스, 기술 지원 및 도구는 어디서나 쉽게 이용할 수 있다.

쿠버네티스란 명칭은 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래했다.
구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화했다.
쿠버네티스는 프로덕션 워크로드를 대규모로 운영하는 15년 이상의 구글 경험과 커뮤니티의 최고의 아이디어와 적용 사례가 결합되어 있다.
라고 kubernetes의 공식 문서에 나와있습니다 ㅎ_ㅎ

즉 쿠버네티스는 앞에서 설명드린대로 컨테이너를 관리를 위해 나온 오픈소스 플랫폼입니다! (갓구글이 만듬)

쿠버네티스 특징이라고 하면 굉장히 많은 정보들이 쏟아져 나오는데요 대표적으로 아래의 3가지 특징이 있습니다.

1. 확장성
Google에서 만든것의 명성에 걸맞게 일주일에 수십억 개의 컨테이너들을 운영하게 해준 경험에 따라 쿠버네티스가 디자인되었기 때문에, 손쉽게 확장될 수 있습니다.

2. 유연성
로컬 테스트, 프로덕트 운영이든 환경에 상관없이, 사용자의 복잡한 니즈를 모두 수용할 수 있는 유연성을 가지기에 사용자의 애플리케이션들을 끊임없고 쉽게 전달할 수 있습니다.

3. 이식성
쿠버네티스는 오픈소스로서 on-prem, 하이브리드, 또는 퍼블릭 클라우드 인프라스트럭처등 여러 환경에서 기동됩니다.

그 밖에 수 많은 장점, 특징을 가지고 있는 쿠버네티스 이지만 굉장히 단순한 로직을 가지고있습니다.

현재상태를 모니터링하면서 관리자가 설정한 상태의 값과 다르면, 관리자가 설정한값으로 바꿔주는 3단계의 심플한 법칙

그렇기에 관리자는 명령어로 관리하는것이 아니라, 설정한 값이 들어있는 yaml 파일 등으로 관리를 해 줍니다.

Kubernetes workflow

쿠버네티스는 다음과 같은 흐름을 가지고 있습니다.

보통은 조직마다 다르겠지만 협업사 혹은 협업부서에서 서비스에 해당하는 요청을 관리자 에게 전달합니다.
관리자는 이 명렁을 Master Node 에 전달하고
Master Node는 Worker Node 에게 명령어를 전달함과 동시에 트래픽을 분배해줍니다.

위와같은 다이어그램을 조금 더 자세히 살펴보자면

위와 같은 아키텍처가 나옵니다!
기본적으로 쿠버네티스는 하나의 마스터노드와 여러개의 워커노드로 구성이 되어져있는데
굉장히 복잡하고 뭐가 내부에 있는지 궁금하지도, 알고싶지도 않게 생겼지만
해당 아키텍처에 있는 Kubernetes의 컴포넌트에 대해서 하나하나 간략하게 살펴보겠습니다 0 (해맑)

Kubernetes Components

Master Node

: 쿠버네티스의 주요 컨트롤 유닛으로서 Worker Nodes를 관리하는 주체입니다.
클러스터에 관한 전반적인 결정을 하고 이벤트를 감지, 반응하는 역할을 합니다

Component 설명
Kubectl -마스터 노드와 통신하는 명령어로서 쿠버네티스 API를 사용해서 마스터노드와 상호작용을 합니다.
API Server - REST API 요청을 처리하고 쿠버네티스 클러스터를 구성하는 각 컴포넌트들과 통신을 담당합니다.
Scheduler - 노드들의 리소스 상태를 파악하여 pod가 배치될 적절한 노드를 선택해 주는 역할.
Controller Manager - 쿠버네티스 클러스터 상태 감시, 설정한 상태로 유지하는 역할.
ETCD - 오픈소스 key-value 저장소로서 Kubernetes에서는 Master Node의 API Server가 HTTP/JSON API를 이용하여 접근할 수 있는 구성 데이터를 저장하는 용도로 사용됩니다.

Worker Node

: 워커노드는 할당된 task를 요청대로 수행하는 시스템입니다.
예전에는 Minions 라고도 불렸으며 컨테이너들간의 네트워크 등 서비스에 필요한 전반적인 일들을 마스터 노드와 통신하며 수행합니다.

Component 설명
Kubelet - 쿠버네티스 마스터 노드간의 통신을 담당하는 에이전트로서 노드에서 동작하는 pod들을 관리합니다
Kube-proxy - 각 노드별로 탑재되며 네트워크 프록시 및 로드밸런서 역할을 해줍니다.
Pod - Pod는 컨테이너의 그룹으로 한 개 또는 여러 개의 컨테이너를 포함하는 쿠버네티스의 작업단위 입니다.

각각의 컴포넌트들이 굉장히 복잡해 보이는데 조금 더 쉬운 다이어그램을 가지고 왔습니다.

Kuberenetes 도큐먼트에 한번쯤 들어가보셨다면 익숙하실 그림일겁니다.

조금더 쉽게 말씀드리자면,
마스터노드는 쿠버네티스 클러스터를 관리하며
워커노드는 실질적인 업무를 수행하는 주체입니다. 열일하는 worker node 친근하네요

또한 이 워커노드를 확대하면 오른쪽 다이어그램처럼 되는데요,
워커노드안에는 pod가 들어가게 되고
이 pod안에는 containerized된 application이 들어가게됩니다!

이 pod는 쿠버네티스의 가장작은 작업단위 요소로서,
필요에 따라 쉽게 생성되고 쉽게 버려지는 비교적 짧은 수명을 가지는 것이 특징입니다.

또한, 각각의 pod마다 다른 ip를 가지고 있고 pod 안에 있는 컨테이너끼리 는 내부 통신이 가능합니다.
(DNS로 통신 (coredns))

Pod안에 있는 컨테이너들 끼리 볼륨을 공유하며
컨테이너가 죽고 재시작 되어도 pod가 살아있는 한 shared volume은 유지됩니다.

여러분의 Application을 컨테이너로 이쁘게 만들고 이를 사용자들에게 서비스를 하려면
실질적으로 동일한 pod가 지속적으로 올라와져 있어야하는데요~
(좀 전에 pod는 쉽게 죽는 특징을 가지고 있다고 했는데 ....)

우리의 쿠버네티스는 똑똑한 친구이니 이런 빅픽쳐를 계산해두었습니다.


어디에서 많이들어본...
Replica Set, Deployment, Service, Ingress 등등
모임에서 한번 쯤 들었던거같은 이름들..
다음시간에는 이런 Kubernetes의 구성요소들에 대하여 더 깊게 알아보는 시간을 가지도록 하겠습니다!

뜬금없지만 다들 코로나 조심하세요!


kbseo's profile image

kbseo

2020-06-06

Read more posts by this author