ubuntu

如何在Ubuntu上配置Kubernetes存储

小樊
48
2025-10-18 18:00:27
栏目: 云计算

在Ubuntu上配置Kubernetes存储的常见方案(以NFS为例)

在Ubuntu环境中为Kubernetes配置存储,核心是通过**PersistentVolume(PV)PersistentVolumeClaim(PVC)**实现持久化存储,或借助NFS(网络文件系统)实现跨节点共享存储。以下是详细步骤:

一、准备工作

  1. 确保Kubernetes集群正常运行
    在Ubuntu节点上完成Kubernetes集群部署(Master节点初始化、Worker节点加入),并验证集群状态:

    kubectl get nodes
    

    确保所有节点状态为Ready

  2. 安装NFS客户端工具(所有节点)
    Kubernetes节点需要通过NFS客户端访问共享存储,安装命令:

    sudo apt update
    sudo apt install -y nfs-common
    

二、配置NFS服务器(可选择外部服务器或Ubuntu节点之一)

若集群中有专用节点作为NFS服务器,执行以下步骤;若使用外部NFS服务器,跳过此步直接配置Kubernetes资源。

1. 安装NFS服务器

在Ubuntu节点上安装NFS服务:

sudo apt update
sudo apt install -y nfs-kernel-server

2. 创建共享目录

创建用于共享的目录并设置权限(确保所有需要访问的节点有读写权限):

sudo mkdir -p /mnt/nfs_share
sudo chown nobody:nogroup /mnt/nfs_share
sudo chmod 777 /mnt/nfs_share

3. 配置NFS共享规则

编辑/etc/exports文件,添加共享目录及访问权限(*表示允许所有IP访问,生产环境建议限制为集群节点IP):

echo "/mnt/nfs_share *(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports

4. 启动NFS服务

sudo exportfs -a  # 导出共享目录
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server  # 设置开机自启

三、在Kubernetes中配置NFS存储

1. 创建PersistentVolume(PV)

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

2. 创建PersistentVolumeClaim(PVC)

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"

3. 在Pod中使用PVC

将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"

4. 验证存储功能

进入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环境下还可配置以下存储方案:

1. HostPath(本地存储)

适用于单节点测试,将节点本地目录挂载到Pod中。创建PV时指定hostPath路径:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: hostpath-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/hostpath_data

注意:HostPath不适用于生产环境,数据会随节点故障丢失。

2. CSI存储(动态置备)

通过CSI插件(如Longhorn、Rook)实现动态存储分配,支持块存储、对象存储等。以Longhorn为例:

五、关键注意事项

  1. NFS服务器权限:确保NFS共享目录权限允许Kubernetes节点访问(chmod 777仅为测试,生产环境建议限制为特定用户)。
  2. 存储类选择:若需要动态分配存储,需创建StorageClass(如NFS的kubernetes.io/no-provisioner或CSI插件的存储类)。
  3. 数据安全:生产环境中,建议使用加密传输(如NFS over TLS)和备份策略,避免数据丢失。
  4. 访问模式:根据应用需求选择合适的访问模式(ReadWriteOnce:单节点读写;ReadOnlyMany:多节点只读;ReadWriteMany:多节点读写)。

通过以上步骤,可在Ubuntu环境中为Kubernetes配置持久化存储,满足应用的数据持久化需求。

0
看了该问题的人还看了