单节点K8s集群中安装StorageClass(SC)

单节点Kubernetes集群中安装一个StorageClass(SC)能为部署有状态应用(如数据库)提供动态分配持久化存储的能力。推荐使用基于NFS的StorageClass,因为它配置相对简单,资源消耗小,非常适合测试和学习环境。

核心概念图解

PVC → 触发 NFS Provisioner → 自动创建 PV → 挂载到 Pod

(就像你写"我要5G U盘" → 机器人自动装好U盘 → 你插到电脑上)

目录

具体安装步骤

步骤1:准备NFS服务器

安装NFS服务端

创建共享目录并设置权限

启动NFS服务

[步骤2:部署NFS Provisioner](#步骤2:部署NFS Provisioner)

下载部署文件

配置RBAC(权限)

配置并部署Provisioner

步骤3:创建StorageClass

查看并修改class.yaml

创建StorageClass

步骤4:验证安装与基本使用

检查SC是否创建成功

测试动态存储分配

检查PVC和PV状态

使用建议与注意事项


NFS StorageClass

这个方案的核心是使用NFS服务器作为后端存储,并在集群中部署一个名为nfs-subdir-external-provisioner的控制器,它能根据PVC的请求,自动在NFS服务器上创建子目录并生成对应的PV。

具体安装步骤

步骤1:准备NFS服务器

首先,您需要有一个NFS服务器。如果还没有,可以在您的CentOS服务器上快速搭建一个。

安装NFS服务端

sudo yum install -y nfs-utils

创建共享目录并设置权限

sudo mkdir -p /data/nfs

sudo chmod -R 755 /data/nfs

假设您的Kubernetes节点(也就是本机)IP为192.168.10.10,请根据实际情况修改

echo "/data/nfs 192.168.10.10(rw,sync,no_root_squash,no_all_squash)" | sudo tee -a /etc/exports

启动NFS服务

sudo systemctl enable --now nfs-server rpcbind

sudo exportfs -arv

步骤2:部署NFS Provisioner

这个Provisioner是自动创建PV的"大脑"。

下载部署文件

git clone https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

cd nfs-subdir-external-provisioner/deploy

配置RBAC(权限)

修改rbac.yaml文件,将其中的命名空间从default改为kube-system,然后应用。

sed -i 's/namespace: default/namespace: kube-system/' rbac.yaml

kubectl apply -f rbac.yaml

配置并部署Provisioner

这是最关键的一步,需要修改deployment.yaml文件,将NFS服务器地址和路径替换成自己的。

修改部署文件

sed -i 's/namespace: default/namespace: kube-system/' deployment.yaml

接着,使用文本编辑器(如vim)修改deployment.yaml中的环境变量部分,重点关注NFS_SERVERNFS_PATH

env:

  • name: PROVISIONER_NAME

value: k8s-sigs.io/nfs-subdir-external-provisioner

  • name: NFS_SERVER

value: 192.168.10.10 # 您的NFS服务器IP,如果是本机请用内网IP

  • name: NFS_PATH

value: /data/nfs # 您创建的NFS共享目录

...

volumeMounts:

  • name: nfs-client-root

mountPath: /persistentvolumes

volumes:

  • name: nfs-client-root

nfs:

server: 192.168.10.10 # 同上

path: /data/nfs # 同上

kubectl apply -f deployment.yaml

步骤3:创建StorageClass

现在创建StorageClass资源本身,它是用户直接引用的对象。

查看并修改class.yaml

cat class.yaml

文件内容大致如下,确保provisioner名称与上一步deployment.yaml中定义的PROVISIONER_NAME一致:

创建StorageClass

kubectl apply -f class.yaml

步骤4:验证安装与基本使用

检查SC是否创建成功

kubectl get storageclass

应该能看到名为nfs-client的StorageClass,并且它应该是default(如果不是,可以设置:kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}')。

测试动态存储分配

创建一个PVC来测试StorageClass是否正常工作。

复制代码
cat > test-pvc.yaml << EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-nfs-pvc
spec:
  storageClassName: nfs-client  # 指定使用我们刚创建的SC
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF

kubectl apply -f test-pvc.yaml

检查PVC和PV状态

kubectl get pvc test-nfs-pvc

kubectl get pv

如果PVC状态为Bound,并且系统自动创建了一个PV与之绑定,说明您的NFS StorageClass已经部署成功!

使用建议与注意事项

  • 默认StorageClass :建议将nfs-client设为默认SC,这样创建PVC时如果不指定storageClassName,会自动使用它。

  • 数据持久性 :配置中的archiveOnDelete: "false"意味着删除PVC后,PV和NFS服务器上的数据也会被清除 。如果您希望保留数据,可以设置为"true",或者手动管理PV。

  • 生产环境考量:此方案适合开发和测试。对于生产环境,需要考虑NFS服务器的高可用性、网络性能以及数据备份策略。

遇到镜像问题

检查 NFS Provisioner Pod 状态

查看 nfs-provisioner 相关的 Pod

kubectl get pods -n kube-system | grep nfs

查看更详细的 Pod 信息

kubectl describe pods -n kube-system -l app=nfs-client-provisioner

kubectl edit deployment -n kube-system nfs-client-provisioner

更新镜像地址:

uhub.service.ucloud.cn/zzx_use/nfs-subdir-external-provisioner:v4.0.2

就是下面的镜像加速器:

https://console.ucloud.cn/

相关推荐
努力搬砖的咸鱼2 小时前
用 Minikube 或 Kind 在本地跑起 Kubernetes
微服务·云原生·容器·架构·kubernetes·kind
陈陈CHENCHEN2 小时前
【Kubernetes】镜像拉取密钥 - Docker Registry
docker·kubernetes
Bits to Atoms2 小时前
宇树机器人二次开发环境配置 -- docker创建
运维·docker·容器
不想画图2 小时前
Kubernetes(八)——PV和PVC
云原生·容器·kubernetes
Serverless社区3 小时前
探秘 AgentRun|基于 Serverless 的 AI Agent 沙箱工程化之路
运维·阿里云·云原生·serverless·函数计算
阿里云云原生3 小时前
Nacos 生产级安全实践:精细化鉴权、灰度平滑过渡与全量操作审计
安全·阿里云·云原生·nacos
Ashmcracker4 小时前
导入Azure AKS集群到Rancher
microsoft·kubernetes·rancher·azure
码农小卡拉5 小时前
Docker Compose部署EMQX集群详细教程(Ubuntu环境优化版)
mqtt·ubuntu·docker·容器·emqx
WilliamHu.6 小时前
Windows 环境下使用 Docker 成功部署 Dify(完整实战记录)
运维·docker·容器