Study/Kubernetes

[실습5] YAML로 Deployment, Service 생성하기

Dream Amal 2025. 7. 21.

YAML 구조 이해하기

apiVersion: apps/v1          # 사용할 API 버전
kind: Deployment             # 리소스 종류 (Pod, Service, Deployment 등)
metadata:
  name: my-nginx             # 리소스 이름
spec:
  replicas: 2                # 파드 개수
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21    # 사용할 이미지
        ports:
        - containerPort: 80
  • 사용 가능한 API 버전은 kubectl api-versions 명령으로 확인할 수 있음

Deployment YAML 만들기

01. nginx-deployment.yaml 생성

  1. wsl에서 minikube를 실행
    • minikube start
  2. yaml file을 보관할 디렉터리 생성
    • mkdir <디렉터리 명>
    • mkdir practice 로 practice 디렉터리 생성
  3. 해당 디렉터리로 이동
    • cd practice
  4. 아래 yaml 파일 생성
    • vi nginx-deployment.yaml
# nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        ports:
        - containerPort: 80
  • 생성하기

02. 배포

# 디렉터리 내에서 명령 실행
kubectl apply -f nginx-deployment.yaml

03. 확인

# deployment 생성 확인
kubectl get deploy

# pod 생성 확인
kubectl get po


Service YAML 만들기

01. nginx-service.yaml 생성

# nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-service
spec:
  type: NodePort     # Service 타입
  selector:          # pod 선택 기준
    app: nginx
  ports:
  - port: 80         # service port
    targetPort: 80   # pod의 실제 port
    nodePort: 30036  # 생략 가능, 생략시 node port는 자동할당됨
  • 생성하기

02. 배포

# 디렉터리 내에서 명령을 실행
kubectl apply -f nginx-service.yaml

03. 확인

# 서비스 생성 확인
kubectl get svc

# minikube로 서비스 접속 확인
minikube service my-nginx-service


YAML 파일 수정 후 배포

01. yaml 파일 수정

  • image 변경, replicas 갯수 변경, volume 추가 등의 작업 또한 yaml 파일을 수정하여 가능함
  • 에디터를 통해 기존의 yaml 파일에 접근하여, 수정한 파일을 재배포 하면 됨!

02. 재배포

kubectl apply -f nginx-deployment.yaml

03. 확인

  • 기존 deployment가 변경된 부분만 업데이트 됨
  • 변경된 항목에 따라 롤링 업데이트가 자동 수행됨
    • 이미지 버전을 변경했으므로, pod가 하나씩 새 버전으로 재시작 됨

# 업데이트 상황 확인하기
kubectl rollout status deployment/my-nginx

# 변경된 deployment 확인
kubectl get deploy -o wide

04. rollback

  • 실수로 잘못 배포했을 때는 undo를 통해 배포를 취소할 수 있음
    • 직전 상태로 자동 롤백됨
kubectl rollout undo deployment/my-nginx

05. 실습 리소스 정리

# 서비스 삭제
kubectl delete svc my-nginx-service

# delpoyment 삭제
kubctl delete deploy my-nginx

# minikube 정지
minikube stop


More

kubectl diff

  • 현재 클러스터에 적용된 리소스와 수정한 YAML 파일의 내용을 **비교(diff)**해서 어떤 부분이 바뀌는지 출력해줌
    • 실제 적용되지 않으며, 변경 전 시뮬레이션을 위해 사용함
# kubectl diff -f <파일명>
kubectl diff -f nginx-deployment.yaml

kubectl edit

  • 클러스터에 이미 배포된 리소스를 직접 편집해서 실시간으로 변경해줌
    • 클러스터의 리소스를 YAML로 열어 수정과 동시에 적용하는 명령어
  • 실시간으로 클러스터에 바로 적용되기 때문에 테스트 환경에서만 사용하는 것이 좋음
  • YAML 문법이 클리면 저장할 때 오류가 발생함
    • CI/CD 환경에서는 해당 명령어 사용을 추천하지 않음
# kubectl edit <리소스종류>/<이름>
kubectl edit deployment/my-nginx

에디터에서 기존 replicas : 3 을 2 로 변경
저장 후 확인

 

728x90

댓글