Kubernetes存储进阶:CSI驱动与动态供给完全指南


categories: - Kubernetes存储 tags: - Kubernetes - - CSI - 存储快照 - 动态供给 - 存储迁移


StorageClass配置

NFS StorageClass


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  server: nfs-server.example.com
  path: /exported/path
  onDelete: delete

CephFS StorageClass


apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: cephfs
provisioner: cephfs.csi.ceph.com
parameters:
  clusterID: 
  fsName: cephfs
  csi.storage.k8s.io/provisioner-secret-name: csi-cephfs-secret
  csi.storage.k8s.io/provisioner-secret-namespace: cephfs

CSI驱动安装


# Ceph CSI
git clone https://github.com/ceph/ceph-csi.git
cd ceph-csi/deploy/rbd/kubernetes
kubectl apply -k .

# AWS EBS CSI
helm repo add aws-ebs-csi-driver https://kubernetes-sigs.github.io/aws-ebs-csi-driver
helm install aws-ebs-csi-driver aws-ebs-csi-driver/aws-ebs-csi-driver \
  --namespace kube-system \
  --set controller.replicaCount=3

动态供给

创建PVC自动供给


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fast-storage-pvc
  namespace: production
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  storageClassName: fast-storage

默认StorageClass


# 设置默认StorageClass
kubectl patch storageclass fast-storage \
  -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

存储快照与恢复

VolumeSnapshotClass


apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: snapshot-class
driver: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  onDelete: delete

创建快照


apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: pvc-snapshot
  namespace: production
spec:
  volumeSnapshotClassName: snapshot-class
  source:
    persistentVolumeClaimName: fast-storage-pvc

从快照恢复PVC


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: restored-pvc
  namespace: production
spec:
  accessModes:
    - ReadWriteOnce
  dataSource:
    kind: VolumeSnapshot
    name: pvc-snapshot
  resources:
    requests:
      storage: 50Gi

存储迁移


# 迁移数据
kubectl exec -it migration-pod -- rsync -avz /source/ /destination/

# 克隆PVC
kubectl apply -f - << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cloned-pvc
  namespace: production
spec:
  dataSource:
    kind: PersistentVolumeClaim
    name: original-pvc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
EOF

多存储类管理


# 根据需求选择存储类
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: tiered-storage-pvc
  namespace: production
  labels:
    tier: database
spec:
  accessModes:
    - ReadWriteOnce
  dataSource:
    kind: StorageClass
    name: fast-storage
  resources:
    requests:
      storage: 100Gi

发表回复

后才能评论