Kubernetes:如何将主节点特定目录挂载到集群所有Pod?
解决方案:将主节点目录挂载到集群所有Pod
因为要让任意节点上的Pod都能访问主节点的目录,不能用hostPath(hostPath只能访问Pod所在节点的本地目录),最适合树莓派集群的方案是用NFS网络共享,步骤如下:
1. 在主节点配置NFS服务器
- 安装NFS服务:
sudo apt update && sudo apt install nfs-kernel-server -y - 编辑NFS共享配置文件:
添加以下内容(替换成你的集群网段,比如192.168.1.0/24):sudo nano /etc/exports/media/usb/test 192.168.x.0/24(rw,sync,no_subtree_check,no_root_squash)rw:授予读写权限no_root_squash:允许客户端的root用户拥有共享目录的root权限(测试环境必备,避免权限冲突)
- 重启NFS服务生效:
sudo systemctl restart nfs-kernel-server
2. 在所有集群节点安装NFS客户端
主节点和两个工作节点都需要安装NFS客户端,才能挂载共享目录:
sudo apt update && sudo apt install nfs-common -y
3. 修改Deployment配置挂载NFS目录
有两种实现方式,可根据需求选择:
方式一:用PV+PVC挂载(规范易复用)
先创建PersistentVolume(PV)文件test-nfs-pv.yaml:
apiVersion: v1 kind: PersistentVolume metadata: name: test-nfs-pv spec: capacity: storage: 10Gi # 根据U盘实际容量调整 accessModes: - ReadWriteMany # 支持多节点同时读写 nfs: server: 192.168.x.x # 替换成主节点树莓派IP path: /media/usb/test
创建PV:
kubectl apply -f test-nfs-pv.yaml
再创建PersistentVolumeClaim(PVC)文件test-nfs-pvc.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi # 和PV容量保持一致
创建PVC:
kubectl apply -f test-nfs-pvc.yaml
最后修改你的Deployment配置,添加卷和挂载规则:
apiVersion: apps/v1 kind: Deployment metadata: name: test-deploy spec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test spec: terminationGracePeriodSeconds: 5 volumes: - name: test-nfs-volume persistentVolumeClaim: claimName: test-nfs-pvc # 关联已创建的PVC containers: - name: test image: rpi.home:5000/test volumeMounts: - name: test-nfs-volume # 和volumes内的名称对应 mountPath: /mnt/test # 挂载到Pod内的目标目录
更新Deployment:
kubectl apply -f test-deploy.yaml
方式二:直接在Deployment里配置NFS卷(简洁快速)
如果不需要复用存储配置,可直接在Deployment中指定NFS信息,省去PV/PVC步骤:
apiVersion: apps/v1 kind: Deployment metadata: name: test-deploy spec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test spec: terminationGracePeriodSeconds: 5 volumes: - name: test-nfs-volume nfs: server: 192.168.x.x # 替换成主节点IP path: /media/usb/test containers: - name: test image: rpi.home:5000/test volumeMounts: - name: test-nfs-volume mountPath: /mnt/test
更新Deployment:
kubectl apply -f test-deploy.yaml
验证与注意事项
- 测试挂载:进入任意Pod,在
/mnt/test目录创建文件,回到主节点的/media/usb/test目录确认文件同步 - 防火墙设置:主节点需开放NFS相关端口(默认2049/tcp、111/tcp),测试环境可临时关闭防火墙:
sudo systemctl stop ufw - 目录权限:主节点
/media/usb/test目录权限需足够,测试环境可设置为chmod 777 /media/usb/test避免权限问题
内容的提问来源于stack exchange,提问作者nagy.zsolt.hun
相关产品推荐
相关产品推荐

