개발/backend

[Backend] 쿠버네티스(K8S)를 시작해보자(2) - minikube & kubectl 설치

나인에스 2022. 3. 16. 14:50
이글은 2020년에 최초 작성되었고 2021년에 일부 수정되었습니다.

개요

쿠버네티스트를 잘 이용하기 위해서는 개념 이해부터 설치, 운영을 위한 여러 command, tool, extension, addons등 알아야하는 내용이 매우 많고 그것들을 잘 알고 사용하기까지 매우 많은 허들과 고난과 역경이 있습니다. 사실 개념과 각 구성요소들을 이해하기 위해서 Kubernates 사이트에 접속해서 Document들을 읽는 시점에서 포기하는 분도 꽤 많이 있고, 모든 document들을 읽고 이해한 후에 쿠버네티스를 사용하는 사람을 아마도 없을겁니다. 대부분 어느정도의 개념을 보고 실습을 해가면서 하나하나 사용법을 읽히고, 적용 했을때의 문제점을 발견하고 수정하면서 고급 사용법이나 운영법에 대해 익히게 됩니다.

이번장에서는 minukube와 kubectl을 이용해서 쿠버네티스를 local host에서 운영을 해보고 쿠버네티스의 기본기능을 알아보려고 합니다.

설치

로컬 개발 환경(LocalEnv)과 실제 서비스 환경(ServiceEnv)

쿠버네티스는 기본적으로 controller plane이 동작하는 Master Node를 최하 세개 이상 실행하게 된다. 당연히 이는 개발할때에는 그다지 필요없기도 하고 세개의 master node가 로컬에서 running하게 된다면 그만큼 로컬 PC의 resource도 많이 소모하게 된다. 또한 이를 최초 설치하고 설정하는 것 또한 매우 번거롭고 과정 또한 쉽지 않기 때문에 어느정도의 러닝커브가 있다.

따라서, 개발시에는 minikube, kind, Docker for Desktop, k3s등을 이용해서 간단하게 개발한 container만 동작시키는 방법을 이용한다. 다만, 이 경우 개발환경에서 N개의 노드에 대한 LoadBalancing, 스케쥴링과 같은 테스트가 쉽지 않기 때문에 관련 테스트는 꼭 서비스 환경과 동일한 수준의 개발 환경 혹은 실제 서비스 환경에서 테스트 되어야한다.

여기서는 논외이나 실무에서는 당연히 실제 서비스환경(ServiceEnv)에서 테스트를 하기에는 Risk가 있기 때문에 일반적으로 서비스 환경과 거의 동일한 수준의 쿠버네티스 개발 환경(DevEnv)을 만들어서 running 하도록 한다. 이후 개발할 때에서는 로컬환경(LocalEnv)에서 개발 및 unit test를 진행하고 이를 개발 환경(DevEnv)에 올린다음 시나리오, e2e, LodeBalancing, scheduling등의 테스트를 진행, 이후 문제가 없을때 이를 서비스환경(ServiceEnv)에 적용한다. 또한 프로젝트의 규모, resource, 테스트 category등에 따라 개발 환경(DevEnv)는 N개가 될 수도 있고, 실제 서비스환경(ServiceEnv)에 특정 클러스터나 Node를 최종 Integration 테스트를 위해서 할당하기도 한다.

minikube 설치

minikube는 로컬에서 쿠버네티스의 기본적인 기능을 체험(?) 해볼수 있는 좋은 도구이다. 로컬에 쿠버네티스 클러스터를 빠르게 셋업해서 개발자들이 개발 개발할 때에 사용하거나 신규 사용자가 쿠버네티스에 입문할때에 많이 사용된다.

minikube structure

macOS, Linux, Windows 모두 지원하기 때문에 현재 사용중인 OS에 맞는 버전을 설치하면 되나 기본적으로 Command Line Interface에서 명령어를 이용해서 실행 제어 한다.

설치전 Docker Desktop을 설치하는 것을 권장해 드립니다. minikube는 default로 docker driver를 사용하고 이는 Docker Desktop를 설치함으로서 자동 설정됩니다.

Installation

# brew를 이용해서 설치하는 방법
$>brew install minikube

# binary를 다운받아서 설치하는 방법
$>curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
$>sudo install minikube-darwin-amd64 /usr/local/bin/minikube

Basic Commands

$>minikube start --driver=docker

$>minikube stop

$>minikube delete

$>minikube status

 

Kubectl 설치

kubectl은 쿠버네티스의 CLI툴이고 이를 이용해서 쿠버네티스 cluster에 명령을 전달하거나 설정을 하는 등의 작업을 할 수 있다.

# brew를 사용해서 설치하는 방법
$>brew install kubectl

# binary를 다운로드해서 설치하는 방법
$>curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
$>chmod +x ./kubectl
$>sudo mv ./kubectl /usr/local/bin/kubectl
$>sudo chown root: /usr/local/bin/kubectl

 

bash-completion (kubectl command 자동완성 tool)

kubectl의 여러 command를 bash 쉘 상에서 자동완성 기능을 이용해서 편리하게 이용할 수 있도록 해주는 tool이다. 해당 tool은 bash 4.1 버전 이상에서 동작하고 그 이하의 버전이라면 해당 버전에 맞는 tool을 설치하거나 bash를 4.1 버전 이상으로 업그레이드 후 설치해야 한다.

bash 버전 확인 및 최신버전으로 업데이트 (상세내용 참고)

# bash version 확인
$>bash --version

# bash 최신버전 설치
$>brew install bash

# 설치된 bash의 버전확인
$>/usr/local/bin/bash --version

# 설치된 bash를 default로 설정(설정하기전 /etc/shells 파일에 /usr/local/bin/bash를 등록해야함)
$>chsh -s /usr/local/bin/bash

bash-completion 설치

# bash-completion 설치(bash 4.1 버전 이상 지원)
$>brew install bash-completion@2

bash profile 등록

아래 내용을 ~/.bash_profile에 추가한다.

export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"

 

Ref.

https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/

 

Install and Set Up kubectl on macOS

Before you begin You must use a kubectl version that is within one minor version difference of your cluster. For example, a v1.23 client can communicate with v1.22, v1.23, and v1.24 control planes. Using the latest compatible version of kubectl helps avoid

kubernetes.io