도커가 Containerized Application을 운영할 수 있게 해주는 플랫폼인건 알고 있지?
(Definition: 컨테이너 기반의 오픈소스 가상화 플랫폼)
근데 말야...
도커만 쓰면되지 굳이 왜 쿠버네티스를 사용해야 하는거야?
궁금하지 않아?
잘 들어봐.
요즘 마이크로 서비스 아키텍쳐라는게 유행하고 있어.
이게 뭐냐하면,
소프트웨어를 잘게 쪼개서 하나의 소프트웨어가 소규모의 독립적인 서비스들로 구성하는거야.
왜? 서비스를 잘게 쪼갤수록 관리, 업데이트, 배포, 유지보수 모두 쉬워지거든.
모듈화를 할수록 다루기가 쉬워져! 글구 잘게 쪼개면 로드가 몰리는 부분을 이중화해서 가용성을 높이기도 쉬워지지.
예를 들어서,
UPLOAD, AUTH, PAYMENT 처럼 어떤 컨테이너는 업로드만 다루고 어떤 컨테이너는 인증만 다루고
어떤 컨테이너는 결제만 다루는 시스템인거지.
그럼 좋다 이거야.
저 소프트웨어를 실행 하려면?
3개 컨테이너를 동시에 업로드를 하고 배포를 해야돼.
왜냐하면 각각의 컨테이너의 역할이 독립적이라서 하나라도 빠지면 서비스가 정상적으로 운영될 수 없거든.
그게 뭐 힘들다고. 그지?
3개는 그냥 수동으로 켜면 되잖아. docker run 해서 말야.
근데 여기서 잘 생각해봐.
컨테이너 숫자가 적을 때는 상관이 없어.
근데 컨테이너 숫자가 수십 수백 수천 수만개로 늘어나면?
일일이 배포하고 실행시켜야해.
정말 번거롭고 시간이 많이 걸리지 않겠어?
그래서! 쿠버네티스가 나온거야.
(즉, 다시 말하면 모든 상황에서 쿠버네티스가 필요한게 아닌걸 잘 알겠지? 필요가 없으면 굳이 쿠버네티스를 사용할 필요가 없다는거야.)
그럼 언제 쿠버네티스가 필요할까?
바로 서비스에 고가용성이 필요할 때야.
크게 3가지로 분류해볼 수 있어.
1. 컨테이너의 모니터링 (자동 재시작)
내가 운영중인 서비스 (컨테이너)가 어떤 이유로 인해 꺼질 수 있어. 그럼 빠르게 다시 켜줘야 하잖아.
왜냐하면, 방금 위에서 마이크로 서비스 아키텍쳐라고 했으니까 하나의 서비스가 각각 독립적인 기능을 갖고 있는거잖아.
그럼 그 서비스가 꺼지면 특정 기능이 작동 안하겠지?
비상 사태인거야!
근데 도커만 쓴다면, 내가 수동으로 서비스를 다시 켜줘야해.
아니 근데 내가 서비스가 켜졌는지 꺼졌는지 24시간 감시할 수도 없는 노릇이잖아??
(물론 옛날에는 24시간 대기했겠지? 참고로 쿠버네티스 말구 VMware사의 vCenter에서도 저런 기능은 지원해!)
그래서 쿠버네티스를 이용해서, 절대 다운되면 안되는 중요한 서비스는 최소 5개의 컨테이너가 작동하게 하는거야.
그리고 그 중 하나라도 다운되면, 쿠버네티스가 곧바로 다운된 컨테이너를 재시작 하는거지.
2. Auto-Scaling
원래 100명이 접속하던 사이트에 만 명이 접속한다면?
서버가 다운되겠지?
이럴 때, 쿠버네티스가 자동으로 Scale-Out을 해줘서 컨테이너의 수를 늘려주는거야.
그리고 사람이 줄어들면 다시 Scale-In을 해서 컨테이너의 수를 줄이구.
3. 무중단 업데이트/배포
전통적인 시스템에서는 서비스를 업데이트를 할 때 반드시 중단을 해야하잖아?
서비스를 끄고 업데이트를 하고 다시 켜야하니깐 말야.
근데 쿠버네티스는 v1 ooo -> v1 oo v2 o -> v1 o v2 oo -> v2 ooo 이렇게 스무스하게 무중단 업데이트가 가능해.
무슨 소리가 안간다면 내가 이전에 쓴 쿠버네티스 글을 확인할 것!
아키텍쳐를 보면, Host OS위에 Docker Engine이 올라가고 각 App들이 독립된 Process로 Isolated 되어있는 것을 확인할 수 있어.
그리구 각 App이 구동에 필요한 바이너리와 라이브러리를 각자 갖고 있으니까, 예를 들어 오피스 2016과 오피스 2018를 동시에 운영할 수 있는거지. (원래는 같은 오피스면 다운그레이드를 하든 업그레이드를 하든 하나밖에 설치가 안되자나!)
VM과 비교해보면, Guest OS가 필요없어지면서 오버헤드가 정말 많이 줄었다고도 볼 수 있지.
ㅎㅎ
참고 : https://youtu.be/S3FVcdZcZnA
https://wnsgml972.github.io/setting/2020/07/20/docker/
'System Engineering > Kubernetes' 카테고리의 다른 글
docker-compose (0) | 2021.12.17 |
---|---|
Dockerfile healthcheck 방법 (0) | 2021.12.16 |
[4]쿠버네티스 : 배포 데모 on AWS (0) | 2021.09.18 |
[3]쿠버네티스 : API 호출 (0) | 2021.09.18 |
[2] 쿠버네티스: 오브젝트, Pod, Replicas, NodePort, ClusterIP, LB, Ingress (0) | 2021.09.18 |
최근댓글