Kubernetes 安装NFS 存储,配置storageClass

第一部分:NFS 服务器部署

1.1 安装 NFS 服务器

# Ubuntu/Debian
sudo apt update && sudo apt install -y nfs-kernel-server

# CentOS/RHEL
sudo yum install -y nfs-utils

1.2 配置共享目录

sudo mkdir -p /data/nfs
sudo chown nobody:nogroup /data/nfs
sudo chmod 755 /data/nfs  # 生产环境建议使用更严格的权限

1.3 设置 exports 配置

sudo tee /etc/exports <<EOF
/data/nfs *(rw,sync,no_subtree_check,no_root_squash)
EOF

# 更安全的配置示例(限制访问IP):
# /data/nfs 192.168.1.0/24(rw,sync,no_subtree_check,root_squash)

1.4 启动服务

# Ubuntu/Debian
sudo systemctl enable --now nfs-kernel-server

# CentOS/RHEL
sudo systemctl enable --now nfs-server

# 应用配置
sudo exportfs -rav

1.5 防火墙配置

# Ubuntu UFW
sudo ufw allow 111/tcp
sudo ufw allow 2049/tcp
sudo ufw allow 20048/tcp
sudo ufw allow 111/udp
sudo ufw allow 2049/udp
sudo ufw allow 20048/udp

# CentOS/RHEL
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --reload

第二部分:Kubernetes 端配置

2.1 所有节点安装 NFS 客户端

# Ubuntu/Debian
sudo apt install -y nfs-common

# CentOS/RHEL
sudo yum install -y nfs-utils

2.2 安装 NFS Subdir External Provisioner

# 添加 Helm 仓库
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm repo update

# 安装 Provisioner
helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=<NFS_SERVER_IP> \
    --set nfs.path=/data/nfs \
    --set storageClass.name=nfs-sc \
    --set storageClass.defaultClass=true \
    --set storageClass.reclaimPolicy=Retain \
    --set storageClass.archiveOnDelete=false \
    --namespace kube-system \
    --create-namespace

2.3 验证安装

# 检查 StorageClass
kubectl get storageclass

# 检查 Provisioner Pod
kubectl get pods -n kube-system -l app.kubernetes.io/name=nfs-subdir-external-provisioner

# 检查日志(如有问题)
kubectl logs -n kube-system -l app.kubernetes.io/name=nfs-subdir-external-provisioner

第三部分:测试验证

3.1 创建测试 PVC

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-nfs-pvc
spec:
  storageClassName: nfs-sc
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
EOF

3.2 创建测试 Pod

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: test-nfs-pod
spec:
  containers:
  - name: test-container
    image: busybox
    command: ["/bin/sh", "-c", "while true; do date >> /mnt/data/date.log; sleep 5; done"]
    volumeMounts:
    - name: nfs-volume
      mountPath: /mnt/data
  volumes:
  - name: nfs-volume
    persistentVolumeClaim:
      claimName: test-nfs-pvc
EOF

3.3 验证数据持久化

# 检查文件写入
kubectl exec -it test-nfs-pod -- cat /mnt/data/date.log

# 删除 Pod 后重新创建,验证数据持久性
kubectl delete pod test-nfs-pod
kubectl apply -f test-pod.yaml
kubectl exec -it test-nfs-pod -- cat /mnt/data/date.log

第四部分:生产环境建议

4.1 推荐的 StorageClass 参数

helm upgrade nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --reuse-values \
    --set storageClass.mountOptions="{nfsvers=4.1,hard,timeo=600,retrans=2}"

4.2 资源限制设置

--set resources.requests.cpu="100m" \
--set resources.requests.memory="128Mi" \
--set resources.limits.cpu="500m" \
--set resources.limits.memory="512Mi"

4.3 高可用建议

  1. 使用独立的 NFS 服务器集群

  2. 考虑使用 DRBD 或 GlusterFS 作为后端存储

  3. 为重要数据配置定期备份

第五部分:故障排查

5.1 常见问题解决

问题1:PVC 处于 Pending 状态

kubectl describe pvc test-nfs-pvc

检查事件日志中的错误信息

问题2:挂载失败

kubectl describe pod test-nfs-pod

检查 MountVolume 相关错误

问题3:NFS 连接问题

# 从 Kubernetes 节点测试连接
showmount -e <NFS_SERVER_IP>

5.2 日志收集

# Provisioner 日志
kubectl logs -n kube-system -l app.kubernetes.io/name=nfs-subdir-external-provisioner

# Kubelet 日志
journalctl -u kubelet -f

第六部分:卸载清理

# 删除测试资源
kubectl delete pod test-nfs-pod
kubectl delete pvc test-nfs-pvc

# 卸载 Provisioner
helm uninstall nfs-provisioner -n kube-system

# 清理 NFS 服务器数据(如需)
# ssh 到 NFS 服务器执行:
sudo rm -rf /data/nfs/*

本指南已在以下环境验证通过:

  • Kubernetes 1.24+

  • Helm 3.10+

  • Ubuntu 20.04/CentOS 8

  • NFSv4.1/v4.2

第七部分:在线测试环境

Killercoda Interactive Environments

每次使用1个小时,可供大家直接验证安装,提供了2核2G和1核4G服务器,可以免费使用。

还可以端口映射访问,点击access,可访安装的服务端口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值