개요
AWS용 GKE로 가져올 AWS Elastic Block Store(EBS) 볼륨이 이미 있는 경우 PersistentVolume(PV) 객체를 만들어 특정 PersistentVolumeClaim(PVC)에 대해 예약할 수 있습니다.
이 페이지에서는 데이터가 채워진 기존 EBS 볼륨을 사용하여 PV를 만드는 방법과 포드에서 PV를 사용하는 방법을 설명합니다.
시작하기 전에
- anthos-aws디렉터리에서- anthos-gke를 사용하여 컨텍스트를 사용자 클러스터로 전환합니다.- cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME 
기존 EBS 볼륨의 PersistentVolume 만들기
새 PV를 지정하여 기존 EBS 볼륨을 가져올 수 있습니다.
- 다음 YAML을 - existing-volume.yaml이라는 파일에 복사하고 다음과 같이 값을 바꿔 구성을 완료합니다.- volume-capacity: 볼륨 크기입니다. 예를 들면 30Gi입니다. Kubernetes의 볼륨 용량 지정 방법에 대한 자세한 내용은 메모리 의미를 참조하세요.
- storage-class-name: 볼륨을 프로비저닝하는 StorageClass의 이름입니다. 예를 들어 기본 - standard-rwo를 사용할 수 있습니다.
- ebs-id: EBS 볼륨 ID입니다. 예를 들면 - vol-05786ec9ec9526b67입니다.
- fs-type: 볼륨의 파일 시스템입니다. 예를 들면 - ext4입니다.
- zone: EBS 볼륨을 호스팅하는 AWS 가용성 영역입니다. 예를 들면 - us-east-1c입니다.
 - apiVersion: v1 kind: PersistentVolume metadata: name: volume-name annotations: pv.kubernetes.io/provisioned-by: ebs.csi.aws.com spec: capacity: storage: volume-capacity accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: storage-class-name claimRef: name: my-pvc namespace: default csi: driver: ebs.csi.aws.com volumeHandle: ebs-volume-id fsType: file-system-type nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ebs.csi.aws.com/zone operator: In values: - zone
- volume-capacity: 볼륨 크기입니다. 예를 들면 
- YAML을 클러스터에 적용 - kubectl apply -f existing-volume.yaml
- PV 생성을 확인합니다. - kubectl describe pv volume-name- 이 명령어의 출력에는 PV 상태가 포함됩니다. 
PersistentVolumeClaim 및 Pod에서 볼륨 사용
볼륨을 가져온 후에는 PVC와 PVC를 연결하는 Pod를 만들 수 있습니다.
아래의 YAML은 PVC를 만들어 Nginx 웹 서버를 실행하는 Pod에 연결합니다. 이를 nginx.yaml이라는 파일에 복사하고 다음과 같이 값을 바꿔 구성을 완료합니다.
- storage-class: 이전에 만든 PersistentVolume의 StorageClass 이름입니다. 예를 들면 standard-rwo입니다.
- volume-name: 이전에 만든 볼륨의 이름입니다.
- volume-capacity: 볼륨 크기입니다. 예를 들면 30Gi입니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-class-name
  volumeName: volume-name
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: volume-capacity
---
apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: data
  volumes:
   - name: data
     persistentVolumeClaim:
       claimName: my-pvc
- YAML을 클러스터에 적용 - kubectl apply -f nginx.yaml
- kubectl describe로 Nginx 인스턴스 상태를 확인합니다. 출력에- Running- STATUS가 포함됩니다.- kubectl describe pod web-server
암호화된 EBS 볼륨 사용
EBS 볼륨이 AWS 키 관리 서비스(KMS)로 암호화되는 경우 AWS용 GKE 컨트롤 플레인의 AWS IAM 역할에 KMS 키에 대한 액세스 권한을 부여해야 합니다.
AWS IAM 역할 이름을 받으려면 다음 단계를 수행하세요.
- GKE on AWS 구성이 있는 디렉터리로 변경합니다. 이 디렉터리는 관리 서비스를 설치할 때 생성됩니다. - cd anthos-aws 
- anthos-gke도구로 AWS용 GKE 환경을 만들었는지 또는 AWS IAM 프로필을 수동으로 만들었는지 선택합니다.- anthos-gke 도구- terraform output명령어를 사용하고- iamInstanceProfile값을 검색합니다.- terraform output | grep iamInstanceProfile- anthos- gke도구로 AWS용 GKE 환경을 만든 경우 출력은 다음과 같습니다.- iamInstanceProfile: gke-CLUSTER_ID-controlplane iamInstanceProfile: gke-CLUSTER_ID-nodepool- 여기서 CLUSTER_ID는 클러스터 ID입니다. 다음 단계를 위해 - gke-CLUSTER_ID-controlplane값을 복사합니다.- 수동으로 생성됨- 다음 명령어를 사용하여 - terraform output출력을 검사합니다.- terraform output | less- 출력을 스크롤하여 AWSCluster 정의 뒤에 있는 iamInstanceProfile을 찾습니다. - kind: AWSCluster metadata: name: cluster-0 spec: ... controlPlane: ... iamInstanceProfile: INSTANCE_PROFILE_NAME- 다음 단계를 위해 - INSTANCE_PROFILE_NAME값을 복사합니다.
- 컨트롤 플레인에 EBS 볼륨 액세스 권한을 부여하려면 EBS 볼륨을 암호화하는 데 사용되는 AWS KMS 키에 - gke-xxxxxx-controlplaneAWS IAM 프로필을 키 사용자로 추가합니다.
다음 단계
- AWS용 GKE에서 추가 스토리지 드라이버를 사용합니다.