在Ubuntu上配置Kubernetes存储的常见方案(以NFS为例)
在Ubuntu环境中为Kubernetes配置存储,核心是通过**PersistentVolume(PV)和PersistentVolumeClaim(PVC)**实现持久化存储,或借助NFS(网络文件系统)实现跨节点共享存储。以下是详细步骤:
确保Kubernetes集群正常运行
在Ubuntu节点上完成Kubernetes集群部署(Master节点初始化、Worker节点加入),并验证集群状态:
kubectl get nodes
确保所有节点状态为Ready。
安装NFS客户端工具(所有节点)
Kubernetes节点需要通过NFS客户端访问共享存储,安装命令:
sudo apt update
sudo apt install -y nfs-common
若集群中有专用节点作为NFS服务器,执行以下步骤;若使用外部NFS服务器,跳过此步直接配置Kubernetes资源。
在Ubuntu节点上安装NFS服务:
sudo apt update
sudo apt install -y nfs-kernel-server
创建用于共享的目录并设置权限(确保所有需要访问的节点有读写权限):
sudo mkdir -p /mnt/nfs_share
sudo chown nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share
编辑/etc/exports文件,添加共享目录及访问权限(*表示允许所有IP访问,生产环境建议限制为集群节点IP):
echo "/mnt/nfs_share *(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports
rw:允许读写;sync:同步写入;no_subtree_check:禁用子树检查(提升性能)。sudo exportfs -a # 导出共享目录
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server # 设置开机自启
PV是集群中的存储资源,定义NFS共享的具体参数。创建nfs-pv.yaml文件:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 5Gi # 存储容量
volumeMode: Filesystem # 文件系统类型
accessModes:
- ReadWriteMany # 访问模式(多节点读写)
persistentVolumeReclaimPolicy: Retain # 回收策略(保留数据)
storageClassName: nfs-storage # 存储类(可选)
nfs:
path: /mnt/nfs_share # NFS共享目录路径
server: <NFS_SERVER_IP> # NFS服务器IP(若为本地节点,使用节点IP)
应用PV配置:
kubectl apply -f nfs-pv.yaml
PVC是用户对存储的请求,自动匹配符合条件的PV。创建nfs-pvc.yaml文件:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi # 请求的存储容量(需≤PV容量)
storageClassName: nfs-storage # 需与PV的storageClassName一致
应用PVC配置:
kubectl apply -f nfs-pvc.yaml
验证PVC状态:
kubectl get pvc nfs-pvc # STATUS应为"Bound"
将PVC挂载到Pod的容器中,创建nfs-pod.yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: nfs-pod
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html" # 容器内挂载路径
name: nfs-storage
volumes:
- name: nfs-storage
persistentVolumeClaim:
claimName: nfs-pvc # 引用PVC名称
应用Pod配置:
kubectl apply -f nfs-pod.yaml
验证Pod状态:
kubectl get pod nfs-pod # STATUS应为"Running"
进入Pod并创建测试文件,验证NFS存储的持久性和共享性:
kubectl exec -it nfs-pod -- /bin/bash
echo "Hello, NFS!" > /usr/share/nginx/html/test.txt
exit
在NFS服务器上查看共享目录,应存在test.txt文件:
ls /mnt/nfs_share
除NFS外,Ubuntu环境下还可配置以下存储方案:
适用于单节点测试,将节点本地目录挂载到Pod中。创建PV时指定hostPath路径:
apiVersion: v1
kind: PersistentVolume
metadata:
name: hostpath-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/hostpath_data
注意:HostPath不适用于生产环境,数据会随节点故障丢失。
通过CSI插件(如Longhorn、Rook)实现动态存储分配,支持块存储、对象存储等。以Longhorn为例:
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn --namespace longhorn-system
chmod 777仅为测试,生产环境建议限制为特定用户)。kubernetes.io/no-provisioner或CSI插件的存储类)。ReadWriteOnce:单节点读写;ReadOnlyMany:多节点只读;ReadWriteMany:多节点读写)。通过以上步骤,可在Ubuntu环境中为Kubernetes配置持久化存储,满足应用的数据持久化需求。