FKS에서 볼륨 사용하기 (Using volumes with FKS)
Fly Kubernetes(FKS)는 영구 볼륨(persistent volumes)과 일반 임시 볼륨(generic ephemeral volumes)을 지원해요. 이 가이드에서는 FKS에서 볼륨을 사용할 때 알아야 할 일반적인 고려 사항과 함께 영구 볼륨 및 임시 볼륨을 구성하는 방법을 예시로 설명해 드릴게요.
출처: 문서
본문
Fly Kubernetes는 클로즈드 베타 단계이며 중요 프로덕션 용도로는 권장되지 않습니다. 문제를 보고하거나 피드백을 제공하려면 [beta@fly.io](mailto:beta@fly.io)로 이메일을 보내 주세요.Fly Kubernetes는 영구 볼륨과 일반 임시 볼륨을 지원해요. Fly Kubernetes에서 볼륨을 사용할 때 명심해야 할 일반적인 고려 사항이 있어요:
- 볼륨은 Fly Volumes 위에 구축돼요. 로컬 NVME 드라이브이며 Pod가 볼륨과 같은 리전에 배포되어야 해요.
- 한 번에 하나의 영구 또는 임시 볼륨만 마운트할 수 있어요.
- 사용 가능한 최대 스토리지 크기는 500GB예요.
영구 볼륨 (Persistent Volumes)
PersistentVolumes은 PersistentVolumeClaims(PVC)를 통해 관리돼요. PersistentVolumes(PV)은 PersistentVolumeClaim의 수명 주기에 묶여 있어요. 기본적으로 PVC를 만들면 내부 PV가 생성되고, PVC를 삭제하면 여기에 바인딩된 PV도 삭제돼요.
Pod와 함께 사용할 PersistentVolume을 구성하는 예시는 다음과 같아요:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
selector:
matchLabels:
region: iad
storageClassName: flyio-volume
accessModes:
- ReadWriteOncePod
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
resources:
limits:
memory: "512Mi"
cpu: "1"
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
우리의 설정에서:
storageClassName은flyio-volume또는flyio-volume-retain으로 설정해야 해요. 사용 가능한 스토리지 클래스는kubectl get sc로 확인할 수 있어요. 기본 StorageClass는flyio-volume이에요.selector는 선택 사항이에요. 두 가지 목적을 제공해요. 첫째, PVC가 selector에 지정된 리전의 PV에 바인딩되도록 보장해요. 둘째, PVC가 내부 Fly Volume의 동적 프로비저닝이 필요하다면 지정된 리전에 프로비저닝돼요. 설정하지 않으면 볼륨이 클러스터의 리전에 생성돼요.accessModes는ReadWriteOncePod만 지원해요.
설정을 적용한 후 kubectl을 사용해 정의로 생성된 PVC와 PV를 확인할 수 있어요.
> kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myclaim Bound pvc-r1plo75g59d25l0r 5Gi RWOP flyio-volume 9s
> kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-r1plo75g59d25l0r 5Gi RWOP Delete Bound default/myclaim flyio-volume 55s
회수 정책 (Reclaim policy)
Fly Kubernetes는 PersistentVolumes의 Delete 및 Retain 정책을 모두 지원해요.
- StorageClass
flyio-volume은Delete로 설정된 회수 정책을 가져요. - StorageClass
flyio-volume-retain은Retain으로 설정된 회수 정책을 가져요.
기본적으로 flyio-volume이 사용돼요.
flyio-volume-retain StorageClass를 사용할 때는 PersistentVolume 객체와 그 내부 Fly Volume을 삭제할 책임이 여러분에게 있어요. 내부 스토리지의 세부 정보는 PersistentVolume의 annotations에서 찾을 수 있어요. 위의 PV를 사용한다면:
> kubectl describe pv pvc-r1plo75g59d25l0r
Name: pvc-r1plo75g59d25l0r
Labels: region=iad
Annotations: fly.io/app: fks-default-vz5dlqz7v4ylrnpq
fly.io/region: iad
pv.kubernetes.io/provisioned-by: volume.csi.fly.io
volume.fly.io/id: vol_r1plo75g59d25l0r
Finalizers: [kubernetes.io/pv-protection]
StorageClass: flyio-volume
Status: Bound
Claim: default/myclaim
Reclaim Policy: Delete
Access Modes: RWOP
VolumeMode: Filesystem
Capacity: 5Gi
Node Affinity: <none>
Message:
Source:
Type: CSI (a Container Storage Interface (CSI) volume source)
Driver: volume.csi.fly.io
FSType: ext4
VolumeHandle: vol_r1plo75g59d25l0r
ReadOnly: false
VolumeAttributes: <none>
Events: <none>
fly.io/app annotation은 볼륨이 속한 Fly 앱을 지정해요. volume.fly.io/id annotation은 볼륨의 ID를 제공해요.
flyctl을 사용해 Fly Volume을 삭제할 수 있어요.
fly vol rm pvc-r1plo75g59d25l0r -a fks-default-vz5dlqz7v4ylrnpq
일반 임시 볼륨 (Generic ephemeral volumes)
Fly Kubernetes는 일반 임시 볼륨을 통해 임시 볼륨을 지원해요. 내부적으로 동일한 PVC와 PV 메커니즘을 사용해요. Kubernetes가 PVC와 그에 대응하는 PV를 생성하고, Pod가 삭제될 때 두 객체를 모두 삭제해요. 일반 임시 볼륨이 있는 Pod를 만드는 예시는 다음과 같아요:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
image: nginx:latest
volumeMounts:
- mountPath: "/var/www/html"
name: scratch-volume
resources:
limits:
memory: "512Mi"
cpu: "1"
volumes:
- name: scratch-volume
ephemeral:
volumeClaimTemplate:
spec:
accessModes:
- ReadWriteOncePod
storageClassName: "flyio-volume"
resources:
requests:
storage: 5Gi
일반 임시 볼륨이 예상대로 작동하려면 storageClassName을 flyio-volume으로 설정해야 해요.