【生产】27、nfs实现nfs-client-provisioner

文章目录

    • @[toc]
    • 一、部署nfs
    • 二、创建StorageClass
      • 1)创建数据目录
      • 2)修改配置
    • 三、使用

一、部署nfs

  • 注意:k8s集群每个节点需要挂载都需要安装nfs-utils
# NFS 服务端
yum -y install nfs*
#创建数据存储目录
mkdir -p /data/nfs 
#给目录授权(chmod 修改文件和文件夹读写执行属性)
chmod -R 777  /data/nfs 

#增加配置文件
echo "/data/nfs s 192.168.6.64/24(rw,sync,no_subtree_check,no_root_squash)" >>/etc/exports

#查看配置文件
cat /etc/exports

#授权(chown 修改文件和文件夹的用户和用户组属性)
chown nfsnobody:nfsnobody /data/nfs 

#启动和增加开启自启动
systemctl start nfs-server.service
systemctl enable nfs-server.service
  • /data/nfs # 要共享的目录
  • 192.168.6.64/24 #指定可以访问共享目录的用户 ip, * 代表所有用户。192.168.6.64/24指定网段。192.168.6.64指定 ip。
  • rw #可读可写。如果想要只读的话,可以指定 ro。
  • sync #文件同步写入到内存与硬盘中。
  • async #文件会先暂存于内存中,而非直接写入硬盘。
  • no_root_squash #登入 nfs 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!但如果你需要在客户端对 nfs 目录进行写入操作。你就得配置 no_root_squash。方便与安全不可兼得。
  • root_squash #在登入 nfs 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份。
  • subtree_check #强制 nfs 检查父目录的权限(默认)
  • no_subtree_check #不检查父目录权限

二、创建StorageClass

  • 官方地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/tree/v4.0.2

【如何创建StorageClass】

把创建StorageClass要做的的事情理清楚:

  • 创建namespace,这里用kube-system。
  • 创建rbac:因为StorageClass有对应的pod要运行,每个pod都有自己的身份即serviceaccount,而这个serviceaccount是和某个角色绑定的,所以要创建:serviceaccount、rule、rolebinding。
  • 创建provisioner,即关联NFS的工作类,负责给PVC提供存储资源,这里用的是nfs-client-provisioner。
  • 创建StorageClass,所有需要PVC通过该StorageClass即可获得存储空间。

1)创建数据目录

#创建数据目录
mkdir -p /opt/nfs-storageclass
cd /opt/nfs-storageclass

2)修改配置

#创建nfs-client-provisioner
cat >nfs-client-provisioner.yaml<
#替换镜像
sed -i 's#gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.1# dyrnq/nfs-subdir-external-provisioner:v4.0.1#g' nfs-client-provisioner.yaml

【重要配置详解】

  • persistentVolumeReclaimPolicy:表示当删除PVC时,PV资源的回收策略。
  • 一共有3种策略,分别为Retain(保留)、Recycle(自动回收)、Delete(自动删除)。
  • 当前只有NFS和hostPath支持Recycle策略,AWSEBS、GCE PD、Azure Disk和Cinder卷支持Delete策略。
#给授权
cat >rbac.yaml<
#此配置文件定义了一个名称为 managed-nfs-storage的存储类,此存储类的提供者为 nfs-client-provisioner
cat >storageclass.yaml<
【配置详解】
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-nfs-storage   # 存储分配器名称
# 存储分配器的名称,对应“nfs-client-provisioner.yaml”文件中env.PROVISIONER_NAME.value
provisioner: nfs
 
# 允许pvc创建后扩容
allowVolumeExpansion: True
 
parameters:
  # 资源删除策略,“true”表示删除PVC时,同时删除绑定的PV,false删除PVC时,对应的PV不会删除
  archiveOnDelete: "false"

#部署查看
[root@k8s-master-01 nfs-storageclass]# kubectl apply  -f .
[root@k8s-master-01 nfs-storageclass]# kubectl get pods -n kube-system |grep nfs-client-provisioner
nfs-client-provisioner-76f56fbb96-xt9jq   1/1     Running   0          23s

#确认是否创建成功
[root@k8s-master nfs-storageclass]# kubectl get storageclasses.storage.k8s.io  -n kube-system 
NAME                  PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage   nfs           Delete          Immediate           false                  6s

三、使用

#在部署服务中添加挂载
  volumeClaimTemplates:
  - metadata:
      name: prometheus-data
    spec:
      storageClassName: managed-nfs-storage 
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: "16Gi"

你可能感兴趣的:(运维,docker,linux,服务器,k8s)