Kubernetes - 컨테이너 오케스트레이션
업데이트:
Kubernetes
쿠버네티스 시작하기
개발 환경에서 당연하게 사용해왔던 쿠버네티스에 대해 이해하고, 왜 쿠버네티스를 사용하는지 알아보자.
개요
- 컨테이너 오케스트레이션의 개념과 사용하는 이유 그리고 특징에 대해 이해한다.
소개
- 쿠버네티스는 컨테이너 오케스트레이션 툴의 한 종류이며 엄청난 인기로 사실상 표준으로 사용된다.
- 컨테이너 오케스트레이션은 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구이다.
배경
- 서버의 상태를 편하게 관리하기 위한 노력으로 도커 컨테이너가 등장했다.
- 그러나 관리하는 서버 컨테이너 수가 점점 증가하며 관리가 힘들다는 문제가 생겼다.
- 그래서 등장한 것이 컨테이너 오케스트레이션이다.
컨테이너의 특징
- 가상머신과 비교하여 컨테이너 생성이 쉽고 효율적
- 컨테이너 이미지를 이용한 배포와 롤백이 간단
- 언어나 프레임워크에 상관없이 애플리케이션을 동일한 방식으로 관리
- 개발, 테스팅, 운영 환경을 물론 로컬 피시와 클라우드까지 동일한 환경을 구축
- 특정 클라우드 벤더에 종속적이지 않음
컨테이너 오케스트레이션
컨테이너 오케스트레이션을 사용하지 않는다면
-
배포(Deployment)
- 각 서버의 ip를 찾고 각 서버에 ssh로 접속해서 docker 명령어로 컨테이너를 실행 및 종료하는 수고가 든다.
- 만약 새로운 컨테이너를 실행하려면 빈 서버(여유있는)에 실행 하는것이 리소스 절약을 위해 좋으나, 이를 확인하기 위한 모니터링 툴이 없으면 빈 서버를 일일히 찾기도 힘들다.
- 서버를 배포할 때(version upgrade 또는 rollback) 모든 서버를 한번에 배포하는 방법이 필요하다.
-
서비스 검색(Service Discovery)
- 보통의 구조라면 프록시 서버가 있고 로드밸런서를 통해 서버에 적절히 부하를 분산한다.
- 그러나 로드밸런서와 서버의 ip 설정과 같은 부분이 관리자가 직접 관리해야하는 포인트였다.
- 마이크로서비스 환경이 유행처럼 등장하며 서버가 점점 많아지고 서버의 ip가 업데이트로 변경되고 하면서 관리자가 이를 모두 관리하는 것은 쉽지 않았다.
-
서비스 노출(Gateway)
- NginX와 같이 외부에 노출된 프록시 서버를 두고, 프록시 서버로 들어오는 host 요청에 따라 내부 컨테이너(서버)에 연결하는데 이 과정에 자동화가 필요했다.
-
서비스 이상과 부하 모니터링
- 갑자기 컨테이너가 죽은 경우에 이전에는 일일히 로그 확인해서 다시 서버를 띄워야 했다.
- 같은 서버 컨테이너가 3개 돌다가 하나의 컨테이너가 죽으면 남은 2개의 서버에 부하가 생긴다.
- 서버가 죽지는 않았는데 트래픽이 많아지면 부하가 걸려 느려졌다.
- 트래픽에 따라 적절하게 서버를 늘려야 함
- 위와 같은 상황으로 자동화가 필요했다.
- 갑자기 컨테이너가 죽은 경우에 이전에는 일일히 로그 확인해서 다시 서버를 띄워야 했다.
컨테이너 오케스트레이션
- 위와같은 문제로 많은 컨테이너를 효율적으로 관리하기 위한 기술이 컨테이너 오케스트레이션이다.
- 컨테이너 오케스트레이션 복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구이다.
컨테이너 오케스트레이션 특징
-
클러스터(Cluster)
- 중앙 제어
- 이전에는 서로 다른 노드의 CPU와 RAM 상태를 각각 관리했었다.
- 그러나 노드 수가 증가하면 힘들기 때문에, 컨테이너 오케스트레이션에서는 합쳐서 추상화하여 클러스트 단위로 관리한다.
- 클러스터 하나하나의 노드에 ssh로 직접 접속하기 힘들기때문에 프록시처럼 앞에 마스터 서버를 두고 마스터서버가 각 노드에 알아서 명령을 보낸다.
- 네트워킹
- 클러스터 내 노드끼리는 서로 통신이 잘되어야 한다.
- 노드 스케일
- 노드 스케일이 커지더라도 잘 돌아가기 위해서는 정교한 설계가 필요하다.
- 중앙 제어
-
상태 관리(State)
- 트래픽이 증가해 서버를 새로 늘리거나, 하나의 서버에 장애가 발생했을 때 감지하고 자동으로 서버를 늘려준다.
- 오토 스케일링
-
배포 관리(Scheduling)
- 자원이 여유가 있는 서버에 알아서 적절하게 띄워준다.
-
배포 버전관리(Rollout & Rollback)
- 전체 컨테이너에 대한 롤아웃과 롤백을 중앙에서 관리한다.
-
서비스 등록 및 조회(Service Discovery)
- 새로 등록된 서비스 ip나 변경된 ip를 자동으로 관리해줘서 관리자가 하나하나 수정할필요가 없다.
-
볼륨 스토리지(Volume)
- 각 서버에 필요한 스토리지(AWS EBS, GCE 등)를 설정으로 연결할 수 있다.
- AWS에서 EC2에 스토리지 일일히 하나하나 붙이고 그럴 필요가 없다는 말이다.
왜 쿠버네티스인가
- 컨테이너 관리도구가 많이 생기고 했으나, 쿠버네티스가 표준처럼 등장했다.
- 오픈소스
- 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼
- 구글에서 만듦 (구글은 1주일에 20억개 컨테이너 생성한다.)
- 엄청난 인기
- 점유율이 높고 그렇기에 라이브러리 또는 레퍼런스가 많다.
- 무한한 확장성
- 쿠버네티스 위에서 머신러닝, CI/CD, 서비스. 서버리스 등 다양한 서비스가 동작
- 쿠버네티스만 설치되어 있으면 거기에 서비스를 올리기 쉬움
- 사실상 표준(de facto)
- 많은 오케스트레이션이 있지만 사실상 표준이 되어가고 있음
- 도커도 자체 오케스트레이션이 있지만 쿠버네티스의 인기로 인해 어쩔수없이 쿠버네티스 지원
- AWS(Elastic Kubernetes Service), Azure(Azure Kubernetes Service), Google(Google Kubernetes Engine)와 같이 대표적인 클라우드 기업들이 쿠버네티스를 매니지드 서비스로 제공하고 있음
앞으로 학습 계획
- 만들어진 이미지를 배포하고 그걸 쿠버네티스 상에서 동작 시키고 스케일 아웃까지 학습
- 구성요소를 이해하고, 동작원리를 파악하고 기본적인 사용법을 익히는 것을 목표로 함
- 도커 컨테이너 실행하기
- 도커와 도커 컴포즈를 이용한 멀티 컨테이너 관리
- 쿠버네티스에 컨테이너 배포하기
- 실습 환경 만들기
- kubectl 사용법
- pod, deployment, service 등
- 기본 리소스 학습
- 외부 접속 설정하기
- Cluster IP, NodeProt, LoadBalancer, Ingress
- 서비스 타입 학습
- 서비스 디스커버리 학습
- 스케일 아웃하기
- 부하에 따른 컨테이너 개수 조정
- 최소 리소스 요청 설정
- 오토 스케일링
- 그외 고급 기능 소개
- HELM 패키지 매니저 소게
- GitOps, ServiceMesh 소개
- 제외
- 다양한 환경별 특징 - bare metal, EKS
- 쿠버네티스 패턴 - 사이드 카, 어댑터 패턴
- 관련 생태계 - 서비스 메시, 서버리스
Reference
- 초보를 위한 쿠버네티스 안내서
- 첨부한 사진은 모두 위 강의자료의 내용입니다. 문제시 삭제하겠습니다.
댓글남기기