Kubernetes-볼륨

Kubernetes에서 볼륨은 팟 (Pod)의 컨테이너에 액세스 할 수있는 디렉토리로 생각할 수 있습니다. Kubernetes에는 다양한 유형의 볼륨이 있으며 유형은 볼륨 생성 방법과 해당 콘텐츠를 정의합니다.

볼륨의 개념은 Docker에 있었지만 유일한 문제는 볼륨이 특정 포드로 매우 제한된다는 것입니다. 포드의 수명이 끝나 자마자 볼륨도 손실되었습니다.

반면에 Kubernetes를 통해 생성되는 볼륨은 컨테이너로 제한되지 않습니다. Kubernetes의 포드 내에 배포 된 일부 또는 모든 컨테이너를 지원합니다. Kubernetes 볼륨의 주요 이점은 포드가 동시에 여러 스토리지를 사용할 수있는 다양한 종류의 스토리지를 지원한다는 것입니다.

Kubernetes 볼륨 유형

다음은 인기있는 Kubernetes 볼륨 목록입니다.

  • emptyDir− Pod가 Node에 처음 할당 될 때 생성되는 볼륨 유형입니다. 포드가 해당 노드에서 실행되는 한 활성 상태로 유지됩니다. 볼륨은 처음에 비어 있으며 팟 (Pod)의 컨테이너는 emptyDir 볼륨의 파일을 읽고 쓸 수 있습니다. 노드에서 포드가 제거되면 emptyDir의 데이터가 지워집니다.

  • hostPath −이 유형의 볼륨은 호스트 노드의 파일 시스템에있는 파일 또는 디렉토리를 포드에 마운트합니다.

  • gcePersistentDisk−이 유형의 볼륨은 Google Compute Engine (GCE) 영구 디스크를 포드에 마운트합니다. 데이터gcePersistentDisk 포드가 노드에서 제거 될 때 그대로 유지됩니다.

  • awsElasticBlockStore−이 유형의 볼륨은 Amazon Web Services (AWS) Elastic Block Store를 포드에 마운트합니다. 처럼gcePersistentDisk, 데이터 awsElasticBlockStore 포드가 노드에서 제거 될 때 그대로 유지됩니다.

  • nfs − 안 nfs볼륨을 사용하면 기존 NFS (네트워크 파일 시스템)를 포드에 마운트 할 수 있습니다. 의 데이터nfsPod가 노드에서 제거 될 때 볼륨은 지워지지 않습니다. 볼륨이 마운트 해제되었습니다.

  • iscsi − 안 iscsi 볼륨을 사용하면 기존 iSCSI (SCSI over IP) 볼륨을 포드에 마운트 할 수 있습니다.

  • flocker− 오픈 소스 클러스터 컨테이너 데이터 볼륨 관리자입니다. 데이터 볼륨을 관리하는 데 사용됩니다. ㅏflocker볼륨을 사용하면 Flocker 데이터 세트를 포드에 마운트 할 수 있습니다. 데이터 세트가 Flocker에없는 경우 먼저 Flocker API를 사용하여 생성해야합니다.

  • glusterfs− Glusterfs는 오픈 소스 네트워크 파일 시스템입니다. glusterfs 볼륨을 사용하면 glusterfs 볼륨을 포드에 마운트 할 수 있습니다.

  • rbd− RBD는 Rados Block Device를 의미합니다. 안rbd볼륨을 사용하면 Rados 블록 장치 볼륨을 포드에 마운트 할 수 있습니다. 포드가 노드에서 제거 된 후에도 데이터는 보존됩니다.

  • cephfs − A cephfs볼륨을 사용하면 기존 CephFS 볼륨을 포드에 마운트 할 수 있습니다. Pod가 노드에서 제거 된 후에도 데이터는 그대로 유지됩니다.

  • gitRepo − A gitRepo 볼륨은 빈 디렉토리를 마운트하고 git 팟 (Pod)이 사용할 저장소에 저장하십시오.

  • secret − A secret 볼륨은 암호와 같은 민감한 정보를 포드로 전달하는 데 사용됩니다.

  • persistentVolumeClaim − A persistentVolumeClaim볼륨은 PersistentVolume을 포드에 마운트하는 데 사용됩니다. PersistentVolume은 사용자가 특정 클라우드 환경의 세부 정보를 몰라도 내구성있는 스토리지 (예 : GCE PersistentDisk 또는 iSCSI 볼륨)를 "클레임"할 수있는 방법입니다.

  • downwardAPI − A downwardAPI볼륨은 애플리케이션에서 하향 API 데이터를 사용할 수 있도록하는 데 사용됩니다. 디렉토리를 마운트하고 요청 된 데이터를 일반 텍스트 파일에 씁니다.

  • azureDiskVolume − 안 AzureDiskVolume Microsoft Azure 데이터 디스크를 포드에 마운트하는 데 사용됩니다.

영구 볼륨 및 영구 볼륨 신청

Persistent Volume (PV)− 관리자가 프로비저닝 한 네트워크 스토리지입니다. PV를 사용하는 개별 포드와 독립적 인 클러스터의 리소스입니다.

Persistent Volume Claim (PVC)− Kubernetes에서 포드에 대해 요청한 스토리지는 PVC로 알려져 있습니다. 사용자는 기본 프로비저닝을 알 필요가 없습니다. 클레임은 포드가 생성 된 것과 동일한 네임 스페이스에서 생성되어야합니다.

영구 볼륨 생성

kind: PersistentVolume ---------> 1
apiVersion: v1
metadata:
   name: pv0001 ------------------> 2
   labels:
      type: local
spec:
   capacity: -----------------------> 3
      storage: 10Gi ----------------------> 4
   accessModes:
      - ReadWriteOnce -------------------> 5
      hostPath:
         path: "/tmp/data01" --------------------------> 6

위의 코드에서 정의했습니다.

  • kind: PersistentVolume → 사용중인 yaml 파일이 영구 볼륨을 생성하는 것임을 kubernetes에 알려주는 PersistentVolume으로 종류를 정의했습니다.

  • name: pv0001 → 생성중인 PersistentVolume의 이름입니다.

  • capacity: →이 사양은 생성하려는 PV의 용량을 정의합니다.

  • storage: 10Gi → 이것은 정의 된 경로에서 10Gi 공간을 요구하려고한다는 기본 인프라를 알려줍니다.

  • ReadWriteOnce → 이것은 우리가 만들고있는 볼륨의 액세스 권한을 알려줍니다.

  • path: "/tmp/data01" →이 정의는 기본 인프라에서이 경로 아래에 볼륨을 생성하려고한다는 것을 시스템에 알려줍니다.

PV 생성

$ kubectl create –f local-01.yaml
persistentvolume "pv0001" created

PV 확인

$ kubectl get pv
NAME        CAPACITY      ACCESSMODES       STATUS       CLAIM      REASON     AGE
pv0001        10Gi            RWO         Available                            14s

PV 설명

$ kubectl describe pv pv0001

영구 볼륨 신청 생성

kind: PersistentVolumeClaim --------------> 1
apiVersion: v1
metadata:
   name: myclaim-1 --------------------> 2
spec:
   accessModes:
      - ReadWriteOnce ------------------------> 3
   resources:
      requests:
         storage: 3Gi ---------------------> 4

위의 코드에서 정의했습니다.

  • kind: PersistentVolumeClaim → 지정된 공간을 요청하려는 기본 인프라에 지시합니다.

  • name: myclaim-1 → 생성하려는 클레임의 이름.

  • ReadWriteOnce → 생성하려는 클레임의 모드를 지정합니다.

  • storage: 3Gi → 이것은 우리가 주장하려는 공간의 양에 대해 kubernetes에게 알려줄 것입니다.

PVC 만들기

$ kubectl create –f myclaim-1
persistentvolumeclaim "myclaim-1" created

PVC에 대한 세부 정보 얻기

$ kubectl get pvc
NAME        STATUS   VOLUME   CAPACITY   ACCESSMODES   AGE
myclaim-1   Bound    pv0001     10Gi         RWO       7s

PVC 설명

$ kubectl describe pv pv0001

POD와 함께 PV 및 PVC 사용

kind: Pod
apiVersion: v1
metadata:
   name: mypod
   labels:
      name: frontendhttp
spec:
   containers:
   - name: myfrontend
      image: nginx
      ports:
      - containerPort: 80
         name: "http-server"
      volumeMounts: ----------------------------> 1
      - mountPath: "/usr/share/tomcat/html"
         name: mypd
   volumes: -----------------------> 2
      - name: mypd
         persistentVolumeClaim: ------------------------->3
         claimName: myclaim-1

위의 코드에서 정의했습니다.

  • volumeMounts: → 이것은 마운팅이 수행되는 컨테이너의 경로입니다.

  • Volume: →이 정의는 우리가 요구할 볼륨 정의를 정의합니다.

  • persistentVolumeClaim: →이 아래에서 정의 된 pod에서 사용할 볼륨 이름을 정의합니다.