Демонстрації зберігання в Kubernetes

У моєму попередньому пості були представлені основні концепції зберігання в Kubernetes. Тут я хочу використовувати деякі спрощені демонстрації, щоб показати, як ці концепції насправді використовуються в кластері.

Ми використовуємо один тимчасовий том — тип HostPath, та постійний том — тип local як два приклади:

Тип HostPath

Тип HostPath — це тимчасовий том, навіть якщо він зберігає файл після видалення Pod.

Основна різниця:

  • Без PVC, безпосередньо зв'язується з Pod
  • Ручне створення affinity для Pod
apiVersion: v1  
kind: PersistentVolume  
metadata:  
 name: hostpath-pv  
spec:  
 capacity:  
 storage: 100Mi  
 accessModes:  
 - ReadWriteOnce  
 hostPath:  
 path: /mnt/data # якщо не існує, буде створено  

---  
apiVersion: v1  
kind: Pod  
metadata:  
 name: pod-using-hostpath  
spec:  
 affinity:  
 nodeAffinity: # hostPath повинен мати елемент nodeAffinity  
 requiredDuringSchedulingIgnoredDuringExecution:  
 nodeSelectorTerms:  
 - matchExpressions:  
 - key: kubernetes.io/hostname  
 operator: In  
 values:  
 - node01  
 volumes:  
 - name: hostpath-volume  
 hostPath:  
 path: /mnt/data  
 containers:  
 - name: app  
 image: busybox  
 command: ["sleep", "3600"]  
 volumeMounts:  
 - mountPath: /data  
 name: hostpath-volume

Тип Local

Тип local — це тип Persistent Volume, тому потрібно створити PVC, а також StorageClass.

Основна різниця:

  • PVC
  • SC
  • PV потребує nodeAffinity
  • Pod буде призначено автоматично згідно з вузлом PV
apiVersion: v1  
kind: PersistentVolume  
metadata:  
 name: local-pv  
spec:  
 capacity:  
 storage: 100Mi  
 accessModes:  
 - ReadWriteOnce  
 storageClassName: local-storage # просто шаблон  
 local:  
 path: /mnt/data # цей шлях має існувати  
 nodeAffinity:  
 required:  
 nodeSelectorTerms:  
 - matchExpressions:  
 - key: kubernetes.io/hostname  
 operator: In  
 values:  
 - node01  

---  
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
 name: local-pvc  
spec:  
 storageClassName: local-storage  
 accessModes:  
 - ReadWriteOnce  
 resources:  
 requests:  
 storage: 50Mi  

---  
apiVersion: v1  
kind: Pod  
metadata:  
 name: pod-using-local  
spec:  
 volumes:  
 - name: local-volume  
 persistentVolumeClaim:  
 claimName: local-pvc  
 containers:  
 - name: app  
 image: busybox  
 command: ["sleep", "3600"]  
 volumeMounts:  
 - mountPath: /data  
 name: local-volume

Повторне використання PV

Якщо ми видалили PV, але хочемо продовжувати використовувати вміст, який зберігався, потрібно вказати поле claimRef і переконатися, що поле persistentVolumeReclaimPolicy встановлено в Retain (для local type офіційна документація НЕ РЕКОМЕНДУЄ встановлювати persistentVolumeReclaimPolicy: Delete). Для додаткових відомостей щодо повторного використання PV, будь ласка, ознайомтесь з офіційною документацією: тут.

Перекладено з: Kubernets Storage Demos

Leave a Reply

Your email address will not be published. Required fields are marked *