์คํ ๋ฆฌ์ง์ ๊ด๋ จ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค์๋ StorageClass, PersistentVolume ์ด ์์ต๋๋ค.
๋ณดํต ๋์ ์ธ ์คํ ๋ฆฌ์ง๋ ์ํ๋ค๋ฉด StorageClass (์ดํ SC) ๋ฅผ, ์ ์ ์ธ ์คํ ๋ฆฌ์ง๋ฅผ ์ํ๋ค๋ฉด PersistentVolume (์ดํ PV) ์ ์ฌ์ฉํฉ๋๋ค.
ํํธ, ํ๋์์ ์คํ ๋ฆฌ์ง ์ฐ๊ฒฐ์ ํ๋ ค๋ฉด PersistentVolumeClaim (์ดํ PVC) ์ ์ด์ฉํด์ SC ๋ PV ๋ฅผ Bound ํด์ฃผ์ด์ผ ํฉ๋๋ค.
AWS EBS ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ํ ๋ฐ, EBS ๋ง์ผ๋ก๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
๋ฐ๋ก ํ๋์ EBS ๋ ๋ค์ค ์ธ์คํด์ค ์ฐ๊ฒฐ์ด ๋์ง ์๋๋ค๋ ์ ์ด์ฃ .
์๋ฅผ ๋ค์ด EBS ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Deployment Replica 2 ๋ก ๋ฐฐํฌํ๋ค๊ณ ๊ฐ์ ํด๋ณด์ฃ .
๊ทธ๋ฆฌ๊ณ ํ๋๋ค์ ์๋ก ๋ค๋ฅธ ์์ปค ๋ ธ๋์ ๋ฐฐ์น๋ฉ๋๋ค.
EBS ๋ ๋จ์ผ ๋ ธ๋์๋ง ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ฏ๋ก ๋ค๋ฅธ ๋ ธ๋์ ๋ฐฐํฌ๋ ํ๋๋ EBS ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
EBS gp2, gp3 ๋ ๋จ์ผ ์ฐ๊ฒฐ๋ง ๊ฐ๋ฅํ๊ณ , EBS io1, io2 ๋ ๋ค์ค ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํจ
ํ์ง๋ง io1, io2 ๋ ๋ฐ์ด๋ IOPS ์ฑ๋ฅ์ ํ์๋ก ํ๋ ๊ณณ์ ์ฌ์ฉ๋๊ณ , ๊ฐ๊ฒฉ์ด ํจ์ฌ ๋น์ธ๊ธฐ์ ๋ค์ ๋ฌด๋ฆฌ๊ฐ ์์ด ๋ณด์
์ฆ, Pod2 ๋ ๊ณ์ํด์ Pending ์ํ์ ๋น ์ง๊ฒ ๋ ๊ฒ๋๋ค.
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ฐ๋ก AWS EFS ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. AWS ์ ์์ ๊ด๋ฆฌํ NFS ์๋น์ค๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
EFS ์ ๋ํด์ ๋ฐ๋ก ์ค๋ช ํ์ง ์๊ฒ ์ต๋๋ค. ๊ถ๊ธํ๋ค๋ฉด ์ฌ๊ธฐ ํด๋ฆญ
๊ทธ๋ผ ๋ฐ๋ก ์ด๋ป๊ฒ ์ฟ ๋ฒ๋คํฐ์ค์์ EFS ๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๋ ์ง ์์๋ณด๋๋ก ํ์ฃ !
๋ ์ธ ๋๋์ฝ๋~
EFS CSI Driver
์ฟ ๋ฒ๋คํฐ์ค์์ EFS ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ํ์ ์ ํ ์์ ์ด ์์ต๋๋ค.
๋ฐ๋ก efs-csi-driver ์ค์น ์์ ์ ๋๋ค.
Amazon EBS Container Storage Interface(CSI) ๋๋ผ์ด๋ฒ๋ AWS์์ ์คํ๋๋ Kubernetes ํด๋ฌ์คํฐ๊ฐ Amazon EFS ํ์ผ ์์คํ ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ CSI ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค์น ํ๋ ๋ฐฉ๋ฒ์ด ์ด๋ ต์ง ์์ผ๋ ๋ค์ ํด์ผํ๋ ์์ ์ด ๋ง์ผ๋ฏ๋ก ์ด๋ฒ ๊ธ์์๋ ์ด๋ฏธ ์ค์น๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค.
์ค์นํ๋ ๋ฐฉ๋ฒ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์!
์ ๋ Helm ์ ์ด์ฉํด์ ์ค์นํ๊ณ , ๋ฒ์ ์ 2.3.6 ๋ฒ์ ์ ๋๋ค.
์ด๋ฒ ๊ธ์์ EFS ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , Access Point ๋ฅผ ํตํด ํ๋์ ๋ง์ดํธ๋ฅผ ์งํํ ๊ฒ๋๋ค.
EFS ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ๋ณด์์ ๋ง์ด ์ข์ง ์์ฃ . ๊ถํ์ด๋ผ๋ ํ๋ํ๋ ๋ ์๋ EFS ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๋ ๋ฆด ์ ์์ฃ .
Access Point ๋ ๋๋ต ์ด๋ ๊ฒ ์๊ฒผ์ต๋๋ค. (์์ธํ๊ฒ ์๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ ์ฐธ์กฐ, Access Point ๋ ๋ค์ ๊ธ์์ ์์ธํ ๋ค๋ค๋ณด๊ฒ ์ต๋๋ค.)
์ ์ ํ๋ก๋น์ ๋์ด๋ผ๊ณ ํ๋ฉด ๋ฏธ๋ฆฌ ์์ฑ๋ Access Point ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ , ๋์ ํ๋ก๋น์ ๋์ด๋ผ๊ณ ํ๋ฉด Access Point ๋ฅผ SC ๊ฐ ์์ฑํ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
๋์ ํ๋ก๋น์ ๋์ด๋ผ๊ณ ํด์ EFS ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋
Access Point ๋ง ๋์ ์ผ๋ก ๊ด๋ฆฌํด์ค
๊ณต์ ๋ฌธ์์์ Access Point ๋ง ๋์ ์ผ๋ก ๊ฐ๋ฅ ์ด๋ผ๊ณ ๋ช ์๋์ด ์๋ ๊ฑธ ๋ณด๋ฉด ์ถํ EFS ๋ ๊ฐ๋ฅํ ์ง๋?
๊ฐ์ ํ๊ฒฝ์ ๋ง๊ฒ ์ฌ์ฉํ๋ฉด ๋์ง๋ง, ๊ฐ์ธ์ ์ผ๋ก ๋์ ํ๋ก๋น์ ๋์ ๋ ์ ํธํฉ๋๋ค. ์๋๋ฉด Access Point ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ด๋ง ๊ท์ฐฎ์ ์์ ์ด ์๋๋๋ค ใ ใ
๋ง์ฝ ์๋ก ์ฐ๊ด ์๋ ํ๋ 10๊ฐ์์ Access Point ๋ฅผ ํตํ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ์ ๋,
์ ์ ํ๋ก๋น์ ๋์ ์ฌ์ฉํ๋ค๋ฉด, 10๊ฐ์ Access Point ๋ฅผ ํ ๋ผํผ์ด๋ AWS CLI, Console ๋ก ์์ฑํด์ค์ผ ํฉ๋๋ค.
ํ์ง๋ง ๋์ ํ๋ก๋น์ ๋์ SC ๊ฐ ์์์ ์์ฑํด์ฃผ๊ณ ๊ด๋ฆฌํด์ค๋๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ์ ์ด๋ฐ ์๊ฐ์ด ๋ค ์ ์์ต๋๋ค.
ํ๋์ ๊ณตํต๋ Access Point ๋ง๋ค์ด์ 10๊ฐ์ ํ๋์์ ์ฌ์ฉํ๋ฉด ๋์ง ์๋?
๋์์ง ์์ง๋ง, ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ด์.
์๋ ํ๋ 3๊ฐ๋ ์๋ก ์์ ํ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
์ด์ง๋ง ํ๋์ Access Point ์ฐ๊ณ ์์ด์.
๊ทธ๋ฆฌ๊ณ 3๊ฐ ๋ชจ๋ data.txt ์ ์ค์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ฃ .
ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ๊ฒฐ๊ตญ ๊ฐ์ฅ ๋ง์ง๋ง ์คํ๋ ํ๋๊ฐ ๊ฐ์ง๊ณ ์๋ data.txt ๊ฐ overwrite ๋ ๊ฑฐ์์.
์ฆ, ํ๋1 ๊ณผ ํ๋2 ๋ ์๋์น ์๊ฒ ํ๋3์ data.txt ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ๊ฑฐ์ฃ .
์ค์ ๋ก /data ๋ผ๋ ํด๋๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ฏ๋ก ์์นซํ๋ค๊ฐ ํ๋ก๋ฉํ ์ฐ์ค๊ฐ ๊ทธ๋ผํ๋์ data ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ ๋ถ์์ฌ๊ฐ ์๊ธฐ๊ฒ ๋๋๊ฑฐ์ฃ .
๊ทธ๋ผ ์ด์ ์ ์ ํ๋ก๋น์ ๋๊ณผ ๋์ ํ๋ก๋น์ ๋์ ์ด์ฉํด์ ํ๋์ Access Point ๋ฅผ ์ฐ๊ฒฐํด๋ณด์ฃ .
์ ์ ํ๋ก๋น์ ๋
์์ ๋ ์ฌ๊ธฐ์ ๋ณผ ์ ์์ต๋๋ค.
# Static Provisioning
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv1
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: ""
csi:
driver: efs.csi.aws.com
volumeHandle: fs-0556::fsap-0312
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: efs-pvc
spec:
storageClassName: ""
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
kind: Pod
apiVersion: v1
metadata:
name: my-pod
spec:
serviceAccountName: sd-dev-efs-common-irsa
containers:
- name: my-container
image: amazon/aws-cli
command: [ "/bin/sh" ]
args: [ "-c", "while true; do echo hello; sleep 1d;done" ]
securityContext:
runAsUser: 1000
runAsGroup: 1000
volumeMounts:
- name: my-pv
mountPath: /efs/fs
volumes:
- name: my-pv
persistentVolumeClaim:
claimName: efs-pvc
๋ง์ฝ efs-csi-driver ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ค์นํ๋ค๋ฉด, ์ yaml ๋ก ์์ฑํ์ ๋ pvc ๊ฐ pv ์ Bound ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ Access Point ์ ์ ๋ณด์ ๋๋ค.
ํ๋์์ ์ฌ์ฉํ๋ ๋์คํฌ ๋ชฉ๋ก์ ๋๋ค. /efs/fs ๊ฐ EFS Access Point ์ ๋ง์ดํธ ๋์ด ์๋ค๋ ๊ฑธ ์ ์ ์์ต๋๋ค.
PVC ์์ Request Capacity ๋ฅผ 5Gi ๋ก ํ๋๋ฐ ์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด 8E(์์ฌ) ์ธ ๊ฒ์ ์ ์ ์์ต๋๋ค.
EFS ์ ์ฉ๋์ด๋ฉฐ, PVC ์์์ Request Capacity ๋ ์ฌ๊ธฐ์ ์ ํ ์ค์ํ์ง ์๋ค๋ ๊ฑธ ์ ์ ์์ต๋๋ค.
๋จ์ง PV ์ PVC ๊ฐ ์๋ก์ Request Capacity ๋ฅผ ๋ณด๊ณ Bound ์ญํ ์ ํด์ฃผ๋ ๊ฒ ๋ฟ์ด์ฃ .
ํ๋์ ์ ๊ทผํด์ mountPath ๋ฅผ ์ดํด๋ณด๋ฉด ํด๋น Path ๋ ํ๋์ uid:gid ๊ฐ root:root ์์๋ ๋ถ๊ตฌํ๊ณ , 2001:2001 ์ธ ๊ฒ์ ํ์ธ ํ ์ ์์ฃ .
Access Point ๋ฅผ ์ด์ฉํ path ์ ํ์ผ์ ์์ฑํ๋๋ผ๊ณ root:root ๊ฐ ์๋๊ณ 2001:2001 ๋ก ์์ฑ๋ฉ๋๋ค.
my-pod2 ๋ฅผ ์์ฑํ๊ณ ๋๊ฐ์ Access Point ๋ก ์ฐ๊ฒฐ ํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ผ my-pod2 ์์๋ test.txt ํ์ผ์ ๋ณผ ์ ์์ด์ผ๊ฒ ์ฃ ?
์์ฃผ ์ข์ต๋๋ค.
๋์ ํ๋ก๋น์ ๋์ ๋ ์ฌ์์. ๋ฐ๋ก ์์๋ณด์ฃ .
๋์ ํ๋ก๋น์ ๋
์์ ๋ ์ฌ๊ธฐ์ ๋ณผ ์ ์์ต๋๋ค.
# Dynamic Provisioning
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap # ํ์ฌ access point ๋ง ํ๋ก๋น์ ๋ ์ง์๋จ
fileSystemId: fs-0556
directoryPerms: "775"
basePath: "/dynamic_provisioning/my-pod"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: efs-sc
resources:
requests:
storage: 5Gi
---
kind: Pod
apiVersion: v1
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: amazon/aws-cli
command: [ "/bin/sh" ]
args: [ "-c", "while true; do echo hello; sleep 1d;done" ]
securityContext:
runAsUser: 1000
runAsGroup: 1000
volumeMounts:
- name: my-pv
mountPath: /efs/fs
volumes:
- name: my-pv
persistentVolumeClaim:
claimName: efs-pvc
SC ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ PVC ์ STORAGECLASS ์ efs-sc ๊ฐ ๋ช ์๋ ๊ฑธ ํ์ธํ ์ ์์ผ๋ฉฐ VOLUME ์ด๋ฆ์ด ๋์์ ๋๋ค.
๋์ ์ผ๋ก ์์ฑ๋ Access Point ์ ๋๋ค.
gid ์ uid ๋ ์๋์ ๊ฐ์ด ์๋์ผ๋ก ๋ถ์ฌ๋ฉ๋๋ค.
๋ถ์ฌ๋๋ uid ์ gid ๋ ๋ชจ๋ ๋ค๋ฅด๊ฒ ๋ถ์ฌ๋๋ ๊ฒ์ ์ ์ ์๋๋ฐ, ๋ง์ฝ uid ์ gid ๊ฐ ๊ฒน์น๊ฒ ๋๋ฉด ํด๋น ๋๋ ํฐ๋ฆฌ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ถ ๋ค๋ฅด๊ฒ ๋ถ์ฌ๋ฉ๋๋ค.
์ด์ธ ๋ถ๋ถ์ ์ ์ ํ๋ก๋น์ ๋๊ณผ ๋ค๋ฅด์ง ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์ด๋ ๊ฒ EFS ์ ์ฟ ๋ฒ๋คํฐ์ค์์ ๊ถํฉ์ ์์๋ดค๋๋ฐ ์ ๋ง ์ข์๊ฑฐ ๊ฐ์์. ํนํ SC ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋๋ฌด ์ฝ๊ฒ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ ์ ์์ฃ .
EBS ์ ๋จ์ ์ ๋ณด์ํ ์ ์์ต๋๋ค.
๋ค๋ง ๋ฌธ์ ๋ EFS ๋ EBS ๋ณด๋ค ๋น์๋๋ค. ์คํ ๋ฆฌ์ง ์ฉ๋ ์ธก๋ฉด์์ EFS ๊ฐ 3๋ฐฐ ๋ ๋น์๋๋ค.
์๋ฅผ ๋ค์ด EBS ๊ฐ์ ๊ฒฝ์ฐ 30Gi ๋ฅผ ์ผ์ ๋ 3000์ ์ฒญ๊ตฌ ๋๋ค๋ฉด, EFS ๋ 9000์์ด ์ฒญ๊ตฌ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ EFS ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์๋ ์กฐ๊ฑด์ ์ ๋ฐ์ ธ๋ด์ผํฉ๋๋ค.
- Multi AZ ๋๋ One Zone
- ํ๋ก๋น์ ๋ ๋๋ ๋ฒ์คํธ
- IA (Infrequent Access)
๋ ์์์ ๋ณด์ ๊ด๋ จํด์ ์์ธํ ๋ค๋ฃจ์ง ์์์ง๋ง, ํ๋์ ์๋น์ค ์ด์นด์ดํธ๋ฅผ ์ง์ ํด์ฃผ์ด์ ํน์ IAM Role ๋ง EFS ์ Access Point ์ ์ ๊ทผํ๊ฒ ํด์ผ ํฉ๋๋ค. ๋ํ EFS ํ์ผ ์์คํ ์ ์ฑ ๋ ์๊ฒฉํ๊ฒ ๊ฐ์ ธ๊ฐ ํ์๋ ์๊ณ ์.
๊ทธ๋ฌ๋ฉด ์ค๋์ ์ฌ๊ธฐ๊น์ง~!