본문 바로가기

STUDY/쿠버네티스

[초보를 위한 쿠버네티스 안내서] 컨테이너 오케스트레이션

인프런 '초보를 위한 쿠버네티스 안내서' 강의를 들으며 정리한 내용입니다.


도커의 등장으로 모든 실행환경을 컨테이너로 바꾸게 되었고,

도커만 설치되어 있다면 어디서든 동작하여 서버 관리자의 복잡성을 해결해줌.

 

컨테이너의 특징

- 가상머신과 비교하여 컨테이너 생성이 쉽고 효율적

- 컨테이너 이미지를 이용한 배포와 롤백이 간단

- 언어나 프레임워크에 상관없이 애플리케이션을 동일한 방식으로 관리

- 개발, 테스팅, 운영 환경은 물론 로컬 피시와 클라우드까지 동일한 환경을 구축

- 오픈소스이며 특정 클라우드 벤더에 종속적이지 않음

 

mysql, redis, jenkins 등을 컨테이너화 하여 사용.

 

Developer -> Build -> Ship -> Run

개발자가 코드를 작성하고,

도커 이미지를 만들고(Build),

도커 허브나 저장소에 저장하고(Ship),

도커 이미지를 컨테이너로 실행(Run)하는 것으로 방법이 정형화됨.

 

But,

 

도커로 인해 서버 관리가 좀 편해졌으나

컨테이너가 너무 많아지면, 그 많은 컨테이너를 관리하는데 어려움이 있음.

 

1. Deployment 배포는 어떻게 할까?

    중앙에서 모든 컨테이너의 롤백을 관리하고 싶음 

2. Service Discovery 서비스 검색은 어떻게 할까?

    프록시 -> 로드밸런서 -> 웹 컨테이너

    IP가 바뀌면 업데이트 해주고,,,

3. Gateway 서비스 노출은 어떻게 할까?

4. 서비스 이상, 부하 모니터링은 어떻게 할까?

 

=> 이러한 문제 해결을 위한 기술이.. Container Orchestration


[Container Orchestration :: 컨테이너 오케스트레이션]

복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구

서버 관리자가 하는 일을 대신해주는 프로그램

 

컨테이너 오케스트레이션 특징

1. CLUSTER

- 중앙제어 (master-node)

노드를 하나하나 관리하는게 아닌 클러스터 단위로 추상화 하여 관리 함.

클러스터 위에 마스터 서버를 두고 관리자는 마스터 서버에 명령어를 던지면 마스터 서버가 노드에 명령어를 보냄

- 네트워킹

클러스터 내 노드들끼리 네트워크 통신이 원활해야 함. 네트워크 연결을 잘 해둬야 함.

- 노드 스케일

노드가 수천개가 되더라도 감당할 수 있게 설계 시 고려해야 함. 아닐경우 부하 감당하지 못하게 됨.

 

2. STATE

- 상태 관리

replicas 숫자를 2 -> 3으로 바꾸면 컨테이너 오케스트레이션에서 컨테이너를 3개 띄워줌.

만약, 컨테이너 하나가 문제가 있을 경우 컨테이너를 죽이고, 다른 컨테이너 하나를 띄워 3개를 맞춰줌.

 

3. SCHEDULING

- 배포 관리

특정 앱을 실행시킬 때, 여유가 있는 서버에 올려주고

만약 여유가 있는 서버가 없다면, 서버를 하나 더 띄워주고 그 서버에 올려주는 작업을 스케쥴링 할 수 있어야 함.

 

4. ROLLOUT / ROLLBACK

- 배포 버전관리

version1이 떠있는데, version2를 띄우면 version2로 올라가고 (ROLLOUT)

version2가 떠있는데, version2가 문제가 있으면 version1으로 롤백하는 버전 관리(ROLLBACK)

 

5. SERVICE DISCOVERY

- 서비스 등록 및 조회

서비스가 실행되면 서비스 정보를 저장소에 등록해주고

그 저장소를 프록시 서버가 관찰하고 있다가 저장소가 바뀌면 설정을 변경하고, 프로세스를 재시작 함

 

6. VOLUME

- 볼륨 스토리지

1번 서버에서는 AWS를 마운트하고 2번 서버에서는 네트워크 파일 시스템을 마운트 하는 등 스토리지 연결을 해야 할 때 추상적으로 설정으로 관리할 수 있음

 

컨테이너 오케스트레이션(개념)을 구현한 도구

- DEIS 데이즈 

- RANCHER 랜처

- MESOS 메소스

- Nomad 노마드

- Docker SWARM 도커스웜 : 도커처럼 사용하기 쉬운 컨테이너 오케스트레이션!

...

이 중, 쿠버네티스가 표준처럼 등장 함.


Kubernetes

: 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼

 

쿠버네티스는 구글에서 만든 오픈소스로 2015년 처음 1.0 버전이 릴리즈 됨.

운영에서 사용가능한 컨테이너 오케스트레이션.

다양한 요구사항을 만족시킬 수 있는 유연함.

Run Anywhere 어디서나 동작함

 

전세계 클라우드 3대장도 모두 쿠버네티스를 매니지드 서비스로 제공

- EKS / Amazon / Elastic Kubernetes Service 

- AKS / Azure / Kubernetes Service

- GKE / Google / Kubernetes Engine

 

 

개발/빌드/배포 과정

출처 : 초보를 위한 쿠버네티스 안내서 강의자료 (by subicura)

 

'초보를 위한 쿠버네티스 안내서' 학습 범위

1. 도커 컨테이너 실행하기

- 도커와 도커 컴포즈를 이용한 멀티 컨테이너 관리

2. 쿠버네티스에 컨테이너 배포하기

- 실습(hands-on) 환경 만들기

- kubectl 사용법

- pod, deployment, service 등

- 기본 리소스 학습

3. 외부 접속 설정하기

- Cluster IP, NodePort, LoadBalancer, Ingress 서비스 타입 학습

- 서비스 디스커버리 학습

4. 스케일 아웃하기

- 부하에 따른 컨테이너 개수 조정

- 최소 리소스 요청 설정

- 오토스케일링

5. 그외 고급기능 소개

- HELM 패키지 매니저 소개

- GitOps, ServiceMesh 소개