k8s 进阶实战笔记 | NFS 动态存储类的部署与使用

NFS 动态存储类的部署与使用

演示环境说明

演示环境信息:单机K3s 1.28.2

操作系统:CentOS Linux release 7.8.2003 (Core)

虚拟机基础信息:4C4G

NFS服务器:同1台服务器

NFS subdir external provisioner

  • k8s 不包含内部 NFS 驱动,所以需要安装外部驱动为 NFS 创建 StorageClass
  • NFS subdir external provisioner 是一种自动置备程序,它使用现有且已配置的 NFS 服务器来支持通过持久卷声明动态置备 k8s 持久卷

准备 NFS 服务器

服务端

## 安装服务端程序
yum -y install nfs-utils  rpcbind
## 配置NFS
mkdir /opt/data
## (vi /etc/exports)
/opt/data *(rw,no_root_squash,no_all_squash,anonuid=0,anongid=0,sync)
##启动服务
systemctl enable rpcbind --now
systemctl enable nfs --now

客户端

##安装客户端程序
rpm -qa |grep nfs-utils
yum -y install nfs-utils

在这里插入图片描述

手动部署 NFS Subdir External Provisioner

克隆项目

git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner.git

在这里插入图片描述

修改 YAML 文件

### 进入deploy目录
cd nfs-subdir-external-provisioner/deploy

### 生效 rbac
kubectl apply -f rbac.yaml

###修改部署文件deployment.yaml
#修改可拉取的镜像地址
sed -i 's#registry.k8s.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2#k8s.m.daocloud.io/sig-storage/nfs-subdir-external-provisioner:v4.0.2#g' deployment.yaml

#修改NFS服务器地址和共享路径(NFS_SERVER和NFS_PATH)
10.0.16.4
/opt/data

### 部署驱动程序
kubectl apply -f deployment.yaml

### 查看
kubectl get pod 

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

部署 StorageClass

部署文件位置:nfs-subdir-external-provisioner/deploy/class.yaml

### class.yaml 示例文件
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  pathPattern: "${.PVC.namespace}/${.PVC.annotations.nfs.io/storage-path}"
  onDelete: delete
  
### 部署
kubectl apply -f class.yaml

在这里插入图片描述

验证使用

验证文件

在这里插入图片描述

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
spec:
  storageClassName: nfs-client	### 指明动态存储类名称(上面的class.yaml的metadata字段)
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
      
      
### 应用
kubectl apply -f test-claim.yaml

在这里插入图片描述

kind: Pod
apiVersion: v1
metadata:
  name: test-pod
spec:
  containers:
  - name: test-pod
    image: busybox:stable
    command:
      - "/bin/sh"
    args:
      - "-c"
      - "touch /mnt/SUCCESS && exit 0 || exit 1"
    volumeMounts:			### 声明需要挂载出去的容器路径
      - name: nfs-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: nfs-pvc
      persistentVolumeClaim:
        claimName: test-claim
        
### 生效
kubectl apply -f test-pod.yaml

查看效果

is ok

在这里插入图片描述

更多信息

其他部署方式参考:GitHub - kubernetes-sigs/nfs-subdir-external-provisioner: Dynamic sub-dir volume provisioner on a remote NFS server.

k8s设置默认存储类:改变默认 StorageClass | Kubernetes

  • 27
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装一个 NFS 服务器,并且在 Kubernetes 集群中安装一个 NFS 客户端。 然后,你可以按照以下步骤创建一个动态 NFS 存储的 PV: 1. 创建一个 NFS 存储: ``` apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage provisioner: my-nfs-provisioner ``` 其中,`provisioner` 是你的 NFS 存储服务提供的动态卷插件的名称。这个名称需要在你的 Kubernetes 集群中注册过。 2. 创建一个 PVC: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany storageClassName: nfs-storage resources: requests: storage: 1Gi ``` 在这个 PVC 中,`accessModes` 指定了多个 Pod 可以同时读写这个 PV,`storageClassName` 指定了使用存储,`resources.requests.storage` 指定了这个 PV 的大小。 3. 创建一个 Pod 并挂载这个 PVC: ``` apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: nginx volumeMounts: - name: nfs-volume mountPath: /mnt/nfs volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc ``` 在这个 Pod 中,`volumeMounts` 指定了挂载的路径,`volumes` 中通过 `persistentVolumeClaim.claimName` 指定了要使用的 PVC。 完成以上步骤后,Kubernetes 会自动创建一个 NFS 存储的 PV,并且将其绑定到这个 PVC 上。当这个 PVC 被挂载到一个 Pod 中时,Kubernetes 会自动将这个 PV 挂载到这个 Pod 中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值