1. eks 스토리지


➜ Kubernetes 리소스 중 가장 기본단위인 Pod는 언제든 죽을 수 있는 Stateless 리소스
✅ 따라서 Pod 내부에 저장되어 있는 데이터들은 파드가 죽게되면 모두 소실이 되므로 이러한 데이터 유실 방지를 위해 k8s에서는 PV, PVC 방식으로 Storage 사용
2. Storage 종류
➜ 임시 파일 시스템 (컨테이너와 같은 생명주기)
➜ 임시 볼륨 (emptydir, 파드와 같은 생명주기)
✅ 말 그대로 비어있는 디렉토리를 Volume으로 사용하는데, Pod가 사라지면 데이터도 같이 사라지는 특징
✅ emptyDir이 배포가 되면, 기본적으로는 클러스터의 환경에 따라 노드의 Disk, SSD, Network Storage 등에 데이터가 저장
✅ sizeLimit 을 설정할 수 도 있고, emptyDir.medium: Memory를 통해 노드의 tmpfs(RAM based filesystem)에 할당하여 속도를 빠르게 만들기도 가능
➜ hostpath (파드, 컨테이너와 생명주기 무관) : 노드
✅ Pod의 Volume을 Node에 매핑시키는 방식
✅ Pod가 죽고 다시 살아나면 데이터가 유실되지 않고 남아있게 되는데, 원래 Pod가 존재하던 Node에 생성되어야지 의미가 있음
➜ AWS EBS CSI driver
➜ AWS EFS CSI driver
AWS EFS <--> AWS EFS CSI driver <--> EKS cluster
3. AWS EFS
➜ EFS는 aws에서 제공하는 파일 스토리지
➜ 스토리지 용량을 탄력적으로 구성하는 서버리스 파일 스토리지이며 aws 관리형 서비스이므로 별도의 스토리지 용량과 성능을 프로비저닝하지 않음
➜ EFS는 다수의 가용영역에 걸처 데이터를 저장하고 다수의 자원이 접근 가능한 공유 스토리지
4. AWS EFS CSI driver
➜ AWS EFS CSI driver가 EKS 클러스터와 EFS 파일 시스템에 연결되어 관리
➜ AWS EFS CSI driver를 설치하면 EFS-CSI-controller와 EFS-CSI-NODE가 생성
➜ EFS는 EBS와 다르게 대상 컨테이너가 필요하지 않음
➜ PV와 PVC의 access mode 설정은 아무것이나 (once, many 무관), 다수의 가용영역에 위치해서 파드가 어느 가용영역이든 상관없음
5. EKS cluster
➜ aws eks클러스터에 영구 볼륨 환경인 PV를 구성할 수 있고, 대상 스토리지를 EFS 파일시스템에 연결 가능
6. 실습
➜ 아래 코드 실패 시 스택에서 롤백상태 확인하고 삭제 후 재실행
aws eks describe-addon-versions \
--addon-name aws-efs-csi-driver \
--kubernetes-version 1.27 \
--output text
eksctl create iamserviceaccount \
--name efs-csi-controller-sa \
--namespace kube-system \
--cluster myeks \
--role-name AmazonEKS_EFS_CSI_DriverRole23 \
--role-only \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEFSCSIDriverPolicy \
--approve
➜ IRSA 생성 확인
✅ eksctl get iamserviceaccount --cluster myeks

eksctl create addon --name aws-efs-csi-driver\
--cluster ${CLUSTER_NAME}\
--service-account-role-arn arn:aws:iam::${ACCOUNT_ID}:role/AmazonEKS_EFS_CSI_DriverRole\
--force
➜ 클러스터 확인
✅ eksctl get addon --cluster ${CLUSTER_NAME}

➜ PVC와 POD 생성
✅ nano efs_dp_pvc_pod.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: efs-dp-claim
spec:
accessModes:
- ReadWriteMany ##### 다수가 공유 스토리지로 사용할 수 있다
storageClassName: efs-dp-sc
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: efs-dp-app
spec:
containers:
- name: app
image: centos
command: ["/bin/sh"]
args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 10; done"]
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: efs-dp-claim ### volume영역에서 참조할 pvc는 efs-dp-claim
✅ kubectl apply -f efs_dp_pvc_pod.yaml
✅ nano efs_dp_sc.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-dp-sc
provisioner: efs.csi.aws.com
parameters:
provisioningMode: efs-ap
fileSystemId: fs-0686c59d89f9b95aa
directoryPerms: "700"
✅ kubectl apply -f efs_dp_sc.yaml
✅ kubectl get pv,pvc,sc
➜ ECR
✅ 버지니아 북부에서 인증받기 : aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws

✅ aws ecr-public describe-registries --region us-east-1

➜ 위의 것이 퍼블릭 리포지토리에 반영이 안돼서 강제로 생성
✅ NICKNAME=juhee17
✅ aws ecr-public create-repository --repository-name $NICKNAME/nginx --region us-east-1

✅ 확인

✅ docker pull nginx:alpine
✅ docker tag nginx:alpine public.ecr.aws/n0h2y7b3/juhee17/nginx
✅ docker images
✅ kubectl get pod
➜ 올라간 image, repo 지우기
ws ecr-public batch-delete-image \
--repository-name $NICKNAME/nginx \
--image-ids imageTag=latest \
--region us-east-1
aws ecr-public delete-repository \
--repository-name $NICKNAME/nginx \
--force \
--region us-east-1
** 참고 **
1. https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/efs-csi.html
Amazon EFS를 사용한 탄력적 파일 시스템 저장 - Amazon EKS
AWS Fargate에는 이 단계가 필요하지 않습니다. Fargate에서 실행되는 Pod은(는) Amazon EFS 파일 시스템을 자동으로 탑재합니다.
docs.aws.amazon.com
2. https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/public/public-repositories.html
Amazon ECR public repositories - Amazon ECR Public
Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.
docs.aws.amazon.com
3. https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/public/getting-started-cli.html
Moving an image through its lifecycle in Amazon ECR Public - Amazon ECR Public
Moving an image through its lifecycle in Amazon ECR Public This quick start guide walks you through the steps needed to create a Docker image, publish the image to a public repository, pull the image down from the Amazon ECR Public Gallery, and then clean
docs.aws.amazon.com
'AWS' 카테고리의 다른 글
| [ 9 ] - 모니터링 (0) | 2024.09.30 |
|---|---|
| [ 8 ] - External DNS (0) | 2024.09.27 |
| [ 6 ] - EKS Storage : Snapshot Controller (0) | 2024.09.25 |
| [ 5 ] - pv, pvc 관련 실습 (0) | 2024.09.25 |
| [ 4 ] (0) | 2024.09.13 |