본문 바로가기

Hello minikube

여차저차해서 Minikube start 명령으로 VM 노드에 클러스터를 생성했다. 이 모든건 삽질이었다. katacoda 란 사이트에서는 minikube 가 설치된 서버에서 브라우저 환경을 제공하여 무료로 minikube 테스트를 할 수 있다.ㅠ 그래도 클러스터 생성하기까지 많은 것들을 얻을 수 있었다! 제일 처음 사용해 본 minikube 명령은 클러스터 생성/중지/삭제 등의 기본적인 구동관련 위주로 쓰이므로 앞으로 자주 사용하게 될 kubectl 명령에 익숙해져야 한다. 이제 쿠버네티스를 맛볼 수 있는 최고의 프로그램 Hello world 어플리케이션 테스트할 수 있다. 단순히 어플리케이션의 구동 테스트이므로 심플하게 과정만 보자. (no VM 환경이라면 클러스터에 명령을 내릴 kubectl 도구를 수동으로 설치해야 한다.)


특정 어플리케이션 컨테이너화(이미지로 빌드) 및 저장소에 푸시하기.

어플리케이션 배포하기.

어플리케이션 구동 확인하기.



1. Deployment 생성


# kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node

deployment.extensions "hello-node" created


kubectl 은 클러스터(엄밀히 말하면 클러스터의 Master, 더 엄밀히 말하면 Master 의 apiserver) 에 명령할 때 필요한 클라이언트 도구이며, 위와 같이 kubectl create 명령으로 클러스터에 무엇인가를 생성하도록 명령할 수 있다. ( kubectl create deployment  kubectl run  명령과 같다.) 빠른 진행을 위해 배포할 어플리케이션(hello-minikube) 의 컨테이너화, 저장소 푸시 과정이 생략되었으며, 그러한 컨테이너 이미지만 있으면 클러스터에서 배포가 가능하다는 것을 보여준다. 쿠버네티스에서 배포(deployment) 란 특정 노드에 어플리케이션 컨테이너를 담은 pod 를 생성하는 것을 말한다. pod 는 그 안의 어플리케이션 컨테이너와 그 각종 정보(name, port, ...)들을 담고 있다.



2. Deployment 확인


# kubectl get deployments

NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE

hello-node   1         1         1            1           43s


# kubectl get pods

NAME                          READY     STATUS    RESTARTS   AGE

hello-node-64c578bdf8-wgxl5   1/1       Running   0          1h


kubectl get 명령은 클러스터(Master) 에 정보를 요청하는 것이다. 위 명령으로 현재 deployment 와 pod 의 정보 및 상태를 확인할 수 있다. deployment 와 pod 가 뭐가 다른건지 궁금할 수도 있다. pod 는 기본 오브젝트이고 deployment 는 컨트롤러로서(나중 설명), deployment 가 pod 를 컨트롤한다. deployment 가 배포를 위한 전략 정보를 담고 있다면, pod 는 그 전략대로 실행된 결과물로 볼 수 있다. 이렇게 생성된 pod 는 기본적으로 클러스터 내부에서만 접근할 수 있다. 외부에서 접근이 가능하려면 로드밸런스 같은 역할을 하는 Service 를 생성해야 한다.



3. Service 생성


# kubectl expose deployment hello-node --type=LoadBalancer --port=8080

service "hello-node" exposed


외부 네트워크에서 특정 리소스에 접근하려면, kubectl expose 명령을 사용하여 LoadBalancer 타입의 Service 가 생성되며 이를 통해 외부에서 Service 로 접근이 가능하게 할 수 있다.



4. Service 확인


# kubectl get services

NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE

hello-node   LoadBalancer   10.108.144.78   <pending>     8080:30369/TCP   21s

kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          23m


외부 네트워크에서 접근할 수 있는 Service 리스트이다. 이제 hello world 어플리케이션을 구경할 수 있는 엔드포인트는 어떻게 될까. minikube 에서는 LoadBalancer 타입의 service 라도 외부ip 로 접근이 불가능하나(pending상태), minikube ip 명령으로 cluster 생성시 발급된 VM IP 와 위 service 의 우측 포트 30369 를 통해 접속하거나, minikube service hello-node 명령을 사용하여 즉시 브라우저를 띄워 어플리케이션을 확인할 수 있다. no VM 환경에서는 로컬에서 Service 로 접근이 가능하다. (ex. 10.108.144.78:8080)



5. 어플리케이션 확인


# curl $(minikube service hello-node --url)

Hello World!




6. 리소스 삭제


더이상 클러스터와 생성한 작성들을 사용하지 않는다면 아래와 같이 삭제할 수 있다.


# kubectl delete service hello-node

# kubectl delete deployment hello-node



7. 클러스터 중지/삭제


중지(stop) 는 클러스터 내부의 리소스들이 삭제되지 않지만, 삭제(delete) 는 클러스터 및 내부 리소스들이 모두 삭제된다.


# minikube stop

# minikube delete