Kubernetes - 实战:网络共享存储 PersistentVolume + NFS、部署 NFS Provisoner、使用 NFS 动态存储卷

使用 NFS 作为网络共享存储

在 Kubernetes 中使用 NFS(Network File System)作为网络共享存储,可以实现跨多个 Pod 的数据共享和持久化存储。以下是使用 NFS 的几个关键步骤:

部署 NFS 服务器
  1. 在某个 Kubernetes 集群外的机器或者集群内的一个专用节点上安装 NFS 服务器软件:

    sudo yum install -y nfs-utils rpcbind
    
  2. 创建一个 NFS 共享目录并在 /etc/exports 文件中配置对外共享:

    echo "/exported/path *(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
    

    然后,重启 NFS 服务以应用新的配置:

    sudo systemctl restart nfs-server.service
    
  3. 在防火墙中开放 NFS 所需的端口(默认为 TCP/UDP 111 和 TCP/UDP 2049)。

部署 NFS Client Provisioner
  1. 动态存储卷:要实现在 Kubernetes 集群中动态创建和销毁 NFS 基于 PersistentVolume (PV) 的 PersistentVolumeClaim (PVC),可以部署一个名为 NFS Client Provisioner 的控制器。

    下面是一个简化的 YAML 示例,用于部署一个使用 NFS 的动态存储卷供给器:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nfs-client-provisioner
      labels:
        app: nfs-client-provisioner
    spec:
      replicas: 1
      strategy:
        type: Recreate
      selector:
        matchLabels:
          app: nfs-client-provisioner
      template:
        metadata:
          labels:
            app: nfs-client-provisioner
        spec:
          serviceAccountName: nfs-client-provisioner
          containers:
          - name: nfs-client-provisioner
            image: quay.io/external_storage/nfs-client-provisioner:v4.0.2
            env:
            - name: PROVISIONER_NAME
              value: my-nfs-storage-class
            - name: NFS_SERVER
              value: nfs-server.example.com
            - name: NFS_PATH
              value: /exported/path
    

    请注意,这里需要设置 NFS_SERVERNFS_PATH 环境变量,指向已配置好的 NFS 服务器和共享目录。

  2. 创建 StorageClass

    创建一个 StorageClass 对象,指定 provisioner 为刚才部署的 NFS Client Provisioner,并设置适当的参数:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: nfs-storage-class
    provisioner: my-nfs-storage-class
    
  3. 使用 PersistentVolumeClaim

    开发者或应用程序可以创建 PersistentVolumeClaim 请求,指定刚刚创建的 StorageClass,Kubernetes 会根据 StorageClass 自动创建并绑定合适的 PersistentVolume。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-nfs-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nfs-storage-class
      resources:
        requests:
          storage: 1Gi
    

    然后在 Pod 中挂载这个 PVC:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-using-nfs
    spec:
      containers:
      - name: my-container
        image: some-image
        volumeMounts:
        - mountPath: /mnt/data
          name: nfs-pvc-volume
      volumes:
      - name: nfs-pvc-volume
        persistentVolumeClaim:
          claimName: my-nfs-pvc
    

这样,每当有 Pod 需要持久化存储时,只需创建一个 PersistentVolumeClaim 并在 Pod 中挂载该 Claim,Kubernetes 会根据 StorageClass 动态创建并挂载 NFS 共享的 PersistentVolume。当 Pod 销毁时,数据并不会丢失,因为它们是持久存储在 NFS 服务器上的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值