로컬에 첫 클러스터 만들기
클러스터를 만드는 방법은 여러 가지지만, 이 책에서는 kind(Kubernetes IN Docker)를 씁니다. Docker 컨테이너 안에 노드를 흉내 낸 컨테이너를 띄우는 방식이라 설치가 가볍고, 몇 초 만에 클러스터를 만들었다 지웠다 할 수 있어서 학습용으로는 이만한 게 없습니다. minikube도 널리 쓰이지만 가상머신을 띄우는 방식이라 kind보다 무겁고 느립니다. 실무에서 관리형 클러스터(EKS, GKE, AKS)를 쓰게 되더라도 kubectl로 다루는 방식 자체는 동일하니, 여기서 배운 건 그대로 옮겨갑니다.
설치
Docker가 이미 설치되어 있다는 전제로 진행합니다. macOS라면 Homebrew로 kind와 kubectl을 한 번에 설치할 수 있습니다.
brew install kind kubectl
kind version
kubectl version --clientLinux라면 바이너리를 직접 받습니다.
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind && sudo mv ./kind /usr/local/bin/kind
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/kubectl클러스터 생성
kind create cluster --name learn-k8s이 명령 하나로 벌어지는 일이 앞 장에서 본 컨트롤 플레인 컴포넌트들이 담긴 Docker 컨테이너가 뜨는 것입니다. docker ps를 실행해보면 learn-k8s-control-plane이라는 컨테이너가 하나 보일 텐데, 이게 곧 여러분의 첫 쿠버네티스 노드입니다. 명령이 끝나면 kubectl이 이 클러스터를 바라보도록 자동으로 설정(~/.kube/config)까지 마쳐줍니다.
kubectl cluster-info
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# learn-k8s-control-plane Ready control-plane 30s v1.31.0노드가 하나뿐이라 이상하게 보일 수 있는데, kind는 기본적으로 컨트롤 플레인과 워커를 한 노드에 합쳐서 띄웁니다. 여러 노드로 흉내 내고 싶다면 설정 파일을 따로 줄 수 있습니다.
# kind-multi-node.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: workerkind create cluster --name multi --config kind-multi-node.yaml
kubectl get nodes
# 이번엔 노드가 3개 보인다 — control-plane 1개, worker 2개첫 명령, 그리고 kubectl의 기본 문법
쿠버네티스를 다루는 명령어는 거의 항상 같은 형태를 따릅니다. kubectl <동작> <리소스 종류> <이름>. 이 문법 하나만 익혀도 나머지 장에서 배우는 리소스(Pod, Deployment, Service…)를 전부 같은 방식으로 다룰 수 있습니다.
kubectl run hello --image=nginx:alpine
kubectl get pods
kubectl describe pod hello
kubectl logs hello
kubectl delete pod hellokubectl run은 사실 학습·디버깅용 명령입니다. 실무에서 Pod을 이렇게 하나씩 직접 만들 일은 거의 없습니다 — 다음 장에서 볼 것처럼 Pod은 보통 Deployment 같은 상위 리소스가 대신 만들어 줍니다. 그래도 지금은 kubectl get과 kubectl describe, kubectl logs 세 명령의 감을 잡는 게 목적입니다. 이 세 개는 이후 이 책 전체에서, 그리고 실무에서 가장 많이 치게 될 명령입니다.
정리하기
실습이 끝난 클러스터는 지워두는 게 좋습니다. kind 클러스터는 그냥 Docker 컨테이너이므로 삭제도 즉시 끝납니다.
kind delete cluster --name learn-k8s
kind delete cluster --name multi다음 장부터는 이 클러스터 위에 실제로 무언가를 배포하기 시작합니다. 첫 단위는 Pod입니다.