温馨提示×

centos上k8s的存储解决方案

小樊
44
2025-11-08 05:47:34
栏目: 云计算

CentOS上Kubernetes常见存储解决方案

一、本地存储(Local Storage)

本地存储直接使用节点上的物理介质(如HDD、SSD),适用于对延迟敏感但无需跨节点共享的场景。常见类型包括:

  • EmptyDir:临时存储,Pod创建时生成,删除时自动清理,用于Pod内容器间共享数据(如缓存)。
  • HostPath:将节点上的目录或文件挂载到Pod中,半持久化(Pod删除后数据仍保留在节点,但节点故障会导致数据丢失)。
    配置示例:创建HostPath PV(hostpath-pv.yaml):
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: hostpath-pv
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: /data/k8s-storage
    
    创建PVC(hostpath-pvc.yaml)并绑定到Pod(nginx-pod.yaml)即可使用。

二、网络存储(Network Storage)

网络存储通过网络连接,支持跨节点共享,适用于需要高可用或数据共享的场景,主要包括NFS、GlusterFS、Ceph等。

1. NFS(Network File System)

NFS是轻量级网络文件系统,适合中小规模数据共享(如静态网站文件、日志收集)。
配置步骤

  • 安装NFS服务器(CentOS节点):
    sudo yum install -y nfs-utils
    sudo mkdir -p /mnt/nfs
    sudo chown -R nobody:nogroup /mnt/nfs
    echo "/mnt/nfs *(rw,sync,no_subtree_check)" | sudo tee /etc/exports
    sudo systemctl start nfs-server && sudo systemctl enable nfs-server
    sudo firewall-cmd --permanent --add-service=nfs --add-service=mountd --add-service=rpc-bind
    sudo firewall-cmd --reload
    
  • Kubernetes配置
    • 创建PV(nfs-pv.yaml):
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: nfs-pv
      spec:
        capacity:
          storage: 5Gi
        accessModes:
          - ReadWriteMany
        nfs:
          path: /mnt/nfs
          server: <NFS服务器IP>
      
    • 创建PVC(nfs-pvc.yaml)并绑定到Pod(nginx-pod.yaml):
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: nfs-pvc
      spec:
        accessModes:
          - ReadWriteMany
        resources:
          requests:
            storage: 5Gi
      
      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx-pod
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts:
          - mountPath: "/usr/share/nginx/html"
            name: nfs-volume
        volumes:
        - name: nfs-volume
          persistentVolumeClaim:
            claimName: nfs-pvc
      
    适用于对性能要求不高但需要多Pod共享的场景。

2. GlusterFS

GlusterFS是分布式文件系统,支持水平扩展和高可用(通过副本机制),适合大规模数据存储(如图片、视频等非结构化数据)。
配置步骤

  • 安装GlusterFS(所有存储节点):
    sudo yum install -y centos-release-gluster
    sudo yum install -y glusterfs-server glusterfs-fuse
    sudo systemctl start glusterd && sudo systemctl enable glusterd
    
  • 创建集群(在任意节点执行):
    gluster peer probe <节点2IP>
    gluster peer probe <节点3IP>
    
  • 创建存储池
    gluster volume create gv0 replica 3 <节点1IP>:/data/gluster/gv0 <节点2IP>:/data/gluster/gv0 <节点3IP>:/data/gluster/gv0 force
    gluster volume start gv0
    
  • Kubernetes配置
    • 创建StorageClass(gluster-sc.yaml):
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: gluster-sc
      provisioner: kubernetes.io/glusterfs
      parameters:
        resturl: "http://<gluster-manager-ip>:8080"
        clusterid: "<gluster-cluster-id>"
        restauthenabled: "true"
        restuser: "admin"
        restuserkey: "password"
      reclaimPolicy: Retain
      
    • 动态创建PVC(gluster-pvc.yaml)并绑定到Pod(wordpress-pod.yaml):
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: gluster-pvc
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: gluster-sc
        resources:
          requests:
            storage: 10Gi
      
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: wordpress
      spec:
        replicas: 3
        selector:
          matchLabels:
            app: wordpress
        template:
          metadata:
            labels:
              app: wordpress
          spec:
            containers:
            - name: wordpress
              image: wordpress
              volumeMounts:
              - mountPath: "/var/www/html"
                name: wordpress-persistent-storage
            volumes:
            - name: wordpress-persistent-storage
              persistentVolumeClaim:
                claimName: gluster-pvc
      
    适用于需要高扩展性和高可用的场景。

3. Ceph

Ceph是统一存储系统(支持块、文件、对象存储),适合企业级大规模存储(如数据库、备份)。
配置步骤(使用Rook Operator简化部署):

  • 部署Rook Operator
    helm repo add rook-release https://charts.rook.io/release
    helm install rook-ceph rook-release/rook-ceph --namespace rook-ceph
    
  • 创建Ceph集群ceph-cluster.yaml):
    apiVersion: ceph.rook.io/v1
    kind: CephCluster
    metadata:
      name: rook-ceph
      namespace: rook-ceph
    spec:
      cephVersion:
        image: ceph/ceph:v16.2.6
      dataDirHostPath: /var/lib/rook
      useAllNodes: true
      useAllDevices: false
      devices:
        - name: /dev/sdb
    
  • 创建StorageClassrook-ceph-block-sc.yaml):
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: rook-ceph-block
    provisioner: rook-ceph.rbd.csi.ceph.com
    parameters:
      clusterID: rook-ceph
      pool: replicapool
      imageFormat: "2"
      imageFeatures: layering
      csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
      csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
      csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
      csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
    reclaimPolicy: Delete
    
    适用于企业级高性能存储需求。

三、CSI(Container Storage Interface)存储

CSI是Kubernetes标准存储接口,支持第三方存储插件(如Longhorn、Portworx),实现动态存储管理。
Longhorn示例(分布式块存储):

  • 安装Longhorn
    helm repo add longhorn https://charts.longhorn.io
    helm install longhorn longhorn/longhorn --namespace longhorn-system
    
  • 使用Longhorn StorageClass: Longhorn会自动创建longhorn StorageClass,PVC可直接引用:
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: longhorn-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: longhorn
      resources:
        requests:
          storage: 5Gi
    
    适用于需要分布式、高可用的块存储场景。

四、StorageClass动态置备

StorageClass是Kubernetes的核心抽象,用于动态创建PV(无需手动创建)。通过StorageClass,用户只需声明PVC(指定存储大小、访问模式),Kubernetes会自动调用Provisioner(如NFS、Ceph)创建PV并绑定。
关键参数

  • provisioner:存储插件(如kubernetes.io/glusterfsrook-ceph.rbd.csi.ceph.com)。
  • parameters:存储相关配置(如NFS路径、Ceph池名)。
  • reclaimPolicy:PV回收策略(Retain保留数据、Delete删除数据)。
  • volumeBindingMode:绑定模式(WaitForFirstConsumer延迟绑定,避免PV绑定到不可用节点)。

0