쿠버네티스는 여러 플랫폼 환경에서 클러스터를 구성하여 사용할 수 있다.
쿠버네티스 클러스터를 구성하려면 크게 다음과 같은 세 가지 방법을 고려할 수 있다.
이 장에서는 여러 쿠버네티스 환경 중에서 다음과 같이 방법별로 2~3가지 환경을 소개한다.
로컬 쿠버네티스
쿠버네티스 구축 도구
퍼블릭 클라우드 관리형 쿠버네티스 서비스
로컬 쿠버네티스는 물리 머신에서 손쉽게 쿠버네티스를 테스트할 수 있는 방법이다. 한 대의 머신에 올인원으로 구성되어 이중화가 보장되지 않는 점에 주의해야 한다. 또한, 일부 사용할 수 없는 기능도 있다.
미니큐브(Minikube)는 물리 머신에 로컬 쿠버네티스를 쉽게 구축하고 실행할 수 있는 도구다.
실행되는 쿠버네티스는 단일 노드 구성이라 여러 대의 구성이 필요한 쿠버네티스 기능 등은 사용할 수 없다.
미니큐브는 로컬 가상 머신에 쿠버네티스를 설치하기 위해 하이퍼바이저가 필요하다. 하이퍼바이저는 다음과 같이 맥 운영체제(macOs)/리눅스(Linux)/윈도우(Windows) 운영체제 환경에 맞는 소프트웨어를 사전에 설치해아한다.
맥 운영 체제
설치 과정은 p59 참고
Docker Desktop에서 쿠버네티스를 사용하려면 기동 후에 Preference에서 쿠버네티스를 활성화 해야한다.
여러 쿠버네티스 클러스터를 사용하는 경우에는 kubectl의 컨텍스트를 전환하여 사용해야한다.
다음 명령어로 컨텍스트를 전환한 후에는 kubectl을 사용하여 Docker Desktop 클러스터를 조작할 수 있다.
# 컨텍스트 변경
kubectl config use-context docker-desktop
Switched to context "docker-desktop".
kubectl 에서는 로컬 머신에 기동 중인 도커 호스트를 쿠버네티스 노드로 인식한다.
# 노드 확인
kubectl get nodes
쿠버네티스 클러스터 기능을 담당하고 있는 구성 요소 (component) 그룹도 컨테이너로 기동된다. 쿠버네티스를 활성화할때 Show system containers (advanced) 도 활성화하면 다음과 같이 docker container ls 명령어로 구성요소를 확인할 수 있다.
kind(kubernetes in Docker)는 쿠버네티스 자체 개발을 위한 도구다.
이름처럼 도커 컨테이너를 여러 개 기동하고 그 컨테이너를 쿠버네티스 노드로 사용하는 것으로, 여러 대로 구성된 쿠버네티스 클러스터를 구축한다.
현재 로컬 환경에서 멀티 노드 클러스터를 구축하려면 이 kind를 사용하는 것이 가장 좋다.
p64 참고
모두 여러 노드의 쿠버네티스 클러스터를 구축할 수 있다.
SIG-Scalability라는 분과회는 쿠버네티스 확장성을 논의하고 있다. SIG-Scalability에서는 다음과 같은 서비스 수준 지표 (Service Level Indicator, SLI)와 서비스 수준 목표(Service Level Objective, SLO)를 정의하고 있다. 또한, 아래에 제시된 것들 외의 SLI/SLO 에서도 책정중이다. 자세한것은 링크 확인
큐브 어드민(kubeadm)은 쿠버네티스에서 제공하는 공식 구축 도구이다.
이 장에서는 Ubuntu 18.04 머신 여러 대로 멀티 노드 쿠버네티스 클러스터를 구성하는 예제를 설명한다. 먼저 사전 준비로 모든 노드에 도커, CLI 등 관련 패키지를 설치하고 클러스터에서 사용하는 오버레이 네트워크용 커널 파라미터를 변경한다.
p70쪽 참고
기본적으로 도커에서 기동한 컨테이너에 할당된 IP 주소는 호스트 외부에서 볼 수 없는 내부 IP(Internal IP) 주소다. 그래서 이 경우 각 노드에 배포된 컨테이너 간의 통신은 불가능한 상태다.
이 문제를 해결하고 멀티 노드 쿠버네티스 클러스터가 되기 위해서는 각 호스트의 내부 네트워크 접속성을 확보해야만 한다.
이런 네트워크 구성을 만들기 위한 방법으로 플라넬(Flannel) 이 있다.
플라넬은 노드 사이를 연결하는 네트워크에 가상 터널 (오버레이 네트워크)을 구성하여 쿠버네티스 클러스터 내부의 파드 간 통신(파드 네트워크)을 구현한다.
퍼블릭 클라우드의 쿠버네티스 서비스는 영구 볼륨이나 로드 밸런서와의 연계 등을 쉽게 사용할 수 있도록 기능을 제공한다.
프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다
# Google Cloud SDK(gcloud 명령어를 포함) 설치
# 자세한 사용 방법은 https://cloud.google.com/sdk/docs/quickstarts를 참고
curl https://sdk.cloud.google.com | bash
# 설치한 gcloud 명령어를 사용할 수 있도록 셸을 재기동
exec -l $SHELL
# gcloud CLI 인증
gcloud init