์ด ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฒƒ

Kubernetes์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ ๋‹จ์œ„์ธ Deployment์™€ Service๋ฅผ ์‚ฌ์šฉํ•ด Nginx๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์„ ์ˆ˜์ง€์‹

  • ์ด ๊ธ€๋ถ€ํ„ฐ ์‹œ์ž‘ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ

์ปจํ…Œ์ด๋„ˆํ™”๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Kubernetes ์œ„์— ๋ฐฐํฌํ•˜๋ ค๋ฉด, Pod๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Deployment์™€ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋Š” Service์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Minikube ๋กœ์ปฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Nginx๋ฅผ ๋ฐฐํฌํ•˜๊ณ  kubectl ๋ช…๋ น์–ด๋ฅผ ์ฒด๋“ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต ์ฝ”๋“œ: GitHub (Deployment_and_Service)


๐Ÿงญ ์ „์ฒด ํ๋ฆ„ ์š”์•ฝ

โ‘  Minikube ์„ค์น˜ ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘
โ‘ก kubectl ๋ช…๋ น์–ด ์‹ค์Šต
โ‘ข Nginx Deployment + Service ๋ฐฐํฌ
โ‘ฃ ์ƒํƒœ ํ™•์ธ / ํŒŒ๋“œ ์ ‘์† / ๋กœ๊ทธ ํ™•์ธ / ์ˆ˜ํ‰ ํ™•์žฅ
โ‘ค ๋ธ”๋กœ๊ทธ ์ •๋ฆฌ

โš™๏ธ 1๋‹จ๊ณ„ โ€“ Minikube & kubectl ์„ค์น˜

Docker ์„ค์น˜ & ๊ถŒํ•œ ๋ถ€์—ฌ

sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker $USER

์„ค์น˜ ํ›„ logout โ†’ login ๋˜๋Š” newgrp docker ์‹คํ–‰ ํ•„์š”


Minikube & kubectl ์„ค์น˜

# Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# kubectl (v1.30 ๊ธฐ์ค€)
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/

ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘ & ํ™•์ธ

minikube start --driver=docker
kubectl get nodes

๐Ÿงฑ 2๋‹จ๊ณ„ โ€“ Nginx ๋ฐฐํฌ ํŒŒ์ผ ์ž‘์„ฑ

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.3
        ports:
        - containerPort: 80

nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080

๐Ÿงช 3๋‹จ๊ณ„ โ€“ ๋ฐฐํฌ ๋ฐ ํ™•์ธ

kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-service.yaml
kubectl get all

๐Ÿ” 4๋‹จ๊ณ„ โ€“ ํŒŒ๋“œ ํ™•์ธ & ๋ช…๋ น์–ด ์‹ค์Šต

kubectl describe pod <pod-name>
kubectl logs <pod-name>
kubectl exec -it <pod-name> -- bash
kubectl scale deployment nginx-deployment --replicas=4

๐ŸŒ 5๋‹จ๊ณ„ โ€“ Nginx ์ ‘์† ํ…Œ์ŠคํŠธ

# ๋ธŒ๋ผ์šฐ์ € ์—ด๊ธฐ
minikube service nginx-service

# ๋˜๋Š” curl๋กœ ํ™•์ธ
curl $(minikube ip):30080

๐Ÿ“‚ ์‹ค์Šต ๋””๋ ‰ํ† ๋ฆฌ ์˜ˆ์‹œ

k8s-basic/
โ”œโ”€โ”€ nginx-deployment.yaml
โ”œโ”€โ”€ nginx-service.yaml
โ””โ”€โ”€ README.md

์„ค๊ณ„ ํŒ๋‹จ (Why This Way?)

Pod ์ง์ ‘ ์ƒ์„ฑ์€ ์žฅ์•  ์‹œ ์ž๋™ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ Deployment๋กœ ReplicaSet ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ๋ฅผ ํ•˜๊ณ , ์„ ์–ธํ˜• YAML๋กœ ๊ด€๋ฆฌํ•˜์—ฌ GitOps ๋ฐ CI/CD ์ž๋™ํ™”์— ์—ฐ๊ณ„ํ•ฉ๋‹ˆ๋‹ค.


๋‹ค์Œ์— ์ฝ์„ ๊ธ€

โ†’ Kubernetes 2๋‹จ๊ณ„: ConfigMap & Secret โ€” ์„ค์ • ๋ถ„๋ฆฌ์™€ ๋ฏผ๊ฐ ์ •๋ณด ๊ด€๋ฆฌ