Kubernetes 存储指南
📌 内容目录
Kubernetes 存储类型概览
| 类型 |
描述 |
典型使用场景 |
| EmptyDir |
临时存储,与 Pod 生命周期绑定 |
缓存、临时文件、中间计算结果 |
| HostPath |
节点本地目录 |
本地开发、调试、快速实验 |
| NFS |
网络共享文件系统 |
多 Pod 共享文件、轻量级生产环境 |
| Ceph RBD / CephFS |
分布式块存储与文件存储 |
企业级数据库、高可用、可扩展 |
| Local PV |
节点本地磁盘 |
高性能数据库、低延迟应用 |
| CSI 驱动(云厂商) |
云原生存储接口 |
云上生产环境、动态创建磁盘/NAS |
| Longhorn |
轻量级分布式存储 |
K3s、边缘集群、无专用存储设备 |
| OpenEBS |
容器原生本地存储 |
数据库、边缘节点、高性能本地磁盘 |
1. EmptyDir
apiVersion: v1
kind: Pod
metadata:
name: emptydir-demo
spec:
containers:
- name: app
image: nginx
volumeMounts:
- mountPath: /cache
name: cache-volume
volumes:
- name: cache-volume
emptyDir: {}
2. HostPath
apiVersion: v1
kind: Pod
metadata:
name: hostpath-demo
spec:
containers:
- name: app
image: busybox
command: ["sh", "-c", "sleep 3600"]
volumeMounts:
- mountPath: /data
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /tmp/data
type: DirectoryOrCreate
3. NFS
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
--set nfs.server=192.168.1.10 --set nfs.path=/export/data
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Pod
metadata:
name: nfs-demo
spec:
volumes:
- name: nfs-storage
persistentVolumeClaim:
claimName: nfs-pvc
containers:
- name: app
image: busybox
command: ["sh", "-c", "sleep 3600"]
volumeMounts:
- name: nfs-storage
mountPath: /mnt
4. Ceph RBD / CephFS
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/devel/deploy/rbd/kubernetes/csi-rbdplugin.yaml
kubectl apply -f https://raw.githubusercontent.com/ceph/ceph-csi/devel/deploy/cephfs/kubernetes/csi-cephfsplugin.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-block
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
pool: replicapool
imageFeatures: layering
reclaimPolicy: Delete
allowVolumeExpansion: true
5. Local Persistent Volume
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
6. CSI 驱动(云厂商)
kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-1.36"
7. Longhorn
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace
8. OpenEBS
helm repo add openebs https://openebs.github.io/charts
helm install openebs openebs/openebs