У моєму попередньому пості були представлені основні концепції зберігання в 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