
K8s를 간단히 실습해볼 수 있도록, Windows11 64bit 환경에 kubectl과 kind(kubernetes in docker)를 설치한 뒤 웹서버 nginx를 K8s 환경으로 띄워보겠습니다.

애플리케이션 배포 방식은 크게 세 시대를 거쳐 발전해왔습니다. 전통적인 물리 서버 시대에는 리소스 할당과 비용 문제가 있었고, VM을 사용한 가상화 시대에는 이를 일부 해결했지만 여전히 무거운 운영체제가 필요했습니다. 현재 컨테이너 시대에는 호스트 OS를 공유하며 애플리케이션 실행에 필요한 것들만 담아 가볍고 이식성 높은 배포가 가능해졌습니다. 컨테이너는 개발과 운영 환경의 일관성을 제공하고, 마이크로서비스 아키텍처 구현을 효율적으로 지원하며, 리소스를 효율적으로 활용할 수 있는 장점이 있습니다.

Kubernetes(K8s)는 컨테이너화된 애플리케이션의 자동화된 배포, 스케일링, 운영을 위한 오픈소스 컨테이너 오케스트레이션 플랫폼입니다. 복잡해 보이는 쿠버네티스를 로컬 환경에서 쉽게 시작하기 위해 두 가지 도구를 사용하겠습니다.
kubectl(Kubernetes Control): 쿠버네티스 클러스터를 제어하기 위한 커맨드라인 도구로, 클러스터와 상호작용하는 공식 CLI입니다.
kind(Kubernetes IN Docker): Docker 컨테이너를 사용해 로컬 개발 환경에서 쿠버네티스 클러스터를 실행할 수 있게 해주는 도구입니다. Minikube나 kubeadm과 달리 Docker 컨테이너만으로 다중 노드 클러스터를 구성할 수 있어 가볍고 빠르게 시작할 수 있습니다.
※ Minikube: Minikube는 로컬 환경에서 쿠버네티스를 실행하고 테스트할 수 있게 해주는 도구입니다. Docker나 가상머신 등 다양한 드라이버를 지원하며, 개발자가 자신의 환경에 맞는 방식을 선택할 수 있습니다. 단일 노드 클러스터를 구성하여 프로덕션 환경과 유사한 테스트 환경을 제공합니다.
※ kubeadm: kubeadm은 프로덕션 수준의 쿠버네티스 클러스터를 설정하는 데 사용되는 도구입니다. 이를 통해 쿠버네티스 클러스터의 마스터 노드와 워커 노드를 포함한 다중 노드 환경을 구축할 수 있습니다. kubeadm은 초기화 작업과 인증서 설정 등을 자동화하여 프로덕션 환경에서 안정적이고 효율적으로 쿠버네티스를 설치하고 구성할 수 있도록 도와줍니다.
※ 설명을 자세히 해주신 다른 분들의 글을 보는게 좋을 것 같습니다. 설치가 잘 안될 때 꿀팁이라면, 재부팅 할 때 효과가 좋았습니다.
kubectl 설치 페이지
※ 아래의 curl을 사용하면 페이지 방문 없이 다운 가능합니다.
kubectl을 찾아 설치합니다.
curl.exe -LO "https://dl.k8s.io/release/v1.32.0/bin/windows/amd64/kubectl.exe"

kubectl 명령어로 확인하면 다운받은 kubectl.exe를 실행할 필요 없이 바로 설치되어있습니다.kubectl 명령어를 입력했을 때 오류가 난다면 환경 변수 설정을 직접 해야할 수도 있습니다. 아래 환경 변수 설정하는 것을 참고해보세요. curl이 아닌 choco를 사용했을 때도 별다른 설정을 안해도 될 수 있지만, 만약 안된다면 환경 변수 설정을 해보세요.
kind 설치 페이지
※ 아래의 curl을 사용하면 페이지 방문 없이 다운 가능합니다.
kind를 찾아 설치합니다.
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.26.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe


kind-windows-amd64.exe 파일을 옮깁니다. 이 때, c:\some-dir-in-your-PATH 이 부분이 방금 새로 만든 환경 변수 폴더가 위치한 경로여야합니다.
sysdm.cpl을 입력하고 확인을 누릅니다.



kind --version 명령어로 제대로 설치되었는지 확인해봅니다. 환경 변수로 등록했기 때문에 다른 경로에서 확인해봐도 버전이 제대로 나올겁니다.
기본 클러스터를 생성해줍니다.
kind create cluster

Pod는 쿠버네티스에서 가장 작은 배포 단위입니다. 하나 이상의 컨테이너를 포함할 수 있는데, 보통 하나의 메인 컨테이너와 부가적인 컨테이너들로 구성됩니다. 예를 들어 웹서버 컨테이너와 로그 수집 컨테이너를 하나의 Pod에 넣을 수 있습니다.
💥중요💥Pod는 일시적(ephemeral)인 특성을 가집니다. 즉, 언제든지 종료되고 다시 시작될 수 있습니다. 이런 특성 때문에:
- Pod 안에 저장된 데이터는 Pod가 재시작되면 모두 사라집니다.
- 데이터베이스처럼 지속적인 데이터 저장이 필요한 경우, 반드시 영구 저장소(Persistent Volume)를 사용해야 합니다.
- Pod의 재시작에도 데이터가 유지되어야 한다면, 별도의 저장소 설정이 필요합니다.
Node는 쿠버네티스 클러스터를 구성하는 물리 서버나 가상 머신입니다. Pod들이 실제로 실행되는 작업자(Worker) 컴퓨터라고 생각하시면 됩니다. 마치 회사의 직원들(Pod)이 일하는 사무실(Node)과 비슷합니다.Namespace는 쿠버네티스 클러스터 안에서 리소스들을 논리적으로 구분하는 방법입니다. 예를 들어 개발팀, 테스트팀, 운영팀이 같은 클러스터를 사용할 때, 각자의 Namespace에서 독립적으로 작업할 수 있습니다. 마치 회사 건물 안에서 부서별로 공간을 나누는 것과 비슷합니다.

######## frontend-nginx.yaml ######## apiVersion: v1 # Kubernetes API 버전 kind: Pod # 만들 리소스 종류: Pod metadata: # 리소스의 이름, 레이블 등 메타 데이터 name: frontend # 리소스의 이름 labels: # Pod에 부여할 레이블 app: nginx # 앱 레이블: nginx spec: # 리소스의 스펙 정의 시작 containers: # 리소스 내의 컨테이너 목록 - image: nginx # 사용할 Docker 이미지: nginx name: nginx # 컨테이너의 이름 ports: # 컨테이너가 사용할 포트 - containerPort: 80 # 컨테이너가 80번 포트 노출
frontend-nginx.yaml이 있는 경로에서 create 명령어를 실행해 yaml 파일을 기준으로 컨테이너를 만듭니다.
kubectl create -f frontend-nginx.yaml
※ 생성된 리소스의 설정을 변경하거나 업데이트해야 할 경우kubectl apply를 사용합니다.

pod들의 정보를 확인할 수 있습니다.
kubectl get pods

로그를 확인해보면 제대로 실행됐는지 확인할 수 있습니다.
kubectl logs frontend

호스트의 8888 포트를 컨테이너의 80번 포트에 포워딩하면 8888 포트로 접속이 가능합니다.
kubectl port-forward frontend 8888:80

접속이 되는지 확인해본다.
localhost:8888→ 접속 O
127.0.0.1:8888→ 접속 O
※ localhost:80→ 접속 X
※ 127.0.0.1:80→ 접속 X

Amazon EKS (Elastic Kubernetes Service): AWS의 관리형 쿠버네티스 서비스Azure AKS (Azure Kubernetes Service): Microsoft Azure의 관리형 서비스Google GKE (Google Kubernetes Engine): Google Cloud의 관리형 서비스
🤔 직접 구축도 가능할까요?
물론 가능합니다! 다만 고려사항이 있습니다:
- 클라우드의 VM이나 물리 서버에 직접 쿠버네티스를 설치할 수 있습니다.
- kubeadm 같은 도구로 클러스터를 구성할 수 있습니다.
- 하지만 마스터 노드 관리, 업그레이드, 보안 등 모든 것을 직접 해야 합니다.
- 일반적으로 큰 규모가 아니라면 관리형 서비스 사용을 추천합니다.
기술노트with 알렉 - 더 쉬운 쿠버네티스 + 바로 실습 | 웹서버 초간단 띄우기
쿠버네티스 공식 문서 - 쿠버네티스란 무엇인가?