본문 바로가기
[DevOps]/Kubernetes

kubernetes - minikube를 이용하여 간단한 로컬 테스트 진행해보기

by 팡펑퐁 2023. 7. 12.
728x90

Minikube란?

  • 단일 노드의  Kubernetes 클러스터를 컴퓨터에서 로컬로 실행할 수 있게 해주는 도구이다.
  • 개발 및 테스트 목적으로 Kubernetes 클러스터를 설정하는 프로세스를 단순화한다.
    • 로컬 시스템에 경량의 가상화 환경을 생성하고 해당 환경 내에서 단일 노드 Kubernetes 클러스터를 실행한다.
    • 전체 규모의 클러스터에 액세스하지 않고도 컨테이너 배포 및 관리, 네트워킹 구성, 다양한 Kubernetes 기능 테스트를 실험할 수 있다.
    • 이 클러스터에는 API 서버, 스케줄러 및 컨테이너 런타임과 같은 Kubernetes의 모든 필수 구성 요소가 포함된다.
    • 개발자는 프로덕션 Kubernetes 클러스터와 매우 유사한 환경에서 애플리케이션과 서비스를 테스트할 수 있다.
  • 또한 로컬 Kubernetes 클러스터와 상호 작용하기 위한 몇 가지 유용한 명령이 포함된 명령줄 인터페이스(CLI)를 제공한다.
  • 클러스터를 시작 및 중지하고, 애플리케이션을 배포하고, 클러스터 리소스를 검사하고, 기타 관리 작업을 수행할 수 있다.

 

kubectl

  • Kubernetes는 Kubernetes 클러스터와 통신하기 위한 명령줄 도구를 제공하며 컨트롤 플레인, Kubernetes API를 사용한다.

 

 

실습 진행

  • 실습 관련 Node.js 프로젝트를 도커 이미지로 빌드했다.
  • 이제 이 이미지를 쿠버네티스의 클러스터로 보내야 하는데 deployment의 일부분으로 파드를 생성하면 파드에서 실행되는 컨테이너를 쿠버네티스가 관리하게 될 것이다.

 

minikube status

  • minikube status 명령어를 사용하면 클러스터가 실행중인지 확인할 수 있다.
  • 현재 실행중인 클러스터가 존재하지 않으니 만들어주도록 하자.

 

minikube start --driver=docker

  • 위 명령어를 실행하니 minikube가 도커를 사용하여 가상 환경을 생성했다.
    • vitualbox, hyperv 등 다른 프로그램도 있다.
  • 가상의 클러스터이므로 드라이버로 도커를 사용한 것이다.

 

  • 도커 데스크탑의 image를 확인해보면 맨 위에는 직접 빌드한 kub-first-app이 보이고, 두 번째로는 minikube의 이미지가 보인다.

 

  • 컨테이너 목록을 들어가보면 minikube가 만든 가상의 클러스터에 대한 컨테이너를 확인할 수 있다.

 

kubectl create deployment first-app --image=kub-first-app

  • kubectl 명령어를 사용하여 deployment 객체를 생성하였고, 배포에 사용할 이미지를 kub-first-app으로 하였다.

 

kubectl get deployments
kubectl get pods

  • minikube의 클러스터에 있는 deployment와 pod를 확인해보니 방금 만든 내용이 표시됨을 확인할 수 있다.
  • 그러나 READY 부분을 보면 실행에는 실패한 것으로 보인다.
  • pod의 STATUS를 확인해보면 imagePull과 관련된 에러임을 확인할 수 있는데 이 에러는 클러스터가 이미지를 찾을 수 없기 때문에 발생한 것이다.
  • 잘 생각해보면 당연하다.
  • 현재 kube-first-app 이미지는 로컬 호스트 머신에 있고, minikube는 가상의 클러스터로 격리된 컨테이너 안에서 작동중이다. 따라서 완전히 별개의 머신에서 작동하는 것과 같이 이미지를 불러올 수 없는 것이다.

 

  • 기존의 deployment를 삭제하고
  • 로컬 이미지를 컨테이너 안의 가상 클러스터 안에서도 다룰 수 있도록 도커 허브의 레파지토리에 업로드한다.

 

docker tag kub-first-app wonyongg/kub-first-app
docker push wonyongg/kub-first-app

  • docker tag를 이용하여 이미지명을 변경했다.
    • 이미지명 앞에 '도커 아이디/'를 붙여줘야 도커 허브의 레파지토리에 정상적으로 push할 수 있기 때문이다.
  • 이후에 docker push 명령어를 사용하여 

 

  • 도커 허브에 이미지를 업로드 했다.
  • 이제 minikube의 클러스터 안에서 도커 허브에 접근해 이 이미지를 가져올 수 있게 되었을 것이다.

 

  • --image에 도커 아이디와 함께 허브의 레파지토리 명을 정확하게 써주었더니
  • 클러스터 내에 pod까지 정상적으로 실행됨이 확인되었다.

 

 

deployment 객체

kubectl create deployment first-app --image=wonyongg/kub-first-app
  • 위 명령어를 실행했을 때 쿠버네티스에서 일어나는 과정을 알아보자.
  • kubectl create를 하게 되면 deployment 객체가 생성되고 쿠버네티스 클러스터에 있는 마스터 노드(컨트롤 플레인)으로 전송된다.
  • 마스터 노드는 클러스터에 필요한 모든 것을 생성하는데 워커 노드에 파드(pod)를 배포하는 일도 그 중 하나이다.
  • 마스터 노드의 스케줄러는 클러스터에서 신규 또는 업데이트된 deployment 객체를 지속적으로 모니터링 한다.
    • 스케줄러가 새로 생성된 파드를 분석하여 파드에 가장 적합한 워커 노드를 찾아 해당 파드를 보낸다.
    • 스케줄러는 워커 노드의 kubelet(각 워커 노드에서 실행중인 쿠버네티스의 에이전트)에 포드를 시작하도록 지시한다.
  • 그림에서처럼 만약 세번째 워커 노드로 보내진다면 해당 파드에서 컨테이너를 시작하는데 이때 명령어에 적힌 이미지를 기반으로 생성이 된다.
  • 이후에 파드를 관리하고 그 상태를 모니터링하게 된다.

 

 

 

참고

Udemy - Docker & Kubernetes : 실전 가이드

728x90