메뉴

문서정보

목차

Minikube

기술 저변을 확장하려면 개발자가 유입 되어야 한다. 그러기 위해서는 개발/테스트 환경이 잘 구성되어야 하는데, Kubenetes는 핫한 기술이기는 하지만 설치/운영이 쉽지 않다. K8s는 개념도 매우 복잡한데, 설치 하는 것 자체가 하나의 과업이다 보니 진입 문턱이 너무나 높다. 당장 클러스터를 구성해야 하는데, GCP나 AWS를 이용하려고 하면 비용이 문제고 로컬에 구성하려고 하면 클러스터 구성에서 부터 만만한 작업이 아니다.

minikube는 MacOS, Linux, Windows에서 로컬로 간단하게 Kubernetes 클러스터를 구현하도록 도와주는 툴이다. Minikube는 아래의 Kubenetes 기능을 지원한다.

설치

최소 설치 사양은 아래와 같다. 설치환경은 아래와 같다. 설치는 간단하다. 쉘에서 아래의 명령을 실행하면 된다.
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

kubectl 설치

kubectl은 kubenetes 클러스터에 명령을 내리는 도구다. 난 우분투 패키지관리자를 이용해서 설치했다. 다른 운영체제/방법으로 설치하고 싶다면 리눅스에 kubectl 설치 및 설정을 참고하자.

apt 패키지를 업데이트하고 apt 리포지토리를 사용하는데 필요한 패키지들을 설치한다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

구글 클라우드 공개키를 다운로드한다.
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

K8s apt 레포지토리를 추가한다.
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

패키지를 업데이트하고 설치한다.
sudo apt-get update
sudo apt-get install -y kubectl

버전을 확인해보자.
kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}

클러스터 시작

minikube start
minikube 버전을 확인하자.
# minikube version
minikube version: v1.22.0
commit: a03fbcf166e6f74ef224d4a63be4277d017bb62e

클러스터와 상호작용

kubectl을 설치했으면 아래와 같이 클러스터와 상호작용 할 수 있다.
# kubectl get pods -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-558bd4d5db-75f5g           1/1     Running   1          23h
kube-system   etcd-minikube                      1/1     Running   1          23h
kube-system   kube-apiserver-minikube            1/1     Running   1          23h
kube-system   kube-controller-manager-minikube   1/1     Running   1          23h
kube-system   kube-proxy-qghgh                   1/1     Running   1          23h
kube-system   kube-scheduler-minikube            1/1     Running   1          23h
kube-system   storage-provisioner                1/1     Running   2          23h

애플리케이션 배포

예제 배포를 만들고 8080 포트로 노출해보자. create deployment를 이용해서 배포단위를 만들 수 있다.
# kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
deployment.apps/hello-minikube created
# kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed

잠시 후 애플리케이션이 배포된걸 확인 할 수 있을 것이다.
# kubectl get services hello-minikube
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort   10.110.214.17   <none>        8080:32485/TCP   28s

외부에서 서비스에 접근 할 수 있도록 포트포워딩을 한다.
# kubectl port-forward service/hello-minikube 7080:8080
Forwarding from 127.0.0.1:7080 -> 8080
Forwarding from [::1]:7080 -> 8080

테스트해보자.
# curl localhost:7080
CLIENT VALUES:
client_address=127.0.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://localhost:8080/

SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001

HEADERS RECEIVED:
accept=*/*
host=localhost:7080
user-agent=curl/7.74.0
BODY:
-no body in request-% 

삭제

hello-minikube service, pod, deploy를 삭제하고 마무리 하자.

Service 삭제
# kubectl delete service hello-minikube
service "hello-minikube" deleted

Pod 삭제
# kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-6ddfcc9757-6s5qv   1/1     Running   0          19h

# kubectl delete pod hello-minikube-6ddfcc9757-6s5qv
pod "hello-minikube-6ddfcc9757-6s5qv" deleted

Deployment 삭제
kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted

다음에 읽으면 좋을 문서

정리

시스템 엔지니어 레벨에서 kubenetes를 다룰게 아니라면, 굳이 kubenetes로 클러스터를 (노가다를 좋아하는 성격이 아니라면)구성하지는 말자. 예전에 완전구축해 본적이 있기는 한데, 그 다지 사람이 할만한 작업은 아니다. 클라우드를 사용 할 거라면 구축은 클라우드 서비스 제공자가 알아서 해줄테고, 온프레미스에서라면 솔류션으로 구축하면 된다.