본문 바로가기
CICD/AWS

MSA 구조 K8S 통해 배포해보기 (5) RDS, Docker 와 k8s, HPA설정

by windy7271 2024. 9. 1.
728x90
반응형

 

RDS 설정은 저번에 했기 때문에 아래를 참고해주세요

https://windy7271.tistory.com/entry/AWS-RDS

 

AWS RDS

RDS : 모니터링, 알람, 백업, HA 구성 등 모두 지원하는 관리형 서비스 / AWS 에서 지원하는 클라우드 기반 관계형 데베이다.데이터베이스 설정, 패치 및 백업 과 같이 잦은 운영 작업은 자동화하여

windy7271.tistory.com

b-1.harbormsk.jvqi25.c2.kafka.ap-northeast-2.amazonaws.com:9092,b-2.harbormsk.jvqi25.c2.kafka.ap-northeast-2.amazonaws.com:9092

도커작성

FROM openjdk:11 as stage1

WORKDIR /Harbor_employee

# gradle 빌드시에 필요한 파일들을 workdir로 copy
COPY gradlew .
COPY gradle gradle
COPY build.gradle .
COPY settings.gradle .
COPY src src

# Gradle Wrapper 스크립트에 실행 권한을 부여
RUN chmod +x gradlew

# /app/build/libs/*.jar
RUN ./gradlew bootJar

FROM openjdk:11

WORKDIR /Harbor_employee

# 빌드된 JAR 파일을 복사
COPY --from=stage1 /Harbor_employee/build/libs/*.jar Harbor_employee.jar

# 애플리케이션 실행
ENTRYPOINT ["java", "-Duser.timezone=Asia/Seoul", "-jar", "Harbor_employee.jar"]

 

여기 있는 도커 파일은 K8S 클러스터에 배포할 스프링부트 를 자동으로 빌드하고 배포하기 위해 사용된다. 

GitActios와 함께 사용하면 된다.

 

순서에 대해 알아보면

 

1. build 를 하고

2. 스크랩트 실행권한을 부여하고

3. jar파일 생성한다.

4.jdk11을 설정하고

5. 디렉토리를 설정하고

6. 파일을 복사한다.

 

이것을 깃 액션과 합치면

 

name: Harbor-Employee-Backend
on:
  push:
    branches:
      - harbor-employee
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: checkout github
        uses: actions/checkout@v2

      - name: install kubectl
        uses: azure/setup-kubectl@v3
        with:
          version: "v1.25.9"
        id: install

      - name: configure aws
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-2

      - name: update cluster information
        run: aws eks update-kubeconfig --name harbor_cluster --region ap-northeast-2

      - name: Login to ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

      ################ build and push #################
      ################ employee  #################
      - name: build and push docker image to ecr (employee)
        env:
          REGISTRY: 533267394261.dkr.ecr.ap-northeast-2.amazonaws.com
          REPOSITORY: harbor-employee
          IMAGE_TAG: latest
        run: |
          docker build \
          -t $REGISTRY/$REPOSITORY:$IMAGE_TAG \
          -f ./Harbor_employee/Dockerfile ./Harbor_employee
          docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG

      ################ apply ################
      - name: eks kubectl employee apply
        run: |
          kubectl apply -f ./Harbor_employee/k8s/harbor-employee-depl-serv.yml
          kubectl rollout restart deployment employee-depl

 

ECR에 로그인하여 Docker이미지를 푸시하는것을 볼 수 있다.

 

3. hpa 설정

HPA, 즉 Horizontal Pod Autoscaler는 Kubernetes의 기능 중 하나로, 클러스터의 워크로드를 자동으로 조정하여 애플리케이션의 성능과 가용성을 유지한다. HPA는 파드의 CPU 사용량, 메모리 사용량 등 메트릭을 기반으로 파드의 수를 자동으로 조정하여 애플리케이션의 부하에 따라 확장하거나 축소할 수 있다.

 

루트 프로젝트에 파일 하나를 추가해주고

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: employee-hpa
  labels:
    app: employee
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: employee-depl
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 50

 

를 넣어주면 된다. 주의해야할점은

두 리소스의 설정에서 참조하는 name필드가 같아야한다.

spec : scaleTargetRef : name 과

 

 

employee- k8s - yml 파일에서

apiVersion: apps/v1
kind: Deployment
metadata:
  name: employee-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: employee
  template:
    metadata:
      labels:
        app: employee
    spec:
      containers:
        - name: employee-backend
          image: 533267394261.dkr.ecr.ap-northeast-2.amazonaws.com/harbor-employee:latest

metadata: name: 과 일치해야한다.

 

다시 강조해서 !

HorizontalPodAutoscaler는 Deployment의 스케일을 조절하므로, Deployment의 이름과 HPA 설정의 scaleTargetRef.name이 일치하는지 확인한다. 또한, HPA의 설정은 Deployment의 리소스 사용량을 모니터링하고, 이 설정에 따라 Pods의 수를 조절한다

 

 

다음에는 MSK (카프카) 를 설정하면서 마무리를 하겠다. 이 부분은 공부가 더 필요해서 좀 늦을지도.

반응형

댓글