You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes部署FireFly III时MySQL Pod出现CrashLoopBackOff权限问题

解决MySQL Pod因NFS PV权限问题导致的CrashLoopBackOff

从你的Pod日志里的关键错误信息 /usr/sbin/mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied),可以直接定位问题:NFS挂载的存储卷权限和MySQL容器内运行的用户不匹配。

MySQL 5.6容器默认使用mysql用户(UID=27,GID=27)启动,但NFS共享目录的权限大概率是宿主节点的root或其他用户,导致容器内的mysql用户没有读写目录的权限。下面是具体的解决方向:

方法1:修改NFS服务器端的目录权限

这是最直接的解决方案,直接让NFS目录权限匹配MySQL容器的用户:

  • 登录你的NFS服务器,找到对应PV指向的共享目录
  • 执行命令修改目录的属主和权限:
    # 把目录权限设置为MySQL容器的mysql用户(UID=27,GID=27)
    chown -R 27:27 /path/to/your/nfs/mysql/directory
    # 确保目录有足够的读写执行权限
    chmod -R 755 /path/to/your/nfs/mysql/directory
    
  • 之后删除当前故障Pod,让Deployment重建:
    kubectl delete pod firefly-iii-mysql-67bfb68cf9-6gm9l
    

方法2:在Kubernetes Deployment中配置安全上下文

如果无法修改NFS服务器的权限,可以通过Kubernetes的安全上下文自动调整挂载卷的权限:
修改你的MySQL Deployment YAML,在spec.template.spec下添加securityContext配置:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: firefly-iii-mysql
  labels:
    app: firefly-iii
spec:
  selector:
    matchLabels:
      app: firefly-iii
      tier: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: firefly-iii
        tier: mysql
    spec:
      # 添加这部分安全上下文配置
      securityContext:
        fsGroup: 27 # 对应MySQL容器内的mysql用户组GID
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: firefly-iii-secrets
              key: db_password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim

应用修改后的配置:

kubectl apply -f your-mysql-deployment.yaml

fsGroup会让Kubernetes在挂载卷时自动将目录的组权限设置为27,确保容器内的mysql用户能正常读写。

验证修复效果

等Pod重建完成后,检查状态:

kubectl get pods | grep mysql

如果Pod进入Running状态,再查看日志确认初始化成功:

kubectl logs firefly-iii-mysql-xxxx-xxxx

补充说明

你提到FireFly III主Pod能正常运行,应该是主Pod使用的运行用户UID和NFS目录权限匹配,而MySQL的用户UID不同,才出现了差异。

内容的提问来源于stack exchange,提问作者Boudewijn Swen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:37:38