[kubernetes] 로컬 환경(macOS)에서 쿠버네티스 구축하기 1(Minikube vs Kind)

2해승·2024년 7월 2일

쿠버네티스?!

목록 보기
1/16

쿠버네티스는 리소스 사용을 최소화하고, 설치 및 설정 과정을 단순화하여 로컬 환경에서 실습, 개발, 테스트를 간단하게 구축하여 사용할 수 있는 LigthWeight Kubernetes Distributions 이라는 것이 있다.

주요 LigthWeight Kubernetes Distributions에는 Minikube, Kind, K3S이 있는데 이번 시간에는 Minikube와 Kind에 대해 알아보고 구축하는 과정을 설명해 보려 한다.

Minikube

미니쿠브는 로컬에서 쉽게 설치하고 실행할 수 있는 도구로, 쿠버네티스가 제공하는 대부분의 기능을 활용할 수 있다는 장점이 있기 때문에 간단한 학습 및 개발 환경 구성하는 용도로 많이 사용 된다.

그러나 단일 노드로 실행되어 저사양의 호스트에서도 사용 가능하지만 다중 노드를 구성하여 수행해야 하는 작업을 하기에는 곤란하다는 단점이 있다.


Minikube 설치

$ 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

Kind 또한 로컬에서 쿠버네티스 클러스터를 쉽게 구성할 수 있게해주는 도구로, 도커 컨테이너 이미지(kindest/node)를 이용해 노드를 생성하고 쿠버네티스 클러스터를 구성해 준다.

Kind는 미니쿠브와 다르게 단일 머신에서 다중 노드 클러스터를 실행할 수 있다는 장점이 있지만 Docker 컨테이너 내에서 실행되므로 Docker 데몬이 동작하는 호스트 시스템의 리소스에 의존하기 때문에 리소스에 제한이 있을 수 있다.


Kind 설치

$ 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의 차이점

Minikube Kind
아키텍처 로컬 시스템에 단일 노드
Kubernetes 클러스터 생성
Docker 컨테이너 내에
경량 Kubernetes 클러스터 생성
배포 로드밸런싱, 영구 볼륨과 같은 기능을 포함하여 로컬 개발을 위한 완전한 Kubernetes 구현 제공 로컬 개발 및 테스트 목적
확장성 대규모 배포 테스트에 적합 소규모 클러스터와 관련된 시나리오에 적합
호환성 프로덕션 클러스터의 모든 측면을
정확하게 미러링하지 못할 수 있음
프로덕션 Kubernetes와 호환되어
실제 프로덕션 환경으로 이전할 때 발생되는 비호환성이나 문제를 최소화 하는 것이 목표
버전 지원 주로 최신 안정 버전의
Kubernetes를 실행하는데 중점
다양한 버전과의 테스트 및 호환성 검증을 허용
리소스 요구사항 Minikube에 비해 더 적은 시스템 리소스 필요

[참고]

Kind vs Minikube: 차이점은 무엇인가요?
macOS Kind 로컬 클러스터 구성

profile
주니어 데브옵스 엔지니어

0개의 댓글