K8S持久化存储之NFS

一、NFS文件存储服务器部署
1)安装服务端:

yum install -y nfs-utils rpcbind

2)修改配置文件(编辑写入要共享的目录):

vim /etc/exports

// 共享的目录 白名单网段(权限)
/data_nfs 10.50.0.0/24(rw,no_root_squash,sync,all_squash,anonuid=666,anongid=666)

// 载入配置

exportfs -rv

// 令格式如下:
// exportfs [-aruv]
// -a :全部mount或者unmount /etc/exports中的内容
// -r :重新mount /etc/exports中分享出来的目录
// -u :umount目录
// -v :在export的时候,将详细的信息输出到屏幕上。

// 如果后续需要新加挂载点目录,直接在/etc/exports文件增加即可。无需重载配置和重启服务。

nfs配置参数:
rw 共享目录的权限是 可读 可写
sync 同时将数据写入内存和磁盘,增强数据的安全性,保证数据不丢失
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩
all_squash 无论使用什么用户上传或者访问,一律压缩成 nfs的匿名用户
anonuid 指定一个匿名用户,必须是系统存在的uid
anongid 指定一个匿名用户组,必须是系统存在的gid
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
ro 只读权限
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
3)nfs自带用户:nfsnobody 65534,创建自定义用户:

groupadd nfsserver -g 666

useradd nfsserver -u 666 -g 666 -s /sbin/nologin -M

// 创建共享的目录并设置属主

mkdir -p /data_nfs

chown -R nfsserver.nfsserver /data_nfs

4)启动服务:

systemctl enable rpcbind nfs-server

systemctl start rpcbind nfs-server

systemctl status rpcbind nfs-server

5)客户端部署和挂载:

// 安装nfs包

yum -y install nfs-utils

// 显示共享目录(这个ip是服务端的ip)

showmount -e 10.50.0.40

// 挂载

mount -t nfs 10.50.0.40:/data_nfs /mnt

// 开机挂载

vim /etc/fstab

10.50.0.40:/data_nfs /mnt nfs defaults 0 0
// 增加挂载的安全性,通过mount -o指定挂载参数,禁止使用suid,exec,增加安全性能

mount -t nfs -o nosuid,noexec,nodev 10.50.0.40:/data_nfs /mnt

二、K8S对接:

// 需要在k8s集群中部署nfs-client-provisioner

helm install –name nfs-client-provisioner –namespace storage –set nfs.server=10.50.0.40 –set nfs.path=/data_nfs –debug .

# helm list

NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
nfs-client-provisioner 1 Wed Oct 28 11:55:24 2020 DEPLOYED nfs-client-provisioner-1.2.8 3.1.0 storage

kubectl patch storageclass managed-nfs-storage -p ‘{“parameters”: {“archiveOnDelete”: “true”}}’

The StorageClass “managed-nfs-storage” is invalid: parameters: Forbidden: updates to parameters are forbidden.

// 如果在修改sc时报如上错误,使用以下方式修改

kubectl replace -f managed-nfs-storage.yaml –force

kubectl -n storage get sc managed-nfs-storage -o yaml

allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
creationTimestamp: “2020-10-28T03:55:24Z”
labels:
app: nfs-client-provisioner
chart: nfs-client-provisioner-1.2.8
heritage: Tiller
release: nfs-client-provisioner
name: nfs-client
resourceVersion: “1352213462”
selfLink: /apis/storage.k8s.io/v1/storageclasses/nfs-client
uid: e6c5b9aa-25c3-41cd-8843-472d8ef02c52
parameters:
archiveOnDelete: “true”
provisioner: cluster.local/nfs-client-provisioner
reclaimPolicy: Delete
volumeBindingMode: Immediate

// 创建pvc即可

cat pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: “yes”
pv.kubernetes.io/bound-by-controller: “yes”
volume.beta.kubernetes.io/storage-provisioner: cluster.local/nfs-client-provisioner
finalizers:

  • kubernetes.io/pvc-protection
    name: pvc-test
    spec:
    accessModes:
  • ReadWriteMany
    resources:
    requests:
    storage: 50G
    storageClassName: nfs-client

// 或者pod直接通过nfs引用

cat demo-nfs.yaml

apiVersion: v1
kind: Pod
metadata:
name: nfs-demo
spec:
containers:

  • image: nginx name: nfs-demo volumeMounts:
    • mountPath: /data_WebRoot
      name: data-nfs-webroot
      volumes:
  • name: data-nfs-webroot
    nfs:
    server: 10.50.0.40
    path: “/data_nfs”

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/235157.html

(0)
联系我们
联系我们
分享本页
返回顶部