관리 메뉴

피터의 개발이야기

[CKA] Udemy 실습문제풀이 - Storage 본문

Kubernetes/CKA

[CKA] Udemy 실습문제풀이 - Storage

기록하는 백앤드개발자 2024. 1. 27. 11:29
반응형

 

[kubernetes] 쿠버네티스 관련 글 목차

 

ㅁ 들어가며

ㅇ Udemy강의를 시청하고 Practice Test를 중심으로 Storage에 대해 공부한 내용을 정리하였다.

 

ㅁ 관련 글

 [AWS] Amazon EBS 볼륨 증설 및 kubenetes PV, PVC 볼륨 수정 과정 정리

   ㄴ AWS EBS- PV -PVC와 연계하여 AWS EBS를 증설하고 PVC의 storage capacity를 수정하는 과정을 정리함.

   ㄴ [AWS] Amazon EBS gp2 vs gp3 비교 볼륨을 증설하는 이유를 알기 위해 정리한 글 이후 아래의 글에서 gp3로 변경함

 

[EBS] EKS 생성, MongoDB 구성, gp2에서 gp3 EBS 볼륨으로 마이그레이션

   ㄴ gp2는 용량에 따라 IOPS를 증설할 수 있다. 하지만 최대 IOPS가 필요한 상황이라 gp3로 변경작업 수행함.

 

[Kubernetes] 쿠버네티스 볼륨 개념 1편 (emptryDir, hostPath)

[Kubernetes] 쿠버네티스 볼륨 개념 2편 (pv, pvc,  AWS EBS, AWS EFS )

   ㄴ 볼륨에 대한 개념을 공부하고 정리한 내용이다.

 

ㅁ Practice Test Persistent Volume Claims

 hostpath

 ㄴ hostPath 볼륨은 호스트 노드의 파일시스템에 있는 파일이나 디렉터리를 파드에 마운트 한다.

 ㄴ 멀티 컨테이너 - Sidecar 패턴으로 메인 컨테이너의 log를 정리하는 Sidecar 컨테이너에 사용하는 방법이다.

 ㄴ 같은 파드의 컨테이너는 hostpath를 마치 nas처럼 공유할 수 있다. 

 

apiVersion: v1
kind: Pod
metadata:
  name: webapp
spec:
  containers:
  - name: event-simulator
    image: kodekloud/event-simulator
    env:
    - name: LOG_HANDLERS
      value: file
    volumeMounts:
    - mountPath: /log
      name: log-volume

  volumes:
  - name: log-volume
    hostPath:
      # directory location on host
      path: /var/log/webapp
      # this field is optional
      type: Directory

 

 Persistent Volumes

 ㄴ Create a PersistentVolume

# pv.yaml 작성
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-log
spec:
  persistentVolumeReclaimPolicy: Retain
  accessModes:
    - ReadWriteMany
  capacity:
    storage: 100Mi
  hostPath:
    path: /pv/log

 

Create a PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: claim-log-1
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Mi

 

ㅇ pvc update

# accessModes update
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: claim-log-1
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 50Mi

 

Create a Pod

apiVersion: v1
kind: Pod
metadata:
  name: webapp
spec:
  containers:
  - name: event-simulator
    image: kodekloud/event-simulator
    env:
    - name: LOG_HANDLERS
      value: file
    volumeMounts:
    - mountPath: /log
      name: log-volume

  volumes:
  - name: log-volume
    persistentVolumeClaim:
      claimName: claim-log-1

 

ㅇ storage의 용량 설정은 pv > pvc이다.

 ㄴ 필요한 용량이 10GB라고 해서 32GB USB를 쪼갤 수 없다. 

 

 

Retain 반환 정책은 삭제를 하지 않고 남아 있지만 다른 곳에서 사용할 수 없다. 나중에 수동으로 반환처리를 해야함.

 

pvc를 삭제를 하였도 pod에서 사용하고 있으면 터미네이트 상태, pod를 삭제하면 pvc도 삭제된다.

 

 

ㅁ Storage Class

ㅇ dynamic volume provisioning? 

  ㄴ Local

  ㄴ 동적 상태

    -  "provisioner": "rancher.io/local-path"
    -  "provisioner": "kubernetes.io/portworx-volume"

  ㄴ 비동적 상태

    -  "provisioner": "kubernetes.io/no-provisioner" 

 

ㅇ 스토리지 클래스의 WaitForFirstConsumer
local-storage라는 스토리지 클래스는 WaitForFirstConsumer로 설정된 VolumeBindingMode를 사용합니다. 이렇게 하면 PertantVolumeClaim을 사용하는 포드가 생성될 때까지 PertantVolume의 바인딩 및 프로비저닝이 지연됩니다.

 

ㅇ pod 생성

---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    volumeMounts:
      - name: local-persistent-storage
        mountPath: /var/www/html
  volumes:
    - name: local-persistent-storage
      persistentVolumeClaim:
        claimName: local-pvc

 

 

StorageClass 생성

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: delayed-volume-sc
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
반응형
Comments