k8s-nfs实现创建sc的两种方式
法一:基于 官方 NFS CSI 插件
法二:基于 nfs-subdir-external-provisioner
法一 官方 NFS CSI 插件
大致步骤
# 安装 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.yamlapiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: nfs-csi
provisioner: nfs.csi.k8s.io
parameters:server: 192.168.10.100 #你的nfsshare: /data/nfs
reclaimPolicy: Retain
volumeBindingMode: Immediate# 创建
kubectl apply -f nfs-sc.yaml# 使用pod验证
cat nginx.yamlapiVersion: apps/v1
kind: StatefulSet
metadata:name: web
spec:serviceName: "nginx"replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginxports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 5GistorageClassName: 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
步骤:
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.yamlcontainers:- name: nfs-client-provisioner
# image: registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2image: registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0volumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: k8s-sigs.io/nfs-subdir-external-provisioner #可以修改value,修改后,需要将class.yaml文件中的provisioner也进行修改- name: NFS_SERVERvalue: 192.168.10.x- name: NFS_PATHvalue: /nfsvolumes:- name: nfs-client-rootnfs:server: 192.168.10.xpath: /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