본문 바로가기
BackEnd/Project

[Loan] Ch07. Skaffold를 활용한 Kubernetes 배포

by 개발 Blog 2024. 9. 14.

공부 내용을 정리하고 앞으로의 학습에 이해를 돕기 위해 작성합니다.

 

Skaffold

https://skaffold.dev/

Skaffold는 코드 수정이 Kubernetes 환경에 반영되기까지의 과정을 자동화하고 단순화해 주는 프레임워크이다. Skaffold를 사용하면 개발 중 코드가 변경될 때마다 Kubernetes 클러스터에 애플리케이션을 자동으로 배포할 수 있다.

 

1. 설치

먼저 Skaffold를 설치한다.

brew install skaffold

 

 

2. Skaffold 설정 파일 작성

프로젝트 루트에 skaffold.yaml 파일을 생성하고 아래와 같이 내용을 작성한다.

apiVersion: skaffold/v4beta2
kind: Config
build: 
  artifacts:
    - image: loan
      jib: {}
  • 이 파일은 Skaffold가 빌드할 이미지(loan)를 정의하며, 빌드 도구로 JIB를 사용한다.

3. Kubernetes 설정 파일 작성

k8s 디렉토리를 만들고, 그 안에 deployment.yaml과 service.yaml 파일을 작성한다.

 

 

 deployment.yaml은 애플리케이션의 파드를 관리하고 배포하는 역할을 한다. 파드를 정의하고, 원하는 개수만큼의 파드를 생성하고 관리하며, 업데이트와 롤백 같은 작업을 지원한다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: loan
spec:
  selector:
    matchLabels:
      app: loan
  template:
    metadata:
      labels:
        app: loan
    spec:
      containers:
        - name: loan
          image: loan
          ports:
            - containerPort: 8080
  • 여기서는 loan이라는 이름의 애플리케이션을 실행하기 위해 컨테이너 이미지를 정의하고, 8080 포트를 사용하도록 설정했다.

service.yaml은 Kubernetes 클러스터 내에서 실행 중인 파드들을 외부 또는 내부 트래픽에 노출시켜 주는 역할을 한다. 클러스터 내부나 외부에서 특정 애플리케이션에 접근할 수 있도록 라우팅 한다.

apiVersion: v1
kind: Service
metadata:
  name: loan
  namespace: default
  labels:
    app: loan
spec:
  selector:
    app: loan
  ports:
    - port: 8080
      name: http
      targetPort: 8080
  type: LoadBalancer
  • 이 예시에서는 LoadBalancer 타입의 Service를 사용해 localhost:8080을 통해 외부에서 애플리케이션에 접근할 수 있게 설정했다.

4. Kubernetes 환경에 배포

이제 아래 명령어를 사용하여 Kubernetes 클러스터에 애플리케이션을 배포한다.

skaffold dev
  • 이 명령어를 실행하면 Skaffold가 자동으로 JIB를 통해 이미지를 빌드하고 Kubernetes에 배포한다.

 

5. 애플리케이션 테스트

Kubernetes 환경에서 애플리케이션이 정상적으로 동작하는지 확인하기 위해 Postman을 사용하여 테스트를 진행한다. 대출 신청 등록이 정상적으로 작동하는지 확인할 수 있다.

 

6. Kubernetes 클러스터 상태 확인

Kubernetes 환경에 애플리케이션을 배포한 후, 서비스와 파드가 정상적으로 실행 중인지 확인하기 위해 kubectl 명령어를 사용하여 상태를 조회한다.

  • kubernetes는 기본적으로 클러스터 내부 통신을 위한 ClusterIP 서비스이다.
  • loan 서비스는 LoadBalancer 타입으로, 외부 트래픽을 처리하기 위해 설정되었으며, localhost:8080을 통해 접근할 수 있다.
  • loan 파드는 1/1 상태로 정상 실행 중이며, Running 상태를 유지하고 있다.
  • RESTARTS 값이 0이므로 재시작 없이 안정적으로 동작 중임을 알 수 있다.

이렇게 대출 상담부터 신청, 그리고 사후 관리까지 포함한 기능을 개발한 후, 컨테이너 화하여 Kubernetes 환경에 배포하고 실제로 로컬 Kubernetes 클러스터에서 애플리케이션이 동작하는 것을 확인했다. Skaffold를 통해 배포 과정을 자동화하여 개발 효율성을 크게 향상시킬 수 있었다.