Kubernetes部署WordPress与MySQL时数据库连接失败求助
排查WordPress-MySQL数据库连接错误
以下是你的配置中存在的几个关键问题,以及对应的修复方案:
1. PersistentVolumeClaim名称不匹配且存储资源请求超限
- 在
persistent-volume.yaml中,你定义的MySQL PVC名称是mysql-pv-claims,但mysql-deployment.yaml里的Deployment引用的PVC是mysql-pv-claim,名称不一致会导致MySQL Pod无法找到存储卷。 - 同时,
mysql-deployment.yaml里重复定义的PVC请求20Gi存储,但你创建的PV只有3Gi容量,PVC无法绑定到PV,会处于Pending状态,导致MySQL Pod无法正常启动。
修复方案:
修改persistent-volume.yaml中的MySQL PVC名称为mysql-pv-claim,并调整存储请求为1Gi(匹配PV的可用容量):
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim # 修正名称 spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 1Gi # 调整为PV可分配的容量
同时删除mysql-deployment.yaml中重复定义的PVC部分(因为已经在persistent-volume.yaml中定义过)。
2. MySQL容器缺少必要的环境变量
WordPress官方镜像默认需要连接名为wordpress的数据库,且使用wordpress专用用户(而非root),但你的MySQL部署只设置了MYSQL_ROOT_PASSWORD,没有初始化对应的数据库和用户,导致WordPress无法建立有效连接。
修复方案:
在mysql-deployment.yaml的容器环境变量中添加以下内容:
env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: sql-pass key: password - name: MYSQL_DATABASE value: wordpress # 创建WordPress需要的数据库 - name: MYSQL_USER value: wordpress # 创建WordPress专用用户 - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: sql-pass key: password # 该用户的密码,可与root密码一致
3. HostPath目录权限问题
使用hostPath作为PV时,节点上的/data/pv目录权限可能不符合MySQL容器的需求(MySQL容器内的mysql用户UID为999,需要该目录的写入权限)。
修复方案:
在Kubernetes节点上手动调整目录权限:
mkdir -p /data/pv chown -R 999:999 /data/pv
4. 验证组件状态
完成上述修改后,执行以下命令验证组件状态:
- 检查PVC绑定状态:
kubectl get pvc,确保mysql-pv-claim和wp-pv-claim状态为Bound - 检查Pod运行状态:
kubectl get pods,确保两个Deployment的Pod都处于Running状态 - 检查Service状态:
kubectl get svc,确保wordpress-mysql和wordpress服务正常存在
额外优化建议
WordPress的环境变量中,建议明确指定数据库用户名和名称,避免默认值冲突:
env: - name: WORDPRESS_DB_HOST value: wordpress-mysql - name: WORDPRESS_DB_USER value: wordpress # 指定使用专用用户而非root - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: sql-pass key: password - name: WORDPRESS_DB_NAME value: wordpress # 明确指定数据库名称
内容的提问来源于stack exchange,提问作者Irkham 11
相关产品推荐
相关产品推荐

