讲师中心 微信公众号
AI工具推荐 视频效率加速

为什么MySQL在Kubernetes集群中部署后无法正常分配持久化卷?

夏伟同学_3185

夏伟同学_3185

发布时间:2026-07-08 07:55:38

|

483人浏览过

|

来源于php中文网

原创

根本原因是kube-apiserver在v1.20.2+默认禁用selfLink(--feature-gates=RemoveSelfLink=true),导致依赖该字段的旧版provisioner(如fuseim.pri/ifs)无法构造PV引用,PVC卡在Pending。

为什么mysql在kubernetes集群中部署后无法正常分配持久化卷?

PVC 一直 Pending,根本原因是 apiserver 禁用了 selfLink

在 v1.20.2 及更高版本的 kube-apiserver 中,--feature-gates=RemoveSelfLink=true 是默认启用的。而很多旧版 StorageClass 或 NFS provisioner 的实现(尤其是基于 selfLink 构造 PV 名称或绑定逻辑的)会因此失败,导致 PVC 卡在 Pending 状态,后续 Pod 也就无法调度。

这不是 StorageClass 配置错误,也不是 NFS 服务没启,而是 apiserver 主动拒绝返回 selfLink 字段,触发了下游 provisioner 的空指针或路径构造异常。

  • 临时修复:编辑 /etc/kubernetes/manifests/kube-apiserver.yaml,在 spec.containers[0].command 下添加一行:- --feature-gates=RemoveSelfLink=false
  • 重启 kubelet:systemctl restart kubelet(master 节点上)
  • 验证是否生效:kubectl get pod mysql-0 -o json | grep selfLink —— 如果输出非空,说明已恢复

StatefulSet 使用 NFS 时,PVC 绑定成功但 Pod 挂载失败

常见现象是 Pod 处于 ContainerCreating,kubectl describe pod 显示类似错误:mount.nfs: mounting 192.168.89.66:/home/data/mysql-data-mysql-0-pvc-... failed, reason given by server: No such file or directory。

这不代表 NFS 服务没起来,而是 NFS Server 端缺少对应子目录 —— Kubernetes 的 dynamic provisioner(如 nfs-subdir-external-provisioner)只创建 PV 和更新 etcd,**不会自动在 NFS 服务器上 mkdir 实际路径**。

  • 手动创建缺失路径:mkdir -p /home/data/mysql-data-mysql-0-pvc-73d8ba2c-5c4e-44bf-9550-39e00451c020
  • 确保 NFS 导出配置包含该路径,且权限开放:/home/data *(rw,sync,no_root_squash)
  • 重载 NFS 配置:exportfs -ra,再重启 nfs-server 和 rpcbind

StorageClass 配置与实际 provisioner 不匹配

即使 PVC 看似 Bound,也可能因 StorageClass 的 provisioner 字段和集群中运行的 external-provisioner Deployment 名称不一致,导致 PV 创建后无法被正确标记或清理,最终挂载时找不到后端卷。

Kubernetes Network Policy Generator
Kubernetes Network Policy Generator

使用加权评分卡在12项标准上评估和比较隐私解决方案供应商。适用于选择隐私管理软件、比较数据保护方案等场景。

下载

例如你部署的是 nfs-subdir-external-provisioner,但 StorageClass 写成了 cluster.local/nfs-provisioner,而实际 provisioner 的 ServiceAccount 名为 nfs-client-provisioner,其监听的 provisioner 名是 k8s-sigs.io/nfs-subdir-external-provisioner。

  • 查当前 provisioner 实际监听名:kubectl get deployment -n default nfs-client-provisioner -o yaml | grep -A1 "args:",关注 -provisioner= 参数值
  • 确认 StorageClass 的 provisioner: 字段必须完全一致(包括大小写和斜杠)
  • 不要复用别人 YAML 里的 StorageClass 名称,优先用 kubectl get sc 看真实存在的名字

MySQL 容器内数据目录权限不对,挂载后启动失败

PVC 挂载成功、Pod 进入 Running,但容器立刻 Crash,日志里出现 mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied) 或类似错误。

这是因为 MySQL 官方镜像(如 mysql:5.7)默认以用户 mysql(UID 999)运行,而 NFS 或 hostPath 卷的目录在服务端是 root 创建的,属主属组为 root:root,容器内无法写入。

  • 在 NFS Server 上,对挂载根目录执行:chown -R 999:999 /home/data
  • 或改用 initContainer 在 Pod 启动前修正权限:chmod 777 /var/lib/mysql 或 chown -R 999:999 /var/lib/mysql
  • 更稳妥的做法是在 ConfigMap 中提供 my.cnf,把 datadir 改为 /data/mysql/data,并在 initContainer 中统一初始化该路径并设权

真正卡住的人,往往不是没配 StorageClass,而是没意识到 selfLink 被关、NFS 路径要手建、provisioner 名字要一字不差、UID 权限要提前对齐 —— 四个环节任意一个断掉,PVC 就停在 Pending 或 Pod 就卡在 ContainerCreating。

热门AI工具

更多
Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2253

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1379

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

815

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3112

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5288

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1179

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5531

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4842

2023.08.14

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 188人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn