Kubernetes 使用 NFS 存储动态供给

Kubernetes 使用 NFS 存储动态供给

nfs-subdir-external-provisioner 可以通过此插件实现现有的 NFS 存储对集群的 PersistentVolumeClaims 进行动态供给。其官方网站为:https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

安装步骤

  1. 配置好 NFS 或 NAS 存储

  2. 在管理主机安装好 helm 工具

  3. 执行以下命令进行安装

    1. 添加 helm 仓库

      helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
      
    2. 下载安装包

      helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner
      ]# ls
      nfs-subdir-external-provisioner-4.0.14.tgz
      
    3. 解压修改 values.yaml 配置文件

      image:
        repository: registry.cn-hangzhou.aliyuncs.com/liy36/nfs-subdir-external-provisioner
        tag: v4.0.2
        pullPolicy: IfNotPresent
      ...
      nfs:
        server: # NFS 服务器地址或域名
        path: /nfs-storage  # 存储数据的路径,需要提前创建
        mountOptions:
        volumeName: nfs-subdir-external-provisioner-root
        # Reclaim policy for the main nfs volume
        reclaimPolicy: Retain
      ...
      storageClass:
        create: true
      
        # Set a provisioner name. If unset, a name will be generated.
        # provisionerName:
      
        # Set StorageClass as the default StorageClass
        # Ignored if storageClass.create is false
        defaultClass: true # 修改为true
      ...
      # 这里的按需配置即可
      resources: {}  # 资源限制
        # limits:
        #  cpu: 100m
        #  memory: 128Mi
        # requests:
        #  cpu: 100m
        #  memory: 128Mi
      
      nodeSelector: {}  # 节点选择器
      
      tolerations: []   # 污点容忍度
      
      affinity: {}      # 亲和性配置
      
      # Additional labels for any resource created
      labels: {}        # 标签
      
    4. 部署到集群中

      # 进入到解压之后的目录 nfs-subdir-external-provisioner
      helm install nfs-storage ./ -n ops -f values.yaml # -n 部署到 ops 名称空间, -f 指定 values.yaml 文件
      
    5. 查看部署状态

      # 检查 Pod
      kubectl get pods -n ops
      
      # 检查 storageClass # 集群级别资源,不需要指定名称空间。
      kubectl get storageclass # 若 values.yaml 文件中 defaultClass 设置为 true 结果应显示.*(default)。
      
    6. 验证存储类是否可用

      cat << test-claim.yaml > EOF
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: test-claim
        namespace: ops
      spec:
        accessModes:
          - ReadWriteOnce
        volumeMode: Filesystem
        resources:
          requests:
            storage: 1Gi
          limits:
            storage: 1Gi
        storageClassName: nfs-storage # 需要填写第五步查看存储类时返回的 name
      EOF
      
      # 先验证语法
      kubectl apply -f test-claim.yaml --dry-run=client  # 客户端验证
      kubectl apply -f test-claim.yaml --dry-run=server  # 服务端验证
      
      # 部署
      kubectl apply -f test-claim.yaml
      
      # 查看 
      kubectl describe -f test-claim.yaml
      
      # 在 nfs 服务端查看创建的文件夹, 文件夹以 <namespace>-<pvc-name>-pvc-<uuid> 命名
      ls -dl ops-test-claim-pvc-5e256b35-cf93-4987-a0d0-04f80e61a431
      
    7. 后续如有 Pod 需要使用存储时,创建 PVC 挂载即可。

posted @ 2021-12-29 09:56  liy36  阅读(551)  评论(0)    收藏  举报