AWS 및 k8s 기반 백엔드 배포

아로롱·2025년 1월 25일

AWS

목록 보기
3/4
post-thumbnail

📍 배포에 필요한 파일 작성

  • 💡 배포를 위한 필수 파일
    • Dockerfile: 컨테이너 이미지를 생성.
    • Deployment 파일 (depl.yml): Pod와 애플리케이션 배포 정의.
    • Service 파일 (service.yml): 클러스터 내외부에서 접근을 위한 서비스 정의.
    • Ingress 파일 (ingress.yml): 외부 도메인 트래픽을 라우팅.
  • 💡 추가적인 파일
    • certificate.yml 은 HTTPS가 필요할 때만 필요하다.
    • hpa.yml 은 트래픽 변동이 클 경우 추가하면 좋다.

Dockerfile

  • 백엔드 애플리케이션을 컨테이너로 패키징하는 데 사용.
  • 배포하려는 애플리케이션을 실행 가능한 컨테이너 이미지로 만들기 위한 핵심 파일이다.
  • 작성한 Dockerfile 로 이미지를 빌드하고, 이 이미지를 k8s cluster 에 배포한다.

Deployment

  • k8s 클러스터에서 애플리케이션을 배포하는 Pod 와 ReplicaSet 을 정의.
  • 주로 컨테이너 이미지 정의, Replica 개수, CPU/메모리 리소스 제한 등이 항목으로 작성된다.

Service

  • 클러스터 내부 또는 외부에서 애플리케이션에 접근하기 위한 엔드포인트를 정의한다.
  • 주로 Service 타입(ClusterIP, NodePort, LoadBalancer)과 Pod와 연결하기 위한 Selector 등이 항목으로 작성된다.

Ingress

  • 외부 트래픽을 클러스터 내부의 서비스로 라우팅하는 규칙을 정의한다.
  • NGINX Ingress Controller 를 사용하여 도메인 이름과 서비스를 연결할 수 있다.

Certificate

  • TLS 인증서를 설정해 HTTPS 를 활성화한다.
  • cert-manager를 사용하는 경우 필요하다.
  • 자동으로 인증서를 발급받아 Ingress 에 연결할 수 있다.

HPA 파일

  • Horizontal Pod Autoscaler 를 정의하여 트래픽 증가 시 자동으로 Pod 개수를 조정한다.
  • 필수는 아니지만, 트래픽이 가변적인 환경에서 유용하다.

📍 기본 인프라 설정

AWS 계정 생성 및 설정

  • AWS 콘솔에 로그인하고 IAM 사용자와 역할 설정.
  • EKS, EC2, VPC 에 대한 권한을 가진 IAM 역할 생성.

EC2 생성 및 기본 설정

  • EC2 인스턴스를 생성하고 SSH 로 접속할 준비.
    • AWS CLI 및 kubectl 설치.
    # AWS CLI 설치
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    sudo ./aws/install
    # kubectl 설치
    curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.21.2/2021-07-05/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
    • AWS cli 에 자격 증명 설정.
    aws configure

📍 k8s 클러스터 생성

EKS 클러스터 생성

  • AWS EKS 콘솔에서 새로운 클러스터 생성.
    • 클러스터 이름, 버전, 역할 등을 설정하고 네트워크(VPC, 서브넷, 보안그룹)를 선택.

노드 그룹 생성

  • 클러스터가 생성되면 노드 그룹을 추가.
  • 노드 그룹은 클러스터에서 워크로드를 실행할 EC2 인스턴스 그룹.

📍 애플리케이션 배포

Namespace 생성

  • 리소스를 그룹화하는 데 사용됨.
kubectl create namespace my-namespace

Helm 설치 및 NGINX Ingress Controller 생성

  • Helm 은 k8s 에서의 패키지 관리 도구.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install my-ingress ingress-nginx/ingress-nginx --namespace my-namespace
  • 로드밸런서 생성은 NGINX Ingress Controller 를 생성할 때 포함된다.
  • Helm 으로 Ingress Controller 를 설치하면, 기본적으로 AWS 에서 관리형 로드밸런서를 생성함.

💡 AWS Management Console 의 EC2 → 로드밸런서 섹션으로 이동하면 Ingress Controller 가 생성한 로드밸런서를 확인할 수 있다.

  • 생성된 로드밸런서의 DNS 이름이 Route53 연결에 사용된다.

Route53 설정

  • Ingress Controller 에 연결된 LoadBalancer 의 DNS 주소를 Route53 에 추가한다.

ElastiCache, RDB 등 필요한 리소스 생성

  • ElastiCache(Redis) 및 RDS 는 k8s 클러스터 외부 리소스로 관리되지만, k8s 내부에서도 생성 가능하다.

Secret key 및 Certificate 추가

  • 보안 정보(Secret)는 .yml 로 추가하고 TLS 인증서도 적용시킨다.
kubectl create secret generic my-secret --from-literal=password=my-password
kubectl apply -f certificate.yaml

Deploymet, Service, Ingress 파일 생성 및 적용

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml
profile
Dilige, et fac quod vis

0개의 댓글