일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 그라파나 대시보드
- 딥레이서 보상함수
- 로드밸런서 컨트롤러
- SAA 합격 후기
- 그라파나 시각화
- Firelens
- blue-green
- 깃허브 액션
- livenessPorbe
- LoadBalancer Controller
- Aurora cluster
- Solution Architecture
- terraform
- Prometheus install
- Kubernetes
- EKS 클러스터
- helm
- 메탈LB
- EFS CSI Driver
- headless service
- grafana on kubernetes
- 딥레이서
- kubernetes 동작 원리
- 쿠버네티스 컴포넌트
- AWS 딥레이서
- 솔데스크
- github action 사용법
- Kubernets on Jenkins
- jenkins
- 쿠버네티스
mingming
EKS Amazon EFS CSI Driver (helm) 본문
Amazon EFS CSI Driver
kubernetes 클러스터 내에서 Amazon EFS를 이용을 위해 제공하는 도구입니다. EFS 파일 시스템을 Pod에 마운트하여 PV를 동적으로 생성해 데이터를 공유하고, 영구보관할 수 있습니다.
EFS를 사용하는 이유
1. 동적 프로비저닝: PVC(Persistent Volume Claim).을 생성하면, PV가 자동으로 생성됩니다.
2. 다중가용영역: EFS CSI Driver를 통해 다중가용영역에서 데이터를 공유하는 PV를 생성할 수 있습니다.
3. 동시접근: 여러 Pod에서 동시에 EFS 파일 시스템을 마운트하여 데이터를 공유할 수 있습니다.
4. Kubernetes Native: Kubernetes의 CSI 스펙을 따르므로 Kubernetes 워크플로우에 통합하기 용이합니다.
IAM Policy 생성
iam 정책을 다운로드 합니다.
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-efs-csi-driver/master/docs/iam-policy-example.json
다운받은 정책으로 iam 정책을 생성해 줍니다
aws iam create-policy \
--policy-name AmazonEKS_EFS_CSI_Driver_Policy \
--policy-document file://iam-policy-example.json
Service Account 생성 및 정책 연결
IAM OIDC Provider 매핑
eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve
Service Account
eksctl create iamserviceaccount \
--cluster=<cluster_name> \
--namespace=kube-system \
--name=aws-efs-controller-sa \
--attach-policy-arn=arn:aws:iam::<Account_ID>:policy/AmazonEKS_EFS_CSI_Driver_Policy \
--override-existing-serviceaccounts \
--approve
EFS CSI Driver 설치
helm 설치하기
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm repo 추가하기
helm repo add efs https://kubernetes-sigs.github.io/aws-efs-csi-driver/
helm repo update
helm search repo efs
EFS CSI Driver 설치하기
helm install aws-efs-csi-driver efs/aws-efs-csi-driver \
-n kube-system \
--set clusterName=<cluster_name> \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-efs-csi-drive \
--set region=ap-northeast-2 \
정적 프로비저닝
정적 프로비저닝은 미리 생성된 EFS 파일 시스템의 AccessPoint를 Kubernetes 클러스터 내에서 수동으로 프로비저닝 하는 방법 입니다. PVC 생성후 PV를 생성해 해당 볼륨을 Pod에 마운트하는 방법입니다.
EFS 를 생성해줍니다. 이떄 주의 사항으로 파일시스템의 탑재 대상의 네트워크를 kubernetes 클러스터와 연결 가능한 vpc , subnet 으로 지정해야 합니다.
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: efs-pv
spec:
capacity:
storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: efs-id
pvc. yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: efs-sc
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: efs-app
spec:
containers:
- name: app
image: centos
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: efs-claim
작성한 매니페스트 파일을 pvc, pv, pod 순서대로 배포합니다.
kubectl apply -f pvc.yaml
kubectl apply -f pv.yaml
kubectl apply -f pod.yaml
해당 파드에 접속해 마운트가 잘 되어있는지 확인합니다.
kubectl exec -it efs-app -- bash -c "cat data/out
동적 프로비저닝
동적 프로비저닝은 Access Point를 미리 생성하는 것이 아닌 Storage Class에 의해서 동적으로 필요에 따라 Access Point가 생성되는 것입니다. 내용은 정적 프로비저닝와 흡사합니다.
StorageClass.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
# PV 생성하는 부분
fileSystemId: fs-09380ead7b417098d
directoryPerms: "700"
gidRangeStart: "1000" # optional
gidRangeEnd: "2000" # optional
basePath: "/dynamic_provisioning" # optional
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: efs-sc
pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: efs-app
spec:
containers:
- name: app
image: centos
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: efs-claim
작성한 매니페스트 파일을 StorageClass, pvc, pod 순서대로 배포합니다.
kubectl apply -f StorageClass.yaml
kubectl apply -f pvc.yaml
kubectl apply -f pod.yaml
pv(persistant volume) 이 정상적으로 생성되어있는지 확인합니다.
kubectl get pv
해당 파드에 접속해 마운트가 잘 되어있는지 확인합니다.
kubectl exec -it efs-app -- bash -c "cat data/out
실습이 마무리 되었으면 생성한 리소스를 모두 지우고 클러스터를 삭제합니다.
kubectl delete -f StorageClass.yaml
kubectl delete -f pvc.yaml
kubectl delete -f pod.yaml
eksctl delete cluster --name <cluster_name> --region ap-northeast-2
'kubernetes' 카테고리의 다른 글
kubernetes init container (0) | 2023.08.29 |
---|---|
kubernetes livenessProve (1) | 2023.08.27 |
EKS AWS Load Balancer Controller (helm) (0) | 2023.08.25 |
Kubernetes 컴포넌트 (0) | 2023.08.14 |
kubernetes 동작원리 (1) | 2023.08.13 |