개요
AWS용 GKE로 가져올 AWS Elastic Block Store(EBS) 볼륨이 이미 있는 경우 PersistentVolume(PV) 객체를 만들어 특정 PersistentVolumeClaim(PVC)에 대해 예약할 수 있습니다.
이 페이지에서는 데이터가 채워진 기존 EBS 볼륨을 사용하여 PV를 만드는 방법과 포드에서 PV를 사용하는 방법을 설명합니다.
시작하기 전에
anthos-aws
디렉터리에서anthos-gke
를 사용하여 컨텍스트를 사용자 클러스터로 전환합니다. CLUSTER_NAME을 사용자 클러스터 이름으로 바꿉니다.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-controlplane
AWS IAM 프로필을 키 사용자로 추가합니다.
다음 단계
- AWS용 GKE에서 추가 스토리지 드라이버를 사용합니다.