法一:基于 官方 NFS CSI 插件
法二:基于 nfs-subdir-external-provisioner
法一 官方 NFS CSI 插件
大致步骤
bash
# 安装 NFS
sudo apt update
sudo apt install -y nfs-kernel-server
# 创建共享目录
sudo mkdir -p /data/nfs
sudo chmod 777 /data/nfs
# 配置 NFS 导出
echo "/data/nfs *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
# 应用配置
sudo exportfs -rav
# 启动并开机自启
sudo systemctl enable --now nfs-kernel-server
# 验证
showmount -e localhost
# 安装nfs csi驱动,可以通过提前将镜像下载到本地
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/v4.6.0/rbac-csi-nfs.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/v4.6.0/csi-nfs-driverinfo.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/v4.6.0/csi-nfs-controller.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/v4.6.0/csi-nfs-node.yaml
#创建sc
cat nfs-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.10.100 #你的nfs
share: /data/nfs
reclaimPolicy: Retain
volumeBindingMode: Immediate
# 创建
kubectl apply -f nfs-sc.yaml
# 使用pod验证
cat nginx.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
storageClassName: nfs-csi
# 启动pod
kubectl apply -f nginx.yaml
# 验证
kubectl get pv,pvc,sc,pod
参考:https://blog.csdn.net/weixin_49343462/article/details/121831380
法二 nfs-subdir-external-provisioner
步骤:
bash
git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git
cd nfs-subdir-external-provisioner/deploy
root@ubuntu-new:/tmp/nfs-subdir-external-provisioner-master/deploy# ls
class.yaml deployment.yaml kustomization.yaml objects rbac.yaml test-claim.yaml test-pod.yaml
# 然后编辑deploy.yaml
containers:
- name: nfs-client-provisioner
# image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2
image: registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: k8s-sigs.io/nfs-subdir-external-provisioner #可以修改value,修改后,需要将class.yaml文件中的provisioner也进行修改
- name: NFS_SERVER
value: 192.168.10.x
- name: NFS_PATH
value: /nfs
volumes:
- name: nfs-client-root
nfs:
server: 192.168.10.x
path: /nfs
# 创建资源
kubectl apply -f rbac.yaml
kubectl apply -f deployment.yaml
kubectl apply -f class.yaml
kubectl apply -f pvc-test.yaml # 测试文件
# 通过kubectl get pvc 查看是否成功
参考:https://www.bilibili.com/video/BV1MT411x7GH/?spm_id_from=333.788.videopod.episodes\&p=67