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 (카프카) 를 설정하면서 마무리를 하겠다. 이 부분은 공부가 더 필요해서 좀 늦을지도.
댓글