볼륨(Volume)

 

Volumes

On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem is the loss of files when a container crashes. The kubelet restarts the container but with a clean state. A second

kubernetes.io

  • 컨테이너는 Pod에 바인딩 되는 볼륨을 마운트하고 마치 로컬 파일시스템에 있는 것처럼 스토리지에 접근한다.
  임시 볼륨 로컬불륨 네트워크볼륨 네트워크볼륨
(클라우드 종속적)
목적 컨테이너와 데이터공유 목적 Node기반의 데이터공유 목적
클러스터 외부에 있는 자원과의 데이터공유 목적  
종류 emptyDir

hostpath
local
iSCSI
NFS
cephFS
glusterFS
...
gcePersistentDisk
awsEBS
azureFile
...

 

 

 

emptyDir

  • 하나의 포드안에서 두개이상의 컨테이너가 데이터를 공유
  • Pod와 생명주기를 같이한다.

단일 pod안에서 데이터공유

kubernetes.io/docs/concepts/storage/volumes/#emptydir

 

Volumes

On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem is the loss of files when a container crashes. The kubelet restarts the container but with a clean state. A second

kubernetes.io

 

 

emptyDir 테스트

apiVersion: v1
kind: Pod
metadata:
  name: web-empty
spec:
  containers:
  - image: nginx
    name: web
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  - image: redis
    name: redis
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/
  volumes:
  - name: html
    emptyDir: {}
  • container web(/usr/share/nginx/html) container redis(/usr/share/)가 mount 된다.

 

 

hostPath

단일 노드에서 pod간 데이터공유

 

 

hostPath 테스트

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: web
  name: web
spec:
  volumes:
  - name: html
    hostPath:
      path: /webdata
  containers:
  - image: nginx
    name: web
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  • Node의 /webdata 패스와 pod의 /usr/share/nginx/html mount

 

 

 

NFS

apiVersion: v1
kind: Pod
metadata:
  name: web-nfs
spec:
  containers:
  - image: nginx
    name: web
    ports:
    - containerPort: 80
    volumeMounts:
    - name: html
      mountPath: /usr/share/nginx/html
  volumes:
  - name: html
    nfs:
      name: 10.2.3.22
      path: /shared/nfs

 

 

 

GCE 영구 디스크를 동일한 리전에 생성

  • # gcloud compute disks create --size=10GiB --zone=asia-northeast1-c mongodb

 

 

 

PV(PersistentVolume) & PVC(PersistentVolumeClaim)

  • 스토리지 관리자가 storage Pool(PV)를 등록하고 애플리케이선 운영자가 PVC를 통해서 스토리지를 요청하는 구조
  • 애플리케이션 운영자가 애플리케이션의 구동에 필요한 스토리지 스펙을 PVC를 가지고 K8s에 요청
  • 애플리케이션 운영자와 스토리지 관리자의 역할을 분리시킬 수 있는 이점이 있다.

 

PV(PersistentVolume)

 

퍼시스턴트 볼륨

이 페이지에서는 쿠버네티스의 퍼시스턴트 볼륨 에 대해 설명한다. 볼륨에 대해 익숙해지는 것을 추천한다. 소개 스토리지 관리는 컴퓨트 인스턴스 관리와는 별개의 문제다. 퍼시스턴트볼륨 서

kubernetes.io

 

 

PV & PVC yaml

---
# PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  nfs:
    path: /tmp
    server: 172.17.0.2
    
---
# PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 8Gi
  storageClassName: slow
  selector:
    matchLabels:
      release: "stable"
    matchExpressions:
      - {key: environment, operator: In, values: [dev]}
      
      
---
# POD
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

 

PVC(PersistentVolumeClaim)

  • 퍼시스턴트볼륨클레임 (PVC)은 사용자의 스토리지에 대한 요청이다

 

 

 

GCE PV & PVC 테스트

apiVersion: v1 
kind: Pod 
metadata: 
  name: mongodb 
spec: 
  containers: 
  - image: mongo 
    name: mongodb 
    volumeMounts: 
    - mountPath: /data/db 
      name: mongodb 
  volumes: 
  - name: mongodb 
    persistentVolumeClaim: 
      claimName: mongo-pvc 
--- 
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
  name: mongo-pvc 
spec: 
  accessModes: 
    - ReadWriteOnce 
  resources: 
    requests: 
      storage: 10Gi 
  storageClassName: "" 
--- 
apiVersion: v1 
kind: PersistentVolume 
metadata: 
  name: mongo-pv 
spec: 
  capacity: 
    storage: 10Gi 
  volumeMode: Filesystem 
  accessModes: 
    - ReadWriteOnce 
    - ReadOnlyMany 
  persistentVolumeReclaimPolicy: Retain 
  gcePersistentDisk: 
    pdName: mongodb 
    fsType: ext4 
---

 

Storage classes

kubernetes.io/docs/concepts/storage/storage-classes/#gce-pd

 

Storage Classes

This document describes the concept of a StorageClass in Kubernetes. Familiarity with volumes and persistent volumes is suggested. Introduction A StorageClass provides a way for administrators to describe the "classes" of storage they offer. Different clas

kubernetes.io

  • PV를 직접 만드는 대신 사용자가 원하는 PV 유형을 선택하도록 오브젝트 정의
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd
  fstype: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mongo-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: storage
---
apiVersion: v1
kind: Pod
metadata:
  name: mongodb
spec:
  containers:
  - image: mongo
    name: mongodb
    volumeMounts:
    - mountPath: /data/db
      name: mongodb
  volumes:
  - name: mongodb
    persistentVolumeClaim:
      claimName: mongo-pvc
---

  • # kubectl get sc

  • # kubectl get pv
  • #kubectl edit pv pvc-4a87cccb-70b6-46c2-a6be-4497c3c3ffd0
    • 정책변경가능

'클라우드 > K8s' 카테고리의 다른 글

K8s 오토스케일링  (0) 2022.04.03
K8s DNS  (0) 2022.04.03
K8s 인증과 권한관리  (0) 2022.04.03
Pod 스케줄링  (0) 2022.04.03
K8s Secret  (0) 2022.03.31

+ Recent posts