单节点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 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪2 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀2 天前
Docker部署Nacos
docker·容器
缓解AI焦虑2 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
阿里云云原生2 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生2 天前
当 AI Agent 接管手机:移动端如何进行观测
云原生·agent
阿里云云原生2 天前
AI 原生应用开源开发者沙龙·深圳站精彩回顾 & PPT下载
云原生
阿里云云原生2 天前
灵感启发:日产文章 100 篇,打造“实时热点洞察”引擎
云原生
1candobetter2 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
~莫子2 天前
Haproxy七层负载详解+实验详细代码
云原生