引言
存储是Kubernetes的重要组成部分。本文介绍K8s的存储管理机制。
一、Volume类型
1.1 EmptyDir
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: app image: nginx volumeMounts: - name: cache mountPath: /cache volumes: - name: cache emptyDir: {}
|
1.2 HostPath
1 2 3 4 5
| volumes: - name: data hostPath: path: /data type: Directory
|
1.3 ConfigMap
1 2 3 4
| volumes: - name: config configMap: name: app-config
|
1.4 Secret
1 2 3 4
| volumes: - name: secret secret: secretName: app-secret
|
二、PV和PVC
2.1 PersistentVolume
1 2 3 4 5 6 7 8 9 10 11 12 13
| apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 10Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain nfs: server: 192.168.1.100 path: /data
|
2.2 PersistentVolumeClaim
1 2 3 4 5 6 7 8 9 10
| apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi
|
2.3 在Pod中使用PVC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| apiVersion: v1 kind: Pod metadata: name: app-pod spec: containers: - name: app image: nginx volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: pvc-nfs
|
三、StorageClass
1 2 3 4 5 6 7 8 9 10
| apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/aws-ebs parameters: type: gp2 fsType: ext4 reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer
|
动态供应PVC
1 2 3 4 5 6 7 8 9 10 11
| apiVersion: v1 kind: PersistentVolumeClaim metadata: name: dynamic-pvc spec: accessModes: - ReadWriteOnce storageClassName: fast-ssd resources: requests: storage: 10Gi
|
四、StatefulSet存储
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0 volumeMounts: - name: data mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] storageClassName: fast-ssd resources: requests: storage: 10Gi
|
五、备份与恢复
1 2 3 4 5 6 7 8
| velero backup create my-backup --include-namespaces default
velero restore create --from-backup my-backup
velero schedule create daily-backup --schedule="0 1 * * *"
|
总结
Kubernetes存储核心:
- Volume:临时存储
- PV/PVC:持久化存储
- StorageClass:动态供应
- StatefulSet:有状态应用
参考资料