- 博客/
在 Kubernetes 中部署 nfs storageClass

作者
Johny
熟练的 云原生搬砖师
Table of Contents
环境说明:#
- helm version: v3.4.2
- kubernetes version: v1.19.6
- nfs server: 192.168.8.66
- sub-net: 192.168.8.0/24
nfs 服务端配置#
yum install rpcbind nfs-utils -y # 安装 nfs server
创建用户 & 数据目录#
groupadd -g 2233 nfs-user
useradd nfs-user -M -s /sbin/nologin -u 2233 -g nfs-user
id nfs-user
mkdir -p /data/nfs.sharedir
chown -R nfs-user /data/nfs.sharedir
服务端 配置文件修改#
cat /etc/exports # 配置文件 如下:
/data/nfs.sharedir 192.168.8.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=2233,anongid=2233)
参数说明:
- read-write,可读写;
- ro:read-only,只读;
- sync:文件同时写入硬盘和内存;
- async:文件暂存于内存,而不是直接写入内存;
- no_root_squash:NFS客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录来说,也拥有 root 权限。显然开启这项是不安全的。
- root_squash:NFS客户端连接服务端时如果使用的是 root 的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用 nobody 或 nfsnobody 身份;
- all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
- anonuid:匿名用户的 UID 值,可以在此处自行设定。
- anongid:匿名用户的 GID 值
执行配置 生效#
exportfs -r
启动服务 & 设置服务开机自启#
service rpcbind start
service nfs start
systemctl enable nfs \
&& systemctl enable rpcbind
nfs 客户端配置#
⚠️ 注意如果在
k8s
中使用 nfs时,需要在每一个节点中多配置安装rpcbind
,因为 nfs 依赖于使用 rpc 协议进行通讯。yum install rpcbind rpcbind nfs-utils -y service rpcbind start systemctl enable rpcbind
客户端测试挂载#
showmount -e [nfs-server] # 查看服务端 可挂载目录
示例
showmount -e 192.168.8.66
mount -t nfs 192.168.8.66:/data/nfs.sharedir /mnt
如网络不太稳定时,可以尝试切换为
tcp
协议mount -t nfs 192.168.8.66:/data/nfs.sharedir /mnt -o proto=tcp -o nolock
部署 nfs storageClass#
helm 添加仓库#
helm repo add stable https://charts.helm.sh/stable
helm repo update
创建 helm 部署文件#
cat > prod-values.yaml << EOF
storageClass:
name: nfs-retain
reclaimPolicy: Retain
nfs:
server: 192.168.8.66
path: '/data/nfs.sharedir'
EOF
reclaimPolicy
即PersistentVolumes(pv)
的回收策略,包括 “Retain”、“Recycle” 和 “Delete”。 对于动态配置的 PersistentVolumes 来说,默认回收策略为 “Delete”。 这表示当用户删除对应的 PersistentVolumeClaim 时,动态配置的 volume 将被自动删除。 如果 volume 包含重要数据时,这种自动行为可能是不合适的。 那种情况下,更适合使用 “Retain” 策略。 使用 “Retain” 时,如果用户删除 PersistentVolumeClaim,对应的 PersistentVolume 不会被删除。 相反,它将变为 Released 状态,表示所有的数据可以被手动恢复。
部署#
部署至
kube-system
命名空间, storageClass 为集群
概念,集群内任意命名空间多可以使用。
helm upgrade --install nfs-storage-class -f ./prod-values.yaml -n kube-system stable/nfs-client-provisioner
部署后的测试#
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sc-nginx-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: nfs-retain
resources:
requests:
storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sc-nginx
namespace: default
labels:
name: sc-nginx
spec:
replicas: 2
selector:
matchLabels:
name: sc-nginx
template:
metadata:
labels:
name: sc-nginx
spec:
containers:
- name: sc-nginx
image: nginx:1.16.0
volumeMounts:
- mountPath: /usr/share/nginx/html
name: nginx-data
ports:
- containerPort: 80
volumes:
- name: nginx-data
persistentVolumeClaim:
claimName: sc-nginx-pvc
EOF
nfs server 端口 echo
数据 至目录下的 index.html
文件内
echo 'hello' >> /data/nfs.sharedir/default-sc-nginx-pvc-pvc-bd14929c-ed1f-4ede-baa7-a39de13ee169/index.html
相关文章
初探 Traefik ingress gateway
·1594 字·4 分钟·
k8s
devops
traefik
Kind 部署本地k8s集群的使用记录
·326 字·1 分钟·
k8s
docker
devops
centos7
kind
使用 Confluentinc 在 Kubernetes 集群中部署 Kafka 集群
·1133 字·3 分钟·
k8s
kafka
zookeeper
helm
Rancher 单机部署,进行升级后,导致docker无法正常启动
·586 字·2 分钟·
k8s
fix
docker
rancher
Coredns 出现间断性无法正常解析域名问题
·1536 字·4 分钟·
k8s
coredns
dns
使用 Docker 部署 Nexus3 私服的详细记录总结
·2798 字·6 分钟·
docker
devops
nexus3
install