Linuzb' 的博客

记录学习点滴

29 Apr 2024

Kubernetes Nfs Provider

前言

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

本文使用的环境

操作系统 主机IP 数据存储目录
Ubuntu 172.16.0.100/24 /data/nfs

部署

step1. 在宿主机部署 NFS 服务

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

step2. 创建共享目录

创建目录/data/nfs

1
mkdir -p /data/nfs

step3. 宿主机配置 NFS export

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

配置完成后重启 nfs server

1
sudo systemctl restart nfs-kernel-server

step4. 测试 nfs 服务可用

1
/sbin/showmount -e 172.16.0.100

部署 NFS Provider

使用helm 部署

1
2
3
4
5
helm upgrade --install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
  --set nfs.server=172.16.0.100 \
  --set nfs.path=/data/nfs \
  --set storageClass.onDelete=true \
  --set image.repository=registry.cn-hangzhou.aliyuncs.com/linuzb/nfs-subdir-external-provisioner

使用

获取 storageClass 名字

1
kubectl get sc

创建 pvc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 3Gi

其中

pod 挂载 pvc

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
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 就是一个存储卷。

参考:

Next time, we'll talk about "What Tiger King can teach us about x86 Assembly"