본문 바로가기
클라우드/AWS

[AWS] EKS Storage - 3주차

by Cloud_Park 2023. 5. 13.

2023.05.13 - [클라우드/AWS] - [AWS] EKS Storage 실습 환경 구축

위 링크에서 이번주 실습 환경 구축 진행 부탁드립니다.

 

 

EKS의 Storage 설명 

Kubernetes의 컨테이너의 기본 스토리지는  파트가 정지되면 안의 데이터도 사라져 컨테이너의 생명주기와 동일한 statelss입니다.

docker와 같이 host와 연결하여  데이터를 남길 수 있어  AWS storage 서비스에 container의 데이터를 저장하면  container가 삭제되도 안에 있던 데이터를 살려둘 수 있습니다.

 

https://aws.amazon.com/ko/blogs/tech/persistent-storage-for-kubernetes/

 

kubernetes에 데이터 보존을 위해 만들어진 객체가 PV PVC이다. PV는 네임스페이스에 속하지 않는 클러스터 룰이다.

PV,PVC를 이용하여 컨테이너의 데이터에 Statful이 가능해졌다. ex) NFS,AWS EBS, Ceph

https://aws.amazon.com/ko/blogs/tech/persistent-storage-for-kubernetes/

 

사실 위 방법도 생성의 번거로움이 있다.  정적 프로비저닝 (PV생성 > PV를 PVC에 맵핑하여 생성 > PVC를 POD에 할당하여 생성)

PV, PVC를 별도 생성해야하는 번거로움이 있어 동적 프로비저닝을 사용하여 자동으로 위 방법을 간단하게 하였다.

https://aws.amazon.com/ko/blogs/tech/persistent-storage-for-kubernetes/

 

PV의 사용 정책도 별도 있는데 해당 부분도 익혀두면 좋다 . > yaml 에서 설정가능

Reclaim Policy 의 정책 -> 볼륨 사용이 끝났을 때 동작

 Retain (보존)

 Delete(삭제) 

 

 

 

Kubernetes  스토리지의 종류

기본 emptyDir,hostPath,PV/PVC

emptyDir은 pod 생성 시  만들어지고 없어지는 단순 Stateless 방식의 스토리지이다.

hostPath는 node의 디렉토리를 pod에 mount 시켜주는데  node의 경로에 실제 존재해야된다.

PV,PVC는  hostPath의 경로를 오브젝트화하여 미리 생성해두고 pod에 연결 시  오브젝트와 연결됩니다.

https://kubetm.github.io/k8s/03-beginner-basic-resource/volume/

 

이외 다양한 볼륨 서비스

Ceph (온프램 솔루션),NFS ,AWS EBS

PV를 생성 시 다른 볼륨서비스를 사용하여 생성한다. 기본들은 Node의  저장공간을 확용했지만 다양한 서비스들은  Volum Service를 활용하여  Pod가 다른 노드에 생성되더라도 문제없이 생성될 것이다.

스토리지상태

 

CSI (Container Storage Interface)소개

 CSI를 사용하면 여러 스토리지 서비스를 연결하여 사용할 수 있다.

Kubernetes source code 내부에 존재하는 AWS EBS provisioner는 당연히 Kubernetes release lifecycle을 따라서 배포되므로, provisioner 신규 기능을 사용하기 위해서는 Kubernetes version을 업그레이드해야 하는 제약 사항이 있습니다. 따라서, Kubernetes 개발자는 Kubernetes 내부에 내장된 provisioner (in-tree)를 모두 삭제하고, 별도의 controller Pod을 통해 동적 provisioning을 사용할 수 있도록 만들었습니다. 이것이 바로 CSI (Container Storage Interface) driver 입니다. 

-> 스토리지를 생성하고 EKS에 연결하고 Pod에 연결하는 일련의 과정이 복잡하지만  CSI가  사용자가 간편하게 사용하라고 만들어 놓은 것이라고 생각하면 됩니다.

 

 

* EKS의 노드에 EBS볼륨을 붙혀서 사용한다고하면 Instace가 할당할 수 있는 볼륨 수 를 확인해야한다.

# 확인
kubectl describe node | grep Allocatable: -A1
Allocatable:
  attachable-volumes-aws-ebs:  25

KUBE_MAX_PD_VOLS  환경 변수의 값을 설정한 후, 스케줄러를 재시작하여 이러한 한도를 변경 가능 

> 원클릭 배포 시 해당 변수 확인 가능합니다.

 

AWS 스토리지서비스를 EKS에서 사용하기때문에 번거로움이 없고 속도도 빨라 유용한 것 같다. 만일 csi 가 없다면 하나하나 설정하여 추가해줬어야 했는데, 유용하게 잘 만든 것 같다.

 

 

실습확인하기

2023.05.13 - [클라우드/AWS] - [AWS] AWS Kube-pos-view 설치하기

2023.05.13 - [클라우드/AWS] - [AWS] EKS 기본 컨테이너 환경의 임시파일 사용하기

2023.05.13 - [클라우드/AWS] - [AWS] EKS Storage hostPath 실습

2023.05.13 - [클라우드/AWS] - [AWS] EKS Strage EBS Controller

2023.05.13 - [클라우드/AWS] - [AWS] EKS EBS Snapshots

2023.05.13 - [클라우드/AWS] - [AWS] EKS EFS Controller

2023.05.13 - [클라우드/AWS] - [AWS] EKS PV for instance store & 노드그룹 추가하기