쿠버네티스 입문 (3)

송범·2025년 8월 3일

디플로이먼트(Deployment)란?**

  • 파드(Pod)를 묶음으로 쉽게 관리할 수 있는 기능

디플로이먼트(Deployment)의 장점

  • 파드의 수를 지정하는 대로 여러 개의 파드를 쉽게 생성할 수 있음
    -> 파드를 100개 생성하라고 시키면 디플로이먼트가 알아서 파드를 100개 생성해줍니다.

  • 파드가 비정상적으로 종료된 경우, 알아서 새롭게 파드를 생성해 파드를 유지해줍니다.

  • 동일한 구성의 여러 파드를 일괄적으로 일시 중지, 삭제, 업데이트를 하기가 쉽다.

디플로이먼트(Deployment)를 활용해 백엔드(Spring Boot) 서버 3개 띄워보기

apiVersion: apps/v1 # api 버전 공식 문서 참조
kind: Deployment

metadata:
  name: spring-deployment

# Deployment 세부 정보
spec:
  replicas: 3 # 3개의 복제본을 생성합니다.
  selector:
    matchLabels:
      app: backend-app

  # 배포할 Pod 정의
  template:
    metadata:
      labels: # 카테고리
        app: backend-app
    spec:
      containers:
        - name: spring-server
          image: spring-server
          imagePullPolicy: IfNotPresent
          ports:
              - containerPort: 8080 # 다른 개발자들이 알기 위해 명시적으로

디플로이먼트(Deployment) 생성 후에 확인 해주기

  • 레플리카셋(ReplicaSet) 확인

서비스(Service)란?

외부로부터 요청을 받는 역할/외부로부터 들어오는 트래픽을 받아, 파드(Pod)에 균등하게 분배해주는 로드밸런서(Load Balancer) 역할을 하는 기능입니다.

서비스(Service)를 활용해 백엔드(Spring Boot) 서버와 통신해보기

  • spring-service.yaml 파일을 작성해줍니다.

apiVersion: v1
kind: Service

metadata:
  name: spring-service # Service 이름

# Service 세부 정보
spec:
  type: NodePort # Service 종류
  selector:
    app: backend-app # Pod를 선택하기 위한 레이블 deployment에서 정의한 레이블과 일치해야 합니다.
  ports:
     - protocol: TCP # 프로토콜은 TCP로 설정합니다.
       port: 8080 # 쿠버네티스 내부에서 Service에 접근할 때 사용할 포트입니다.
       targetPort: 8080 # Pod의 컨테이너 포트와 일치해야 합니다.
       nodePort: 30000 # 외부에서 사용자들이 접근하게 될 포트 번호입니다.

파드(Pod) 갯수를 5개로 늘려주기

  • kubectl get pods : 5개의 pod가 있는 지 확인

서버가 죽었을 때 자동으로 복구하는 기능 (Self-Healing)

  • docker ps 명령어로 컨테이너 확인

  • docker kill [컨테이너 ID] 명령어로 컨테이너를 죽였는데 RESTARTS에서 1이라고 되어 컨테이너가 다시 복구되었다.

새로운 버전의 서버로 업데이트 시키기

  • Version 1.1 로 업데이트를 하려고 한다.

  • 스프링 build 후에 이미지 버전 1.1로 만들어줍니다.

  • 바뀐 이미지 이름을 yaml 파일을 수정해줍니다.

  • kubctl apply -f [파일명] 을 입력해 변경사항을 적용해줍니다.

  • Version 1.1 이 반영된 것을 볼 수 있습니다.
profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글