k8s 使用外部存储简介

k8s 使用外部存储介绍

在 Kubernetes (k8s) 中使用外部存储可以提高数据的持久性可扩展性高可用性。以下是常见的外部存储解决方案及其使用方式:


1. 常见的 Kubernetes 外部存储

存储类型 示例 适用场景
NFS (Network File System) NFS 服务器 共享存储,适用于多个 Pod 访问同一数据
Ceph CephFS, RBD, Object Storage 分布式存储,适用于高可用集群
GlusterFS GlusterFS 分布式文件存储,适用于大规模存储
iSCSI SAN 设备 低延迟、高性能存储
AWS EBS Amazon Elastic Block Store AWS 云上的块存储
Google Persistent Disk (GCE PD) GCP 云存储 Google Cloud 持久磁盘
Azure Disk Microsoft Azure Managed Disks Azure 云存储
CSI (Container Storage Interface) 适用于多种存储后端 推荐方式,支持动态存储

2. 使用 NFS 作为外部存储

适用场景: 适用于共享存储,如多个 Pod 需要访问相同数据的情况。

步骤 1:在服务器上搭建 NFS

  1. 安装 NFS 服务(在存储服务器上)

    yum install -y nfs-utils
    systemctl enable --now nfs-server
    
  2. 创建共享目录

    mkdir -p /data/nfs
    chmod -R 777 /data/nfs
    echo "/data/nfs *(rw,sync,no_root_squash)" >> /etc/exports
    
  3. 重启 NFS 服务

    exportfs -r
    systemctl restart nfs-server
    
  4. 验证 NFS 是否可用

    showmount -e <NFS服务器IP>
    

步骤 2:在 Kubernetes 中使用 NFS 存储

  1. 创建 PersistentVolume (PV)

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      nfs:
        path: /data/nfs
        server: <NFS服务器IP>
    
  2. 创建 PersistentVolumeClaim (PVC)

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nfs-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      volumeName: nfs-pv
    
  3. 在 Pod 中使用 NFS

    apiVersion: v1
    kind: Pod
    metadata:
      name: nfs-test
    spec:
      containers:
      - name: test-container
        image: busybox
        command: [ "sleep", "3600" ]
        volumeMounts:
        - mountPath: "/mnt/data"
          name: nfs-storage
      volumes:
      - name: nfs-storage
        persistentVolumeClaim:
          claimName: nfs-pvc
    
  4. 验证

    kubectl apply -f nfs-pv.yaml
    kubectl apply -f nfs-pvc.yaml
    kubectl apply -f nfs-pod.yaml
    

3. 使用 Ceph 作为外部存储

适用场景: 适用于高可用存储,支持CephFS、块存储(RBD)和对象存储

步骤 1:安装 Ceph

可以使用 rook-ceph 作为 Ceph Operator:

kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/common.yaml
kubectl create -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml

步骤 2:创建 Ceph PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: ceph-pv
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  cephfs:
    monitors:
      - <Ceph-Monitor-IP>:6789
    user: admin
    secretRef:
      name: ceph-secret
    readOnly: false

4. 使用 AWS EBS 作为外部存储

适用场景: Kubernetes 部署在 AWS 云 时,推荐使用 EBS 作为块存储

步骤 1:创建 StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aws-ebs
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2

步骤 2:创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: aws-ebs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: aws-ebs

5. 使用 CSI (Container Storage Interface)

CSI 是 Kubernetes 推荐的存储方式,支持动态存储

步骤 1:安装 CSI

不同云服务提供不同的 CSI:

  • AWS: aws-ebs-csi-driver
  • GCP: gce-pd-csi-driver
  • Azure: azure-disk-csi-driver

安装 AWS CSI:

kubectl apply -k "github.com/kubernetes-sigs/aws-ebs-csi-driver/deploy/kubernetes/overlays/stable/ecr"

步骤 2:创建 StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-ebs
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  fsType: ext4

步骤 3:创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-ebs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: csi-ebs

6. 选择合适的存储

需求 推荐存储
共享存储(多个 Pod 访问同一目录) NFS、CephFS
高可用、分布式存储 Ceph、GlusterFS
高性能、低延迟 iSCSI、AWS EBS
云存储(AWS/GCP/Azure) EBS、GCE PD、Azure Disk
Kubernetes 官方推荐 CSI

7. 总结

  1. NFS 适合共享存储,适用于多个 Pod 访问相同数据。
  2. Ceph 适用于分布式存储,支持文件、块、对象存储。
  3. AWS/GCP/Azure 适用于云环境,推荐使用 CSI 进行动态存储管理。
  4. CSI 是 Kubernetes 官方推荐方式,支持多种存储后端。
posted @ 2025-03-10 20:32  蒲公英PGY  阅读(124)  评论(0)    收藏  举报