K8s存储
K8s存储
存储架构
K8s存储通过PV和PVC解耦存储供给和使用,StorageClass实现动态存储供给。
┌─────────────────────────────────────────────┐
│ K8s存储架构 │
├─────────────┬─────────────┬─────────────────┤
│ PVC │ PV │ StorageClass │
│ (声明) │ (实际) │ (动态供给) │
├─────────────┼─────────────┼─────────────────┤
│ 用户申请 │ 存储资源 │ 存储配置模板 │
└─────────────┴─────────────┴─────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ CSI Plugin (NFS/EBS/Ceph/Local) │
└─────────────────────────────────────────────┘
PV与PVC
# PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: nfs-server.example.com
path: /exports/data
---
# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
storageClassName: nfs
StorageClass动态供给
# StorageClass配置
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iopsPerGB: "50"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
StatefulSet存储
# StatefulSet使用PVC模板
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: 20Gi
CSI插件
# Ceph CSI配置
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ceph-rbd
provisioner: rbd.csi.ceph.com
parameters:
clusterID: abc-123
pool: kubernetes
csi.storage.k8s.io/provisioner-secret-name: csi-rbd-secret
csi.storage.k8s.io/node-stage-secret-name: csi-rbd-secret
reclaimPolicy: Delete
allowVolumeExpansion: true
存储最佳实践
| 场景 | 推荐方案 |
|---|---|
| 共享文件 | NFS/cephfs |
| 数据库 | Local SSD/RBD |
| 日志存储 | emptyDir |
| 配置文件 | ConfigMap/Secret |