Nfs Provider

前言

本文介绍如何使用 nfs 网络存储为 kubernetes 提供动态的PV创建。

本文使用的环境

操作系统 主机IP 数据存储目录
Ubuntu-Server 22.04 172.16.0.119/24 /data/nfs

部署

step1. 在宿主机部署 NFS 服务

sudo apt update
# 服务端
sudo apt install nfs-kernel-server

step2. 创建共享目录

创建目录/data/nfs

mkdir -p /data/nfs

step3. 宿主机配置 NFS export

echo -e "/data/nfs\t172.16.0.119/24(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports

配置完成后重启 nfs server

sudo systemctl restart nfs-kernel-server

step4. 测试 nfs 服务可用

/sbin/showmount -e 172.16.0.119

部署 NFS Provider

使用helm 部署

helm upgrade --install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --set nfs.server=172.16.0.119 \
  --set nfs.path=/data/nfs \
  --set storageClass.onDelete=true \
  --set image.repository=registry.cn-hangzhou.aliyuncs.com/linuzb/nfs-subdir-external-provisioner
  • nfs.server 使用部署 nfs 的宿主机ip,本文是 172.16.0.119
  • nfs.path 使用部署 nfs 的宿主机共享目录,本文是 /data/nfs

使用

获取 storageClass 名字

kubectl get sc

创建 pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 3Gi

其中

  • storageClassName 使用的就是 nfs 的 storageclass 名字 nfs-client

pod 挂载 pvc

apiVersion: v1
kind: Pod
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: task-pv-claim
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage

对 Pod 而言,PersistentVolumeClaim 就是一个存储卷。

参考: