溫馨提示×

Kubernetes與Ubuntu的存儲集成方法

小樊
36
2025-08-31 21:50:52
欄目: 云計算

Kubernetes與Ubuntu存儲集成方法

1. HostPath存儲(適用于小型集群/測試環境)

HostPath存儲將數據保存在Ubuntu節點的本地文件系統中,配置步驟簡單,但無法跨節點共享,不推薦生產環境使用。

  • 創建HostPath PersistentVolume (PV):定義PV的容量、訪問模式及本地路徑(如/mnt/data)。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ubuntu-pv
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/data"
      persistentVolumeReclaimPolicy: Retain
    
  • 創建PersistentVolumeClaim (PVC):聲明所需的存儲容量(如10Gi)及訪問模式。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ubuntu-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: hostpath
    
  • 在Pod中使用PVC:通過volumeMounts將PVC掛載到容器內的指定路徑(如/usr/share/nginx/html)。

2. NFS存儲(適用于跨節點共享場景)

NFS通過網絡共享存儲,支持多Pod同時讀寫,適合需要共享數據的場景(如WordPress、Jenkins)。

  • 在Ubuntu上部署NFS服務器:安裝nfs-kernel-server,配置共享目錄(如/path/to/shared/folder),并重啟服務。
    sudo apt update
    sudo apt install nfs-kernel-server
    echo "/path/to/shared/folder *(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
    sudo systemctl restart nfs-kernel-server
    
  • 在Kubernetes中創建NFS PV:定義PV的NFS服務器地址及共享路徑。
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: nfs-pv
    spec:
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteMany
      nfs:
        server: <ubuntu-nfs-server-ip>
        path: "/path/to/shared/folder"
    
  • 創建NFS PVC:聲明存儲需求(如1Gi),并通過storageClassName關聯PV。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: nfs-pvc
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
    
  • 在Pod中掛載NFS PVC:將PVC掛載到容器內的目標路徑(如/usr/share/nginx/html)。
    apiVersion: v1
    kind: Pod
    metadata:
      name: nfs-pod
    spec:
      containers:
      - name: nfs-container
        image: nginx
        volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: nfs-volume
      volumes:
      - name: nfs-volume
        persistentVolumeClaim:
          claimName: nfs-pvc
    

3. 動態存儲(以NFS為例,適用于生產環境)

動態存儲通過StorageClass自動創建PV,無需手動預先定義,提升存儲管理效率。

  • 安裝NFS客戶端工具:在Ubuntu節點上安裝nfs-common,用于訪問NFS服務器。
    sudo apt update
    sudo apt install nfs-common
    
  • 創建NFS StorageClass:定義存儲插件的provisioner(如kubernetes.io/nfs)及NFS服務器參數(server、path)。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nfs-storage
    provisioner: kubernetes.io/nfs
    parameters:
      server: <ubuntu-nfs-server-ip>
      path: "/path/to/nfs/share"
    
  • 創建PVC并關聯StorageClass:通過storageClassName指定動態存儲類,Kubernetes會自動創建PV。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: dynamic-nfs-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nfs-storage
      resources:
        requests:
          storage: 2Gi
    
  • 在Pod中使用動態PVC:將PVC掛載到容器內,存儲卷會自動創建并綁定。
    apiVersion: v1
    kind: Pod
    metadata:
      name: dynamic-nfs-pod
    spec:
      containers:
      - name: dynamic-nfs-container
        image: nginx
        volumeMounts:
        - mountPath: "/data"
          name: dynamic-nfs-volume
      volumes:
      - name: dynamic-nfs-volume
        persistentVolumeClaim:
          claimName: dynamic-nfs-pvc
    

4. 分布式存儲(以Rook-Ceph為例,適用于企業級場景)

Rook-Ceph是Kubernetes原生的分布式存儲解決方案,提供高性能、高可用的塊存儲、對象存儲及文件存儲,適合大規模生產環境。

  • 在Ubuntu上部署Rook-Ceph:通過Helm或YAML文件安裝Rook Operator及Ceph集群。
    kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/operator.yaml
    kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/cluster/examples/kubernetes/ceph/cluster.yaml
    
  • 創建StorageClass:使用Rook提供的存儲類(如rook-ceph-block),支持動態創建Ceph RBD卷。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: rook-ceph-block
    provisioner: rook-ceph.rbd.csi.ceph.com
    parameters:
      clusterID: <rook-cluster-id>
      pool: replicapool
      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
    
  • 創建PVC并使用:通過storageClassName關聯Rook存儲類,Pod可直接掛載分布式存儲卷。

5. 對象存儲(以S3為例,適用于大規模非結構化數據)

S3對象存儲適合存儲大規模非結構化數據(如圖片、視頻、日志),Kubernetes可通過CSI驅動集成S3。

  • 安裝S3 CSI驅動:部署S3 CSI驅動到Kubernetes集群,支持動態創建S3存儲卷。
    git clone https://github.com/kubernetes-incubator/external-storage.git
    cd external-storage/s3
    kubectl create -f deploy/kubernetes-s3-csi-driver.yaml
    
  • 創建S3 StorageClass:配置S3存儲桶名稱、區域、訪問密鑰等參數。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: s3-storage
    provisioner: s3.csi.k8s.io
    parameters:
      type: s3
      bucket: <s3-bucket-name>
      prefix: ""
      region: <s3-region>
      secretKey: <s3-access-key>
      accessKey: <s3-secret-key>
    
  • 創建PVC及Deployment:通過PVC關聯S3存儲類,Deployment將S3卷掛載到容器內(如/data)。
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: s3-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: s3-storage
      resources:
        requests:
          storage: 5Gi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: s3-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: s3-app
      template:
        metadata:
          labels:
            app: s3-app
        spec:
          containers:
          - name: s3-container
            image: busybox
            command: ["sleep", "3600"]
            volumeMounts:
            - mountPath: "/data"
              name: s3-storage
          volumes:
          - name: s3-storage
            persistentVolumeClaim:
              claimName: s3-pvc
    

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女