Ssoon

AWS EKS - Storage - EBS 본문

AWS EKS Workshop Study 2기

AWS EKS - Storage - EBS

구구달스 2024. 3. 17. 21:54
CloudNet@ 팀의 AWS EKS Workshop Study 2기 - 3주차
# EKS Workshop 참고
  • EKS와 통합하여 활용할 두 가지 AWS 스토리지 서비스

https://peterica.tistory.com/273

  • Amazon Elastic Block Store (EC2만 지원)
    • 블록 수준의 스토리지 서비스
    • 클라우드에서 실행되는 가상 머신 에 영구적으로 연결된 스토리지 볼륨을 제공
  • Amazon Elastic File System (Fargate 및 EC2 지원)
    • 완전 관리형 클라우드 파일 스토리지 서비스
    • 여러 EC2 인스턴스 간에 데이터를 공유하고 액세스할 수 있는 스토리지를 제공하여 분산 애플리케이션 및 네트워크 파일 시스템을 지원
    • 빅데이터 분석, 웹 서비스 및 콘텐츠 관리, 애플리케이션 개발 및 테스트, 미디어 및 엔터테인먼트 워크플로, 데이터베이스 백업, 컨테이너 스토리지에 적합한 완전히 관리되고 확장 가능한 탄력적인 파일 시스템입니다. EFS는 여러 가용 영역(AZ)에 걸쳐 데이터를 중복 저장하며, 실행 중인 AZ에 관계없이 Kubernetes 포드에서 짧은 지연 시간 액세스를 제공합니다.

https://jerryljh.tistory.com/7

  • Persistent Volumes (PV)
    • 클러스터에서 사용 가능한 스토리지 볼륨
    • 관리자에 의해 수동으로 생성되고 구성
    • 클러스터에서 사용 가능한 스토리지 자원을 명시적으로 할당
  • Persistent Volume Claim (PVC)
    • Pod가 사용할 PV를 요청하는 방법을 정의
    • Pod가 어떤 종류의 스토리지를 요구하는지를 나타내는데 사용
    • Pod가 스토리지에 액세스하려고 할 때 해당 PVC를 참조
  • Storage Classes
    • 클러스터 내에서 사용 가능한 스토리지 유형을 정의하고, PersistentVolumeClaims (PVCs)가 해당 스토리지를 요청할 때 사용되는 프로비저닝 정책을 결정하는 방법을 제공
    • 스토리지 유형과 프로비저닝 요구 사항을 추상화하고 표준화

 실습

  • 실습준비
더보기
us-west-2 or eu-west-1 리전에서 진행합니다

 

  • 제공된 CloudFormation 템플릿으로 IDE를 생성하기 위해 AWS CloudShell을 사용

 

 

  • CloudShell이 로드되면 다음 명령을 실행

 

  • CloudFormation 스택 배포가 완료되면  Cloud9 IDE의 URL을 검색

 

  • 웹 브라우저에서 URL에 접속해 IDE에 액세스

 

  • eksctl 을 사용하여 클러스터을 생성하는 구성 파일 적용

 

EBS CSI 드라이버 애드온에 필요한 IAM 역할을 생성합니다.

 

💠 StatefulSets

  • 고유한 식별자 및 안정적인 네트워크 식별자 (Stable Network IDs):
    • 각 StatefulSet 인스턴스는 고유한 이름과 안정적인 네트워크 식별자를 가집니다. 이를 통해 각 인스턴스에 고유한 상태를 부여하고 네트워크 통신에 필요한 안정적인 주소를 제공합니다.
  • 순차적 배포 및 확장:
    • StatefulSets는 인스턴스를 순차적으로 배포하고 확장할 수 있습니다. 이는 인스턴스의 초기화, 부팅 순서, 네트워크 구성 등과 같이 순차적으로 수행되어야 하는 작업을 처리하는 데 유용합니다.
  • 안정적인 볼륨 복제 (Stable Storage):
    • StatefulSets는 각 인스턴스에 안정적인 볼륨을 부여하여 상태를 영구적으로 저장할 수 있습니다. 이를 통해 데이터베이스나 파일 시스템과 같이 상태를 가진 애플리케이션의 데이터를 보존할 수 있습니다.
  • 자동 복구 및 롤링 업데이트:
    • StatefulSets는 장애 발생 시 자동으로 인스턴스를 복구하고 롤링 업데이트를 수행할 수 있습니다. 이를 통해 시스템의 가용성을 높이고 업데이트를 신속하게 적용할 수 있습니다.

  • 실습 이커머스 애플리케이션에는 이미 카탈로그 마이크로서비스의 일부로 배포된 스테이트풀셋이 있음.
  • 카탈로그 마이크로서비스는 EKS에서 실행되는 MySQL 데이터베이스를 활용
  • 데이터베이스는 영구적인 저장 공간이 필요하기 때문에 스테이트풀셋을 사용
  • MySQL 데이터베이스 파드를 분석하여 현재 볼륨 구성을 확인

  • 스테이트풀셋의 볼륨 섹션에서 "파드의 수명을 공유하는" EmptyDir 볼륨 유형만 사용하고 있음

  • emptyDir 볼륨은 파드가 노드에 할당될 때 처음 생성되며, 해당 파드가 해당 노드에서 실행되는 동안 존재
  • 파드의 모든 컨테이너는 emptyDir 볼륨에서 동일한 파일을 읽고 쓸 수 있지만, 해당 볼륨은 각 컨테이너의 동일하거나 다른 경로에 마운트
  • 어떤 이유로든 노드에서 파드가 제거되면 emptyDir 의 데이터는 영구적으로 삭제

  • MySQL 컨테이너 내부에서 테스트 파일을 생성 그런 다음 스테이트풀셋에서 실행 중인 파드를 삭제
  • 파드는 퍼시스턴트 볼륨(PV)이 아닌 emptyDir 를 사용하기 때문에 파드를 재시작해도 파일이 살아남지 않음

  • 먼저 MySQL 컨테이너 내에서 명령을 실행하여 emptyDir /var/lib/mysql 경로(MySQL이 데이터베이스 파일을 저장하는 위치)에 파일을 생성

  • /var/lib/mysql 디렉터리에 test.txt 파일이 생성되었는지 확인

  • catalog-mysql 파드를 제거 : 스테이트풀셋 컨트롤러가 자동으로 새 카탈로그-mysql 파드를 다시 생성

 

  • catalog -mysql 파드가 다시 생성되었는지 확인

  • MySQL 컨테이너  /var/lib/mysql 경로에서 ls 명령을 실행하여 이전에 생성한 test.txt 파일 검색
  • emptyDir 볼륨은 임시 볼륨이기 때문에 test.txt 파일은 더 이상 존재하지 않습니다.

💠 EBS CSI Driver

  • Kubernetes 클러스터 내에서 Amazon EBS 볼륨을 관리하고 사용하기 위한 표준화된 방법을 제공하는 드라이버
  • CSI는 컨테이너 오케스트레이션 시스템(예: Kubernetes)과 스토리지 프로비저닝 시스템(예: Amazon EBS) 간의 통합을 위한 표준 인터페이스를 정의
  • CSI는 스토리지 시스템과 컨테이너 오케스트레이션 시스템 간의 통합을 표준화하여 관리하기 쉽도록 설계
  • Kubernetes 클러스터에서 Amazon EBS 볼륨을 동적으로 프로비저닝하고, 볼륨을 관리하며, 볼륨을 Pod에 마운트

  • 보안을 개선하고 작업량을 줄이기 위해 Amazon EBS CSI 드라이버를 Amazon EKS 애드온으로 관리

  • 애드온에 의해 EKS 클러스터에 생성된 것 확인 : 데몬셋은 클러스터의 각 노드에서 파드를 실행

  • Amazon EBS GP2 볼륨 유형을 사용하여 StorageClass 개체가 이미 구성되어 있음

💠 StatefulSet with EBS Volume

  • 데이터베이스 파일을 영구적으로 저장하기 위해 카탈로그 마이크로서비스의 MySQL DB를 변경하여 새로운 EBS 볼륨을 프로비저닝

 

  • Kustomize를 활용하여 두 가지 작업을 수행
    • EBS 볼륨을 사용하는 카탈로그 구성 요소에서 사용하는 MySQL 데이터베이스에 대한 새 StatefulSet을 생성
    • 이 새 버전의 데이터베이스를 사용하도록 카탈로그 구성 요소를 업데이트
  • 동적 볼륨 프로비저닝을 활용하여 새로운 EBS 볼륨, 퍼시스턴트볼륨(PV) 및 퍼시스턴트볼륨클레임(PVC)을 모두 자동으로 생성하도록 쿠버네티스에 지시하는 volumeClaimTemplates 필드 확인

  • catalog 구성 요소 자체를 새로운 스테이트풀셋을 사용하도록 재구성

  • 새로 배포한 스테이트풀셋이 실행 중인지 확인

 

  • catalog-mysql-ebs StatefulSet에서 30GiB의 퍼시스턴트볼륨클레임이 첨부되어 있고 스토리지클래스 이름이 gp2인 것을 확인

  • 동적 볼륨 프로비저닝이 어떻게 자동으로 퍼시스턴트볼륨(PV)을 생성했는지 확인

  • AWS CLI를 사용하면 자동으로 생성된 Amazon EBS 볼륨을 확인

  • AWS 콘솔 확인: 키가 kubernetes.io/created-for/pvc/name이고 값이 data-catalog-mysql-ebs-0인 EBS 볼륨

  • 새로 연결된 EBS 볼륨을 확인 : 마운트한 파일 시스템을 검사
  • 현재 /var/lib/mysql에 마운트되고 있는 디스크를 확인 : 영구적인 방식으로 저장되는 상태 저장 MySQL 데이터베이스 파일을 위한 EBS 볼륨

  • 데이터가 실제로 영구적인지 테스트 : test.txt 파일을 생성

  • /var/lib/mysql 디렉터리에 test.txt 파일이 생성되었는지 확인

  • catalog-mysql-ebs 파드를 제거하여 스테이트풀셋 컨트롤러가 자동으로 다시 생성되는지 확인

  • catalog-mysql-ebs 파드가 다시 생성되었는지 확인

  • MySQL 컨테이너 /var/lib/mysql 경로에서 ls 명령을 실행하여 생성한 test.txt 파일을 찾고 파일이 유지되는지 확인
  • 파드를 삭제하고 재시작한 후에도 123에 올바른 텍스트가 있는 test.txt 파일을 계속 사용 가능
  • 퍼시스턴트 볼륨(PV)의 주요 기능 : Amazon EBS는 데이터를 저장하고 AWS 가용 영역 내에서 데이터를 안전하게 유지하며 사용할 수 있도록 합니다.

'AWS EKS Workshop Study 2기' 카테고리의 다른 글

AWS EKS - Observability - Logging in EKS  (0) 2024.03.30
AWS EKS - Storage - EFS  (2) 2024.03.23
AWS EKS - Security Groups for Pods  (0) 2024.03.16
AWS EKS - Network Policies  (2) 2024.03.16
AWS EKS - 최적화 AMI  (0) 2024.03.09
Comments