λ€μ΄κ°λ©°
μ¬λ΄μμ POD
λ₯Ό μμ±ν λμ EFK Stack
μΌλ‘ ꡬμ±νκΈ°μ , POD
λ³λ‘ log
λ₯Ό μ μ₯ν΄μΌν μ΄μκ° μμμ΅λλ€. (λ¬Όλ‘ νλλ stateless
νκ² κ΄λ¦¬λμ΄μΌνμ§λ§ μ΄λ€ μ΄μ λλ¬Έμ Stateful
νκ² κ΄λ¦¬κ° λμμμ΅λλ€ γ
γ
,,,)
κ·Έλμ Deployment
λ Replicaset
μΌλ‘ POD
λ₯Ό λμ°λ κ²μ΄ μλ Statefule
λ‘ POD
λ₯Ό λμ°κ² λμμλλ°, κ·Έλ 곡μ μ€ν λ¦¬μ§ λ³Όλ₯¨μ΄ νμνμμμ΅λλ€. μ¬λ¬ μλ£λ₯Ό μ°Ύλ μ€ AWS
μμ μ 곡λλ μλΉμ€μΈ EBS(Elastic Block Store)
μ EFS(Elastic File System)
μ¬μ΄μ κ³ λ―Όμ νμμκ³ , κ²°κ΅ μ¬λ¬ κ°μ©μμμ μ§μνλ EFS
λ₯Ό μ ννκ² λμμ΅λλ€.
Volum
kubernetes
μλ λ°μ΄ν°λ₯Ό μ μ₯νλ Storage
μ¦, Volume
μ μ 곡ν©λλ€. Container
λ¨μκ° μλλΌ Pod
λ¨μμ΄κΈ° λλ¬Έμ Pod
μ μν΄ μλ μ¬λ¬κ°μ 컨ν
μ΄λκ° κ³΅μ ν΄μ μ¬μ©ν μ μμ΅λλ€.
μ¬λ¬ λ³Όλ₯¨μ μ’
λ₯κ° μμ§λ§ ν΄λΉ ν¬μ€νΈμμλ PersistentVolume
μ λν΄μ λ€λ£°λ €κ³ ν©λλ€.
PersistentVolume
PV
PV(PersistenetVolume)
μ΄λ Kubernetes
μμ κ΄λ¦¬λλ μ μ₯μλ‘ Pod
μλ λ€λ₯Έ μλͺ
μ£ΌκΈ°λ‘ κ΄λ¦¬λ©λλ€. Pod
κ° μ¬μ€ν λλλΌλ, PV
μ λ°μ΄ν°λ μ μ±
μ λ°λΌ μ μ§/μμ κ° λ©λλ€.
PVC
PVC(Persistent Volume Claim)
λ PV
λ₯Ό μΆμννμ¬ κ°λ°μκ° μμ½κ² PVλ₯Ό μ¬μ© κ°λ₯νκ² λ§λ€μ΄μ£Όλ κΈ°λ₯μ
λλ€. κ°λ°μλ μ¬μ©μ νμν Volume
μ ν¬κΈ°, Volume
μ μ μ±
μ μ ννκ³ μμ²λ§ νλ©΄ λ©λλ€. μ΄μμλ κ°λ°μμ μμ²μ λ§κ² PV
λ₯Ό μμ±νκ² λκ³ , PVC
λ ν΄λΉ PV
λ₯Ό κ°μ Έκ°κ² λ©λλ€.
λν, PVC
λ Namespace Object
μ΄κΈ° λλ¬Έμ Namespace
μ depedency
κ° κ±Έλ¦¬κ² λ©λλ€.
AWS EFS
AWS EFS(Amazon Elastic File System)
μ AWSAmazon Web Service
μμ μ 곡νλ 맀λμ§λ NFS
μλ²μ
λλ€. NFS
λ μ¬λ¬ μλ²μμ λμμ κ°μ νμΌμ 곡μ ν λ νΈλ¦¬νκ² μ¬μ©ν μ μμ§λ§, κ΄λ¦¬κ° μ΄λ ΅λ€λ λ¨μ μ΄ μμ΅λλ€. μλ§μ‘΄ EFS
λ₯Ό μ¬μ©νλ©΄ μ’ λ μ½κ² NFS
λ‘ μλ²λ€ κ°μ νμΌμ 곡μ ν μ μμ΅λλ€. Kubernetes
μ κ°μ λΆμ° νκ²½μμλ κ°μ μ©λμ μλ²λ€ κ°μ 곡μ μ€ν 리μ§λ‘ EFS
λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ€μ νκΈ°
Create a AWS EFS
AWS console
μ μ μνμ¬ AWS EFS
μλΉμ€μμ νμΌ μμ€ν
μ νλ μμ±ν©λλ€.
Create a AWS EFS AccessPoint
POD
λ³λ‘ μλ λ°μ΄ν°λ₯Ό λ€ λ€λ₯΄κ² μ€μ ν΄μΌνλ Access Point
λ₯Ό μ€μ ν©λλ€.
μ λ μ΄ 5κ°μ§μ Application
μ΄ μμΌλ©° κ°κ° λ°μ΄ν°λ₯Ό λ°λ‘ μμ§ν΄μΌνκΈ° λλ¬Έμ AccessPoint
λ₯Ό 5κ° μμ±ν΄λμμ΅λλ€.
AccessPoint Mount
κ·Έ ν ν€λ© νμΌ μμ€ν
κ³Ό μ°λν μλ²μ μ μνμ¬ ν΄λλ₯Ό μμ± ν ν Access Poin
t λ₯Ό mount
ν©λλ€.
sudo mount -t efs -o tls,accesspoint=${ACCESSPOINT_ID} ${EFS_ID}:/ /${PATH}
Install AWS-CSI-Driver
λ¨Όμ AWS-CSI-Driver
λ₯Ό μ€μΉν©λλ€.
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm repo update
helm upgrade -i aws-efs-csi-driver aws-efs-csi-driver/aws-efs-csi-driver \
--namespace kube-system \
--set image.repository=602401143452.dkr.ecr.ap-northeast-2.amazonaws.com/eks/aws-efs-csi-driver \
--set controller.serviceAccount.create=false \
--set controller.serviceAccount.name=efs-csi-controller-sa
POD μμ±νκΈ°
${} λΆλΆμ μ§μ μμ± ν΄μΌνλ λΆλΆμ λλ€.
storageClass
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ${STORAGECLASS_NAME}
provisioner: efs.csi.aws.com
μμ νμμΌλ‘ yaml
νμΌμ μμ± ν ν μ μ©ν©λλ€.
result
PersistentVolume
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv-app
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: ${STORAGECLASS_NAME}
csi:
driver: efs.csi.aws.com
volumeHandle: ${ACCESSPOINT_ID}
---
...
metadat
eμ ν΄λΉ PV
μ μ΄λ¦μ μμ±ν΄μ£Όμκ³ , spec.storageClassName
μ StorageClass
μ μ΄λ¦μ μμ±ν©λλ€.
κ·Έ ν spec.csi
μ μ€μ ν΄λμλ AWS EFS Access Point
μ λν λ΄μ©μ μμ±ν©λλ€.
result
PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-pv-app
namespaces: ${APP_NAMESPACE}
spec:
accessModes:
- ReadWriteMany
storageClassName: ${STORAGECLASS_NAME}
resources:
requests:
storage: 5Gi
---
...
PV
Cλ μμ±ν΄λ PV
μ 맀νμ΄ λμ΄μΌν©λλ€. κ·Έλ κΈ° λλ¬Έμ μ΄λ¦μ κ°κ² μ€μ ν΄λμ΄μΌ μλμΌλ‘ 맀νλμ΄ μμ±λ©λλ€.
result
POD
...
spec:
affinity:
nodeAffinity:
...
kubernetes.io/os: linux
volumes:
- name: data-path
persistentVolumeClaim:
claimName: efs-pv-app
---
...
spec.containers.volumeMounts.claimName
μ μμμ μμ±ν΄λμλ pvc
λͺ
μ μ μ΄μ€λλ€.
κ²°κ³Ό
κ·Έ ν mount
νλ λλ ν λ¦¬λ‘ μ΄λνμ¬ λ°μ΄ν°λ€μ΄ μ μμ¬μλ νμΈν©λλ€.