EKS Auto Mode에 샘플 상태 저장 워크로드 배포 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

EKS Auto Mode에 샘플 상태 저장 워크로드 배포

이 자습서에서는 EKS Auto Mode 클러스터에 샘플 상태 저장 애플리케이션을 배포하는 방법을 안내합니다. 애플리케이션은 영구 볼륨에 타임스탬프를 기록하여 EKS Auto Mode의 자동 EBS 볼륨 프로비저닝 및 지속성 기능을 보여줍니다.

사전 조건

  • EKS Auto Mode 클러스터

  • 적절한 권한으로 구성된 AWS CLI

  • kubectl 설치 및 구성

1단계: 환경 구성

  1. 환경 변수를 설정합니다.

    export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
  2. kubeconfig를 업데이트합니다.

    aws eks update-kubeconfig --name "${CLUSTER_NAME}"

2단계: 스토리지 클래스 생성

StorageClass는 EKS 자동 모드가 EBS 볼륨을 프로비저닝하는 방법을 정의합니다.

EKS 자동 모드는 StorageClass를 생성하지 않습니다. EKS 자동 모드의 스토리지 기능을 사용하려면 ebs.csi.eks.amazonaws.com을 참조하는 StorageClass를 생성해야 합니다.

  1. storage-class.yaml라는 이름의 파일을 만듭니다.

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. StorageClass를 적용합니다.

    kubectl apply -f storage-class.yaml

핵심 구성 요소:

  • provisioner: ebs---csi---eks.amazonaws.com.rproxy.govskope.ca-EKS Auto Mode를 사용합니다.

  • volumeBindingMode: WaitForFirstConsumer-포드에 필요할 때까지 볼륨 생성을 지연합니다.

  • type: gp3-EBS 볼륨 유형을 지정합니다.

  • encrypted: "true"-EBS는 기본 aws/ebs 키를 사용하여 이 클래스로 생성된 볼륨을 암호화합니다. 이는 선택 사항이며, 권장 사항은 아닙니다.

  • storageclass.kubernetes.io/is-default-class: "true"-영구 볼륨 클레임에서 다른 볼륨 클래스를 지정하지 않는 한 Kubernetes는 기본적으로 이 스토리지 클래스를 사용합니다. 다른 스토리지 컨트롤러에서 마이그레이션하는 경우 이 값을 설정할 때 주의하세요. (선택 사항)

3단계: 영구 볼륨 클레임 생성

PVC는 StorageClass에서 스토리지를 요청합니다.

  1. pvc.yaml라는 이름의 파일을 만듭니다.

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi
  2. PVC를 적용합니다.

    kubectl apply -f pvc.yaml

핵심 구성 요소:

  • accessModes: ReadWriteOnce-한 번에 한 노드씩 볼륨 탑재 가능

  • storage: 8Gi-8GiB 볼륨 요청

  • storageClassName: auto-ebs-sc - 생성한 StorageClass를 참조합니다.

4단계: 애플리케이션 배포

배포는 영구 볼륨에 타임스탬프를 기록하는 컨테이너를 실행합니다.

  1. deployment.yaml라는 이름의 파일을 만듭니다.

    apiVersion: apps/v1 kind: Deployment metadata: name: inflate-stateful spec: replicas: 1 selector: matchLabels: app: inflate-stateful template: metadata: labels: app: inflate-stateful spec: terminationGracePeriodSeconds: 0 nodeSelector: eks.amazonaws.com/compute-type: auto containers: - name: bash image: public.ecr.aws/docker/library/bash:4.4 command: ["/usr/local/bin/bash"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 60; done"] resources: requests: cpu: "1" volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: auto-ebs-claim
  2. 배포를 적용합니다.

    kubectl apply -f deployment.yaml

핵심 구성 요소:

  • 파일에 타임스탬프를 기록하는 단순 Bash 컨테이너

  • /data에 PVC 탑재

  • CPU 코어 1개 요청

  • EKS 관리형 노드에 노드 선택기 사용

5단계: 설정 확인

  1. 포드가 실행 중인지 확인합니다.

    kubectl get pods -l app=inflate-stateful
  2. PVC가 바인딩되었는지 확인합니다.

    kubectl get pvc auto-ebs-claim
  3. EBS 볼륨을 확인합니다.

    # Get the PV name PV_NAME=$(kubectl get pvc auto-ebs-claim -o jsonpath='{.spec.volumeName}') # Describe the EBS volume aws ec2 describe-volumes \ --filters Name=tag:CSIVolumeName,Values=${PV_NAME}
  4. 데이터가 작성되고 있는지 확인합니다.

    kubectl exec "$(kubectl get pods -l app=inflate-stateful \ -o=jsonpath='{.items[0].metadata.name}')" -- \ cat /data/out.txt

6단계: 정리

다음 명령을 실행하여 이 자습서에서 만든 리소스를 모두 제거합니다.

# Delete all resources in one command kubectl delete deployment/inflate-stateful pvc/auto-ebs-claim storageclass/auto-ebs-sc

비하인드 스토리

  1. PVC는 StorageClass에서 스토리지를 요청합니다.

  2. 포드가 예약된 경우:

    1. EKS Auto Mode는 EBS 볼륨을 프로비저닝합니다.

    2. PersistentVolume을 생성합니다.

    3. 노드에 볼륨을 연결합니다.

  3. 포드가 볼륨을 탑재하고 타임스탬프 작성을 시작합니다.

스냅샷 컨트롤러

EKS Auto Mode는 스냅샷 컨트롤러라고도 하는 Kubernetes CSI Snapshotter와 호환됩니다. 그러나 EKS Auto Mode에는 스냅샷 컨트롤러가 포함되지 않습니다. 스냅샷 컨트롤러의 설치와 구성은 사용자의 책임입니다. 자세한 내용은 CSI 볼륨의 스냅샷 기능 활성화 단원을 참조하십시오.

EKS Auto Mode의 스토리지 기능을 참조하는 다음 VolumeSnapshotClass를 검토합니다.

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: auto-ebs-vsclass driver: ebs.csi.eks.amazonaws.com deletionPolicy: Delete

Kubernetes CSI Snapshotter에 대해 자세히 알아보세요.