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

使用Helm部署MariaDB至K8s集群遇FORBIDDEN错误求助

ARM64架构下Docker Desktop K8s部署MariaDB的StatefulSet错误解决

问题场景

在M2芯片(ARM64架构)的MacBook上,用Docker Desktop内置的K8s集群,通过groundhog2k/MariaDB Helm包部署MariaDB,执行了以下操作:

  1. 添加Helm仓库:
helm repo add groundhog2k https://groundhog2k.github.io/helm-charts/
  1. 执行安装命令:
helm upgrade --install my-local-cluster groundhog2k/mariadb \
      --version 0.8.0 \
      --namespace mariadb \
      --set auth.rootPassword="my-root-pwd" \
      --set master.persistence.size=10Gi \
      --set auth.username="my-usr-name" \
      --set auth.password="my-pwd"

收到错误提示:

UPGRADE FAILED: cannot patch "my-local-cluster" with kind StatefulSet: StatefulSet.apps "my-local-cluster" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden"

错误原因

这个错误的核心是Kubernetes StatefulSet的更新限制:StatefulSet的spec字段里,只有replicas、template、updateStrategy、persistentVolumeClaimRetentionPolicy和minReadySeconds这几个字段允许后续更新,其他字段(比如存储PVC的大小、初始化阶段设置的认证参数等)一旦StatefulSet创建完成,就不能通过patch方式修改。

你用helm upgrade --install时,如果该Release(my-local-cluster)已经存在,Helm会尝试更新现有StatefulSet,但你修改的master.persistence.size以及认证相关参数属于StatefulSet不允许更新的字段,触发了K8s的校验拦截。

解决方法

方法1:删除现有Release后重新安装(适合无数据保留需求)

如果当前集群里的MariaDB实例没有需要保留的数据,直接删除现有Release再重新安装即可:

# 删除现有Release
helm uninstall my-local-cluster --namespace mariadb
# 重新执行安装命令
helm upgrade --install my-local-cluster groundhog2k/mariadb \
      --version 0.8.0 \
      --namespace mariadb \
      --set auth.rootPassword="my-root-pwd" \
      --set master.persistence.size=10Gi \
      --set auth.username="my-usr-name" \
      --set auth.password="my-pwd"

方法2:保留数据的前提下调整配置

如果需要保留现有数据,分两部分处理:

  1. 修改PVC存储大小

    • 先找到对应PVC名称(通常为data-my-local-cluster-0):
      kubectl get pvc -n mariadb
      
    • 编辑PVC,修改存储大小:
      kubectl edit pvc data-my-local-cluster-0 -n mariadb
      
      将spec.resources.requests.storage的值改为10Gi,保存退出即可。
  2. 修改认证参数
    认证参数存在Secret中,直接修改Secret后重启Pod生效:

    # 更新root密码(注意替换为你的密码)
    kubectl patch secret my-local-cluster-mariadb -n mariadb -p '{"data": {"root-password": "'$(echo -n "my-root-pwd" | base64)'"}}'
    # 更新普通用户密码
    kubectl patch secret my-local-cluster-mariadb -n mariadb -p '{"data": {"password": "'$(echo -n "my-pwd" | base64)'"}}'
    # 重启Pod让新配置生效
    kubectl delete pod my-local-cluster-0 -n mariadb
    

方法3:强制更新(不推荐)

可以用helm upgrade --install --force强制执行更新,但这会删除并重建StatefulSet的Pod,大概率导致数据丢失,仅适合测试环境临时使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:10:17