[클라우드/쿠버네티스] 볼륨

    728x90
    반응형

    출처

    1) Cloud Native DevOps with Kubernetes / 쿠버네티스를 활용한 클라우드 네이티브 데브옵스

     

     

    볼륨

    1) 컨테이너가 데이터를 저장하고 공유하는 방법을 제공

    2) 컨테이너는 기본적으로 임시 저장소를 사용하며, 컨테이너가 재시작되면 데이터가 사라질 수 있음

    3) 볼륨을 사용하면 데이터를 지속적으로 저장할 수 있음

     

     

    볼륨의 종류

    1) emptyDir: 컨테이너가 Pod에 배포될 때 생성되며, Pod가 삭제될 때 삭제됨

    2) hostPath: 호스트 파일 시스템의 특정 디렉토리를 컨테이너와 공유. 일반적으로 프로덕션 환경에서는 사용을 권장하지 않음

    3) PVC: 필요한 스토리지 리소스를 선언, 이를 통해 데이터의 영속성을 보장할 수 있음

    4) awsElasticBlockStore: AWS의 EBS 볼륨을 사용하는 쿠버네티스 볼륨

     

     

    hostPath

    #volume 설정 추가
    [root@]$ vi applyfyml.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: applyfyml
      name: applyfyml
    spec:
      containers:
      - name: applyfyml
        image: nginx
        volumeMounts:
        - mountPath: /po-volume #pod에 위치될 볼륨의 경로
          name: container-volume #아래에 명시한 볼륨명을 똑같이 작성
      nodeSelector:
        disktype: ssd
      volumes: #볼륨명, 로컬 리눅스 서버의 디렉토리 위치 작성
      - name: container-volume
        hostPath:
          path: /home/imfra/volume
          type: Directory

    # 볼륨 마운트 확인
    [root@]$ ls -al /home/imfra/volume
    total 12
    drwxr-xr-x 2 imfra imfra 4096 Aug 23 13:45 .
    drwxr-x--- 5 imfra imfra 4096 Aug 23 13:45 ..
    -rw-r--r-- 1 imfra imfra   14 Aug 23 13:45 hostPathTest


    [root@]$ kubectl exec applyfyml -- ls -al /po-volume
    total 12
    drwxr-xr-x 2 1000 1000 4096 Aug 23 04:45 .
    drwxr-xr-x 1 root root 4096 Aug 23 04:44 ..
    -rw-r--r-- 1 1000 1000   14 Aug 23 04:45 hostPathTest

     

     

    PVC 생성

    쿠버네티스에서 데이터를 지속적으로 관리하고, 스토리지를 동적으로 프로비저닝하는 데 중요함

    PVC를 사용하여 스토리지 요구 사항을 명확하게 정의하고, 클러스터 내에서 스토리지 자원을 효율적으로 관리할 수 있음

    #PVC yaml 파일 작성
    [root@]$ vi pvc-sample.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-sample  #PVC이름
      namespace: default  #PVC가 생성될 네임스페이스
    spec:
      accessModes:
        - ReadWriteOnce  #PVC의 접근 모드를 정의 (ReadWriteOnce, ReadOnlyMany, ReadWriteMany)
      resources:
        requests:
          storage: 1Gi  #요청할 스토리지 크기
      storageClassName: standard  #사용할 StorageClass (선택적)
    #PVC 생성
    [root@]$ kubectl apply -f pvc-sample.yaml
    persistentvolumeclaim/pvc-sample created

    #PVC 상태 조회
    [root@]$ kubectl get pvc
    NAME         STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-sample   Pending                                      standard       45s

    #PVC 상세 정보 및 상태 조회
    [root@]$ kubectl describe pvc pvc-sample
    Name:          pvc-sample
    Namespace:     default
    StorageClass:  standard
    Status:        Pending
    Volume:
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"pvc-sample","namespace":"default"},"spec":{"accessM...
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:
    Access Modes:
    VolumeMode:    Filesystem
    Mounted By:    <none>
    Events:
      Type     Reason              Age                From                         Message
      ----     ------              ----               ----                         -------
      Warning  ProvisioningFailed  13s (x6 over 79s)  persistentvolume-controller  storageclass.storage.k8s.io "standard" not found

     

     

    PVC 마운트

    #volume 설정 추가
    [root@]$ vi applyfyml.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: applyfyml
      name: applyfyml
    spec:
      containers:
      - name: applyfyml
        image: nginx
        volumeMounts:
        - mountPath: /po-volume #pod에 위치될 볼륨의 경로
          name: container-volume #아래에 명시한 볼륨명을 똑같이 작성
      nodeSelector:
        disktype: ssd
      volumes: #볼륨이름,  PVC이름 작성
      - name: container-volume
        persistentVolumeClaim:
          claimName: pvc-sample

     

    728x90
    반응형

    댓글