k8s 간략히 따라해보기

2025. 4. 13. 08:53·Web

Minikube는 로컬 컴퓨터에서 단일 노드 Kubernetes 클러스터를 실행하여 애플리케이션 개발, 테스트 및 배포를 쉽게 할 수 있게 도와준다. 처음 k8s를 접하는 사람에게 권장하여 나도 이를통해 알아가보려고한다.

Minikube를 사용하기 위해서는 docker가 필요한데, 나는 이미 설치했으니 넘어가겠다. 나머지 설치 명령어들은 아래와 같다.

세팅

kubectl 설치

# (Ubuntu 기준) 공식 문서 권장 방식:
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 version --client

minikube 설치

# 최신 버전 예시 (버전 번호 확인해서 변경)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube

# 확인
minikube version

내부적으로 네트워크 패킷 필터링 등에 필요한 conntrack 등이 필요할 수 있다고 하여 conntrack도 미리 설치해두려고한다.

sudo apt-get update
sudo apt-get install -y conntrack

실행

minikube start --driver=docker

위 명령어를 통해 minikube가 내부적으로 docker 컨테이너를 하나 만들어서 그 안에 싱글 노드 k8s 클러스터를 구동한다.

minikube status
kubectl get nodes

위 명령어를 통해 상태를 확인할 수 있다.

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   46h   v1.32.0

Deployment & Service 생성

간단한 Echo 서버 이미지를 사용하여 Deployment를 만든 뒤, NodePort 타입으로 Service를 개방해보자

# 간단한 HTTP Echo 서버 배포
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0

# 8080 포트로 노출 (NodePort)
kubectl expose deployment hello-minikube --type=NodePort --port=8080

NodePort는 쿠버네티스에서 서비스의 유형 중 하나로, 클러스터 외부에서 특정 포트(30000~32767)를 통해 클러스터 내부의 파드에 접근할 수 있게 해준다.

kubectl get pods, kubectl get services 명령어로 배포 상태를 확인할 수 있다.

종료 및 초기화

클러스터 중지

minikube stop

완전 삭제(클러스터 초기화)

minikube delete
  • 설정 및 컨테이너가 모두 제거되며, 재시작 시 완전히 새 클러스터가 생성된다.

구조

┌──────────────────────────┐
│      Windows Host OS     │
│                          │
│        (localhost)       │
└────────────┬─────────────┘
             │
     (안 보이는 NAT + 가상 브릿지)
             │
┌────────────▼─────────────┐
│     WSL2 (Ubuntu)        │ ← 사용자 명령 실행 위치
│                          │
│  ┌────────────────────┐  │
│  │     Minikube VM    │  │ ← Docker driver 기반으로 실행 중
│  │  (k8s 클러스터 1노드)│  │
│  │  IP: 192.168.49.2   │  │ ← minikube ip
│  └──────────┬──────────┘  │
│             │             │
│       NodePort 서비스     │ ← 예: 31024
│             │             │
│         K8s 서비스        │
│             │             │
│           Pod             │ ← 예: echo-server
└────────────┴─────────────┘

여기까지 진행했을때의 네트워크 구조이다. window에서 바로 minikube ip에 접근할 수 없고, 테스트를 위한 환경이지만 window - ubuntu - minikube 과정으로 접근해야하기 때문에 엄청 번거로운 구조이다.

여기서 문제는 또 다시 ubuntu에서 minikube로 포워딩을 해줘야한다. 그렇지않으면 접근할 수 없었다.

kubectl port-forward hello-minikube-ffcbb5874-kp97w 31024:8080

hello-minikube-ffcbb5874-kp97w은 pod name으로 kubectl get pod 등의 명령어를 사용하면 확인할 수 있다.

이와같은 과정으로 간단하게 k8s를 실행해 볼 수 있었다. kubectl port-forward방법 말고 다른 방법을 찾아본 뒤에 밀도있게 k8s에 대해 알아보자.


알아보니 kind(Kubernetes in Docker)를 사용하면 가능한듯하다.

먼저 minikube를 삭제한다.

minikube delete
sudo rm -rf ~/.minikube
sudo rm /usr/local/bin/minikube

 

다음으로 kind를 설치하자

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

 

다음으로 클러스터 구성 설정을 위한 yaml파일을 만들어야한다.

# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 30000
        hostPort: 30000
  - role: worker
  - role: worker

extraPortMappings는 kind에서만 사용하는 특별한 설정 항목으로, kind 클러스터를 생성할 때 Docker 컨테이너의 포트를 로컬(호스트) 포트로 포워딩(매핑) 해주는 역할을 한다.

 

kind는 minikube와 달리 여러 노드를 구성할 수 있다. 필요시 해당 파일에서 role: worker를 추가하자

kind create cluster --name my-cluster --config kind-config.yaml

 

위의 명령어로 클러스터 생성한뒤에

kubectl create deployment nginx --image=nginx

kubectl expose deployment nginx \
  --type=NodePort \
  --port=80 \
  --target-port=80 \
  --name=nginx \
  --overrides='{"spec": {"ports": [{"port": 80, "targetPort": 80, "nodePort": 30000}]}}'

nginx를 배포하도록한다.

 

 

테스트를 삭제하고 다시하고싶다면?

kind delete cluster
kind create cluster --config kind-config.yaml

 

---

 

생각해보니 이건 좀 편법이고 nginx를 활용하면 해결할 수 있을듯.

'Web' 카테고리의 다른 글

AWS DOP - CloudFormation (1)  (0) 2025.04.16
AWS DOP - SDLC Automation 파트 개념 정리  (2) 2025.04.15
AWS EC2 -> 온프레미스 전환 (4) - 절전 모드 방지  (0) 2025.04.11
AWS EC2 -> 온프레미스 전환 (3) - ssh 설치  (0) 2025.04.11
AWS EC2 -> 온프레미스 전환 (2) - 포트포워딩  (0) 2025.04.11
'Web' 카테고리의 다른 글
  • AWS DOP - CloudFormation (1)
  • AWS DOP - SDLC Automation 파트 개념 정리
  • AWS EC2 -> 온프레미스 전환 (4) - 절전 모드 방지
  • AWS EC2 -> 온프레미스 전환 (3) - ssh 설치
마술사의 수습생
마술사의 수습생
언젠간 당신처럼 되고 싶어요.
  • 마술사의 수습생
    개발 기록 블로그
    마술사의 수습생
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Web (50)
      • 일기 (2)
      • 잡담 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
마술사의 수습생
k8s 간략히 따라해보기
상단으로

티스토리툴바