쿠버네티스 설치 환경

쿠버네티스 설치 환경의 종류

쿠버네티스는 사용 환경과 목적에 따라 설치하는 방법이 다양하다.

  1. 개발 용도: Minikube, Docker for Mac/Windows 에 내장된 쿠버네티스
  2. 서비스 테스트 or 운영 용도: kops, kubespray, kubeadm, EKS/GKE 의 Managed Service

개발 용도

개발 용도의 쿠버네티스는 로컬 노드를 standalone 모드로 사용해서, 쿠버네티스의 기능을 완벽하게 사용하기에는 어렵다.
여러 서버의 자원을 클러스터링해 컨테이너를 배치하는 것이 쿠버네티스의 핵심 기능인데, 한 개의 노드로는 이것을 확인해볼 수 없기 때문이다.

서비스 테스트 or 운영 용도

서비스 테스트 or 운영 용도라면, 어떠한 환경에서 쿠버네티스를 설치할 것인지를 결정해야한다.
쿠버네티스의 사용 환경은 크게 두 가지이다.

  1. AWS, GKE 등의 클라우드 플랫폼 환경
  2. 자체적으로 보유한 on-premise 서버 환경

클라우드 플랫폼 환경

클라우드 플랫폼에서 쿠버네티스를 사용한다면, 서버 인스턴스만을 사용해 쿠버네티스를 설치할지, 쿠버네티스 자체를 서비스로서 제공하는 managed service 를 사용할지 선택해야한다.

Read more

도커 컴포즈

도커 컴포즈를 사용하는 이유

여러 개의 컨테이너로 구성된 웹 애플리케이션을 테스트하기 위해,
아래처럼 웹 서버 컨테이너와 데이터베이스 컨테이너를 각각 생성해야한다.

1
2
3
4
5
# docker run --name mysql -d jko/composetest:mysql mysqld

# docker run -d -p 80:80 \
--link mysql:db --name web \
jko/composetest:web apachectl -DFOREGROUND

여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리하면 편리할 것이다.
Docker Compose 는, 컨테이너를 시용한 서비스의 개발과 CI 를 위해 여러 개의 컨테이너를 하나의 프로젝트로서 다룰 수 있는 작업 환경을 제공한다.
여러 컨테이너의 옵션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작한다.

도커 컴포즈 사용

도커 컴포즈는 컨테이너의 설정이 정의된 YAML 파일을 읽어 도커 엔진을 통해 컨테이너를 생성한다.
그래서, YAML 파일을 아래처럼 작성해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.0'
services: # 생성될 컨테이너를 묶어놓은 단위
web:
image: jko/composetest:web
ports:
- "80:80"
links:
- mysql:db
command: apachectl -DFOREGROUND
mysql:
image: jko/composetest:mysql
command: mysqld

그리고 아래 명령어로, 컨테이너를 생성한다.

1
# docker-comose up -d

도커 컴포즈 구성 단위

Read more

도커 스웜

도커 스웜을 사용하는 이유

하나의 호스트 머신에서 도커 엔진을 구동하다, CPU, 메모리, 디스크 용량과 같은 자원이 부족해질 수 있다.
이를 해결하기 위한 방법으로, 가장 많이 사용하는 방법이 여러 대의 서버를 클러스터로 만들어 자원을 병렬로 확장하는 것이다.

그러나, 여러 대의 서버를 하나의 자원 풀로 만드는 것은 쉽지 않다.
에를 들면,

  • 새로운 서버나 컨테이너가 추가되었을 때 이를 발견 하는 작업 (Service Discovery)
  • 어떤 서버에 컨테이너를 할당할 것인가에 대한 스케쥴러
  • 클러스터 내의 서버가 다운 되었을 때 고가용성 보장

이러한 문제를 쉽게 해결할 수 있는 솔루션으로 도커에서 공식적으로 제공하는 Docker Swarm 과 Swarm Mode 를 사용할 수 있다.

스웜 클래식과 도커 스웜 모드

도커 스웜에는 두 가지 종류가 있다.

  1. 스웜 크래식: 도커 버젼 1.6 이후부터 사용할 수 있는 컨테이너로서의 스웜
  2. 스웜 모드: 도커 버젼 1.2 이후부터 사용할 수 있는 도크 스웜 모드

위 둘의 차이는, 목적이다.

  1. 스웜 클래식: 여러 대의 도커 서버를 하나의 지점에서 사용하도록 단일 접근점을 제공한다.
  2. 스웜 모드: 마이크로서비스 아키텍처의 컨테이너를 다루기 위한 클러스터링 기능에 초점을 둔다.
Read more

도커 엔진

도커 이미지와 컨테이너

도커 엔진에서 사용하는 기본 단위와 핵심은 이미지와 컨테이너이다.

도커 이미지

이미지는 컨테이너를 생성할 때 필요한 요소이다. 가상 머신을 생성할 때 사용되는 iso 파일과 비슷하다.
이미지는 여러 개의 계층으로 된 바이너리 파일로 존재하고, 컨테이너를 생성하고 실행할 때 읽기 전용으로 사용된다.

이미지 이름은, 다음과 같은 형태로 구성된다 : [저장소 이름]/[이미지 이름]:[태그]
ex) jko/ubuntu:14.04

도커 컨테이너

이미지로 컨테이너를 생성하면, 이미지 목적에 맞는 파일이 들어 있는 파일 시스템과, 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생성된다.

컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장하기때문에, 컨테이너에 무엇을 하든지 원래 이미지는 영향을 받지 않는다.
또한, 컨테이너는 호스트와 분리되어있기 때문에, 어떤 애플리케이션을 설치하거나 삭제해도 다른 컨테이너와 호스트는 변화가 없다.

예를 들어,

Read more

도커란 ?

Docker

Docker 는 리눅스 컨테이너에 여러 기능을 추가해서 애플리케이션을 컨테이너로서 조금 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.

도커와 관련된 프로젝트에는,

  • Docker Compose
  • Private Registry
  • Docker Hub
  • Docker for Desktop

일반적으로 도커라고 하면 Docker Engine 이라는 의미로 많이 쓰인다.
도커의 생태계에 있는 모든 프로젝트들은 도커 엔진을 더 효율적으로 사용하기 위한 것에 불과하기 때문이다.

가상 머신과 도커 컨테이너

가상 머신

기존의 가상화 기술은, 하이퍼바이저를 이용해 여러 운영체제 (= Guest OS) 를 하나의 호스트에서 생성해 사용하는 방식이었다.
각 Guest OS 는 다른 Guest OS 와 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다.
이러한 가상화 방식을 사용할 수 있는 가상화 툴로는 VirtualBox, VMware 등이 있다.

시스템 자원을 가상화하고 독립된 공간 생성 작업은 항상 하이퍼바이저를 거치기 때문에 일반 호스트에 비해 성능 손실이 발생한다.
그리고, Guest OS 를 사용하기 위한 라이브러리, 커널 등을 전부 포함하여 가상 머신을 배포하기 위한 이미지를 만들었을 때 이미지의 크기가 크다.

Read more