쿠버네티스는 리소스 사용을 최소화하고, 설치 및 설정 과정을 단순화하여 로컬 환경에서 실습, 개발, 테스트를 간단하게 구축하여 사용할 수 있는 LigthWeight Kubernetes Distributions 이라는 것이 있다.
주요 LigthWeight Kubernetes Distributions에는 Minikube, Kind, K3S이 있는데 이번 시간에는 Minikube와 Kind에 대해 알아보고 구축하는 과정을 설명해 보려 한다.

미니쿠브는 로컬에서 쉽게 설치하고 실행할 수 있는 도구로, 쿠버네티스가 제공하는 대부분의 기능을 활용할 수 있다는 장점이 있기 때문에 간단한 학습 및 개발 환경 구성하는 용도로 많이 사용 된다.
그러나 단일 노드로 실행되어 저사양의 호스트에서도 사용 가능하지만 다중 노드를 구성하여 수행해야 하는 작업을 하기에는 곤란하다는 단점이 있다.
$ brew install minikube
$ minikube version // 설치 확인
minikube version: v1.33.1
미니쿠브의 설치가 완료됐다면 버전 확인을 통해 설치 정보를 확인할 수 있다.
미니쿠브는 여러가지 가상머신을 지원하는데 나같은 경우는 Docker가 설치되어있기 때문에 아래 명령어로 가상머신을 시작해주면 된다.
$ minikube start --driver=docker

minikube start를 해주면 쿠버네티스 구성에 필요한 요소들을 설치하고 설정하는 동작을 확인할 수 있다.
이후 아래 명령어로 쿠버네티스의 상태를 확인할 수 있다.
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
쿠버네티스 설치가 끝났다면 kubectl 명령어로 클러스터 구성을 확인할 수 있다.
# 클러스터 정보 확인
$ kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:51538
CoreDNS is running at https://127.0.0.1:51538/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
# 노드 확인
$ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 118s v1.30.0
# 파드 확인
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-7db6d8ff4d-8wp2w 1/1 Running 0 113s
kube-system etcd-minikube 1/1 Running 0 2m7s
kube-system kube-apiserver-minikube 1/1 Running 0 2m8s
kube-system kube-controller-manager-minikube 1/1 Running 0 2m7s
kube-system kube-proxy-qxvbd 1/1 Running 0 113s
kube-system kube-scheduler-minikube 1/1 Running 0 2m8s
kube-system storage-provisioner 1/1 Running 1 (83s ago) 2m5s
Kind 또한 로컬에서 쿠버네티스 클러스터를 쉽게 구성할 수 있게해주는 도구로, 도커 컨테이너 이미지(kindest/node)를 이용해 노드를 생성하고 쿠버네티스 클러스터를 구성해 준다.
Kind는 미니쿠브와 다르게 단일 머신에서 다중 노드 클러스터를 실행할 수 있다는 장점이 있지만 Docker 컨테이너 내에서 실행되므로 Docker 데몬이 동작하는 호스트 시스템의 리소스에 의존하기 때문에 리소스에 제한이 있을 수 있다.
$ brew install kind
.
.
.
==> Running `brew cleanup kind`...
Kind의 설치가 끝났다면 아래 명령어를 통해 쿠버네티스 클러스터를 생성할 수 있다.
$ kind create cluster --name kind-cluster1
Kind는 도커 이미지를 활용하기 때문에 이미지를 조회해보면 이미지가 다운로드 되어있는 것을 알 수 있다.
$ docker images | grep kind
kindest/node <none> c67167dbf296 7 weeks ago 980MB
미니쿠브와 동일하게 생성한 클러스터를 확인할 수 있다.
# 클러스터 정보 확인
$ kubectl cluster-info --context kind-kind-cluster1
Kubernetes control plane is running at https://127.0.0.1:52078
CoreDNS is running at https://127.0.0.1:52078/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
# 클러스터 정보 상세 확인
$ kubectl config view
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://127.0.0.1:52078
name: kind-kind-cluster1
contexts:
- context:
cluster: kind-kind-cluster1
user: kind-kind-cluster1
name: kind-kind-cluster1
current-context: kind-kind-cluster1
kind: Config
preferences: {}
users:
- name: kind-kind-cluster1
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTED
# 노드 확인
$ kubectl get node
NAME STATUS ROLES AGE VERSION
kind-cluster1-control-plane Ready control-plane 4m3s v1.30.0
클러스터를 생성 시 별다른 설정을 하지 않았기 때문에 기본적으로 control-plane(master node)만 생성된다.
Kind는 yaml 파일로 클러스터 설정을 관리하기 때문에 멀티 노드로 구성된 클러스터를 생성하고 싶다면 config 파일을 만들어야한다.
$ vim kind-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
마스터 노드 1개, 워커 노드 2개가 구성되도록 설정한 config 파일로 클러스터를 생성해주면 된다.
$ kind create cluster --name kind-cluster-test --config ./kind-3nodes.yaml
생성이 완료 됐다면 이제 노드 정보와 컨테이너를 조회해보자.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-cluster-test-control-plane Ready control-plane 2m45s v1.30.0
kind-cluster-test-worker Ready <none> 2m23s v1.30.0
kind-cluster-test-worker2 Ready <none> 2m23s v1.30.0
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
da92ffcd95d1 kindest/node:v1.30.0 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes kind-cluster-test-worker
ecc8f355750e kindest/node:v1.30.0 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes kind-cluster-test-worker2
c10accce9ff5 kindest/node:v1.30.0 "/usr/local/bin/entr…" 3 minutes ago Up 3 minutes 127.0.0.1:52686->6443/tcp
| Minikube | Kind | |
|---|---|---|
| 아키텍처 | 로컬 시스템에 단일 노드 Kubernetes 클러스터 생성 |
Docker 컨테이너 내에 경량 Kubernetes 클러스터 생성 |
| 배포 | 로드밸런싱, 영구 볼륨과 같은 기능을 포함하여 로컬 개발을 위한 완전한 Kubernetes 구현 제공 | 로컬 개발 및 테스트 목적 |
| 확장성 | 대규모 배포 테스트에 적합 | 소규모 클러스터와 관련된 시나리오에 적합 |
| 호환성 | 프로덕션 클러스터의 모든 측면을 정확하게 미러링하지 못할 수 있음 |
프로덕션 Kubernetes와 호환되어 실제 프로덕션 환경으로 이전할 때 발생되는 비호환성이나 문제를 최소화 하는 것이 목표 |
| 버전 지원 | 주로 최신 안정 버전의 Kubernetes를 실행하는데 중점 |
다양한 버전과의 테스트 및 호환성 검증을 허용 |
| 리소스 요구사항 | Minikube에 비해 더 적은 시스템 리소스 필요 |
[참고]