0부터 시작하는 Kubernetes 공부 - PV/PVC & Aws-ebs & 동적 프로비저닝 복습

Jaehong Lee·2022년 9월 13일
1
post-thumbnail
post-custom-banner

1. PV & PVC 와 리눅스의 Disk

PV ReclaimPolicy

  • Retain : pvc 가 삭제되도, pv 는 유지 ( 재활용 )
  • Delete : 볼륨 & Data 삭제
  • recycle : Data 만 삭제 ( deplicated 된 옵션 )
    Retain 이 기본값이다

PV & PVC 와 Namespace

  • pv 는 특정 ns 에 속하지 않는다. 따라서 다른 ns 에 pv 를 제공할 수 있다
  • pvc 는 ns 에 속한다

PVC 사용

  • PVC 와 PV 가 Bound 됬다고 바로 사용 가능 한 것이 아니다
  • Pod 에서 해당 PVC 를 volume 부분에 넣어야지 Pod 와 PV 가 Mount 되어 해당 PV 를 사용 가능 하다

StorageClassName

  • storageClassName 의 기본값은 null 이다
  • storageClassName 가 없어도 기본적으로 연결은 된다

리눅스의 Disk

  • swap 은 가상 메모리를 제공
  • boot 는 부팅을 위한 커널이 위치
  • / 디렉토리에 속한 디렉토리들은 / 디렉토리의 용량을 공유한다. 이때, 각 디렉토리에 용량이 지정되지 않았다면, 각 디렉토리의 용량은 유동적이다. 이는 다른 디렉토리가 용량을 많이 사용하면, 또 다른 디렉토리는 용량을 적게 사용할 수 있다는 뜻이다
    • 이를 수동 파티셔닝으로 각 디렉토리의 용량을 제한할 수 있다

ResourceQuota

k8s 에서는 볼륨 용량을 제한하는 두 가지 방법이 있다

  1. pvc 의 요청 용량을 제한하는 방법
  2. 스토리지 리소스에 대한 사용량을 제한

ResourceQuota 는 Namespace 에 속한다

스토리지 연결 방식 - Bind & Mount

  • 스토리지 연결 방식은 아래와 같다

    NFS - Bind
    IscsI - Mount

    실제로는 IscsI 방식을 많이 사용한다

2. Aws-ebs

위의 방법은 관리자가 PV 를 생성하고, 이를 PV Pool 에 미리 담아두고, 개발자는 PVC 를 작성하여, 둘을 Bind 하는 형태로 Pod 에 적용하는 방법이다

이 경우 개발자가 요청한 볼륨은 미리 PV 에 담겨있어야 하므로, 반드시 관리자와의 커뮤니케이션이 필요하다. 하지만 갑작스럽게 볼륨이 필요하거나, 잦은 볼륨 요청이 있을 경우에는 적절한 방법이 아니다

이를 해결하는 방법이 동적 프로비저닝 이다

aws-ebs 예제 코드

개발자, 사용자는 다음의 yaml 파일을 만들고, 이를 배포해야 한다

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: 
  name: fastdisk
provisioner: kubernetes.io/aws-ebs 
  type: gp2 
  fsType: ext4 
  zones: ap-northeast-2a  
--- 
apiVersion : v1 
kind: PersistentVolumeClaim 
metadata: 
  name: pvc-fast-sc 
spec: 
  storageClassName: fast 
  accessModes: 
    - ReadWriteOnce 
  resources: 
    requests: 
      storage: 1Gi

aws-ebs 란

  • aws-ebs 는 aws 에서만 사용 가능한 프로비저너 이다. 이는 aws 에서 제공하는 PV 를 생성해주는 도구이다
    • 온 프레미스 환경이나 다른 퍼블릭 클라우드에서 사용이 불가능 하다
    • 프로비저너는 요청에 맞는 저장 공간을 생성해준다. 생성한 저장 공간은 Pool 에 담는다

  • ebs 에서는 ssd 와 hdd 를 제공한다

    • gp2 는 ssd 를 의미한다
    • ext4 는 포멧이다
    • zone 을 지정한다
      즉, block storage 를 사용할 건데, ssd 에 포멧은 ext4 이고, zone 이 ap-northeast-2a 임을 storageclass 에 정의하였다
  • pvc 는 적용할 storageclass 를 명시하고, 파드와 볼륨이 1:1 방식이며, 1 GB 의 볼륨을 요청했다

  • 사용자는 PVC 및 StorageClass 만 작성하면 된다. 이외의 작업은 AWS 에서 해준다

    • 요청한 사용자만 사용 가능하게 해야 하므로, 요청한 사용자의 StorageClass Name 을 생성한 PV 의 storageClassName 을 지정해준다

3. 동적 프로비저닝

Role 와 Binding

  • role 에는 ns 내에 속하는 오브젝트에 대한 role 과 ns 에 속하지 않는 오브젝트들에 대한 clusterRole 이 있다
  • SA 와 Role 을 연결하기 위해서는 RoleBinding 이 필요하다
  • SA 와 ClusterRole 을 연결하기 위해서는 ClusterRoleBinding 이 필요하다

온 프레미스 동적 프로비저닝

  • 프로비저너는 Pod 형태로 배포된다
    • 프로비저너는 스토리지와 연결되어, 스토리지의 물리 자원을 공유해서 사용할 수 있다. 이를 통해 요청에 맞는 저장 공간을 생성해준다

  • 위와 같이 Namespace 별로 동적 프로비저너를 배치할 수 있다
    • 이때, 스토리지에는 각 NS 별 저장 공간이 생기며, 해당 NS 에서 요청한 Pod 별로, 해당 NS 의 저장 공간 안에 각 Pod 별 저장 공간이 생긴다
profile
멋진 엔지니어가 될 때까지
post-custom-banner

0개의 댓글