侧边栏壁纸
博主头像
kevin's blog! 博主等级

行动起来,活在当下

  • 累计撰写 27 篇文章
  • 累计创建 17 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
k8s

部署nfs-subdir-external-provisioner

kevin
2024-03-30 / 0 评论 / 0 点赞 / 28 阅读 / 0 字

NFS Provisioner 是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷。

本文将介绍使用 nfs-client-provisioner 这个应用,利用 NFS Server 给 Kubernetes 作为持久存储的后端,并且动态提供 PV。前提条件是有已经安装好的 NFS 服务器,并且 NFS 服务器与 Kubernetes 的 Slave 节点都能网络连通。将 nfs-client 驱动做一个 deployment部署到 K8S 集群中,然后对外提供存储服务。
nfs-client-provisioner 是一个 Kubernetes 的简易 NFS 的外部 provisioner,本身不提供 NFS,需要现有的 NFS 服务器提供存储。

持久卷被配置为:namespace−{pvcName}-${pvName}。

nfs-subdir-external-provisioner版本:4.0.18
k8s版本:1.28.0
github地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner
镜像:dyrnq/nfs-subdir-external-provisioner:v4.0.2
dockerhub 地址:https://hub.docker.com/r/dyrnq/nfs-subdir-external-provisioner/tags

部署nfs

nfs 服务端(master1)
# 所有服务端节点安装nfs
yum -y install nfs-utils

systemctl enable nfs-server rpcbind --now

# 创建nfs共享目录、授权
mkdir -p /data/k8s && chmod -R 777 /data/k8s

# 写入exports
cat > /etc/exports << EOF
/data/k8s 192.168.122.0/24(rw,sync,no_root_squash)
EOF
 
systemctl reload nfs-server
 
使用如下命令进行验证
[root@master1 ~]# showmount -e 192.168.122.4
Export list for 192.168.122.4:
/data/k8s 192.168.122.0/24
nfs 客户端(worker)
yum -y install nfs-utils
 
systemctl enable rpcbind --now
 
使用如下命令进行验证
# showmount -e 192.168.1.201
[root@master1 ~]# showmount -e 192.168.122.4
Export list for 192.168.122.4:
/data/k8s 192.168.122.0/24
备份
mkdir -p /data/k8s && chmod -R 777 /data/k8s

# 将/data/k8s同步到192.168.122.5的data目录
rsync -avzP /data/k8s root@192.168.122.5:/data

# 添加定时任务
00 2 * * * rsync -avzP /data/k8s root@192.168.122.5:/data &>/dev/null

动态创建 NFS存储(动态存储)

# 创建nfs-subdir-external-provisioner目录
mkdir ~/nfs-subdir-external-provisioner-4.0.18 && cd ~/nfs-subdir-external-provisioner-4.0.18

# 下载nfs-subdir-external-provisioner的yaml文件
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/raw/nfs-subdir-external-provisioner-4.0.18/deploy/deployment.yaml
 
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/raw/nfs-subdir-external-provisioner-4.0.18/deploy/rbac.yaml
 
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/raw/nfs-subdir-external-provisioner-4.0.18/deploy/class.yaml

#修改nfs-subdir-external-provisioner镜像(默认谷歌k8s.gcr.io)
sed -i 's/registry.k8s.io\/sig-storage/dyrnq/g' deployment.yaml

# 修改nfs服务端地址
sed -i 's/10.3.243.101/192.168.122.4/g' deployment.yaml

# 修改存储地址(/data/k8s)
sed -i 's#\/ifs\/kubernetes#\/data\/k8s#g' deployment.yaml

# 设置StorageClass名为nfs-storage
sed -i 's#nfs-client#nfs-storage#g' class.yaml

# 设置命名空间为nfs-storage
sed -i 's/namespace: default/namespace: nfs-storage/g' rbac.yaml deployment.yaml

# 创建nfs-storage命名空间
kubectl create ns nfs-storage

# 部署nfs-subdir-external-provisioner
kubectl -n nfs-storage apply -f .

# 查看nfs-subdir-external-provisioner的pod
kubectl get pods -n nfs-storage -l app=nfs-client-provisioner

# 将自定义 storage class 设置为集群默认值
kubectl patch storageclass nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

# 查看storageclass
kubectl get storageclass -n nfs-storage
0

评论区