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

升级K8s中MongoDB Helm Chart后认证报错及StatefulSet更新问题

问题描述
  • 将MongoDB Helm Chart从10.1.0升级至11.2.0,原版本未开启认证
  • 升级时配置root密码后,仲裁节点持续报认证错误,Pod陷入崩溃循环
  • 排查发现是persistence: true导致的问题,将其设为false并删除Helm发布后重新安装成功
  • 但执行helm3 upgrade时触发错误:

    Error: UPGRADE FAILED: cannot patch with kind StatefulSet: StatefulSet.apps is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden

当前需求:保留persistence: true并为MongoDB开启认证

环境配置

values.yaml

mongodb:
  architecture: replicaset
  replicaCount: 2
  podAntiAffinityPreset: hard
  auth:
    enabled: false
  useStatefulSet: true
  persistence:
    enabled: true
    size: 1Gi
  resources:
    limits:
      cpu: 1
      memory: 2Gi
    requests:
      cpu: 100m
      memory: 1Gi
  metrics:
    enabled: true
    livenessProbe:
      enabled: true
    readinessProbe:
      enabled: true
    resources:
      limits:
        cpu: 200m
        memory: 256Mi
      requests:
        cpu: 100m
        memory: 128Mi

GitLab CI 脚本

script:
    - helm3 install
      --namespace="$NAMESPACE"
        --wait
        --timeout $HELM_TIMEOUT
        ..some other stuff..
        --set mongodb.auth.enabled="true"
        --set mongodb.auth.rootPassword="$MONGO_ROOT_PWD_STAGE"
        --set mongodb.auth.replicaSetKey="$MONGO_REPLICA_SET_KEY_STAGE"
        --values ${!HELM_VALUES}
        --kube-context stage
        "$RELEASE_NAME" chart/
解决方案

核心原因

  1. StatefulSet创建后,除replicas、template、updateStrategy外的spec字段不允许修改,直接升级会触发Kubernetes的限制
  2. 旧PVC中的MongoDB数据未包含认证配置信息,开启认证后节点无法通过身份校验,导致崩溃循环

操作步骤

  1. 备份现有数据

    • 进入主Mongo Pod:kubectl exec -it <主Pod名称> -n $NAMESPACE -- mongosh
    • 导出所有数据库:mongodump --out /tmp/mongo-backup
    • 将备份文件复制到本地:kubectl cp <主Pod名称>:/tmp/mongo-backup ./mongo-backup -n $NAMESPACE
  2. 清理旧资源

    • 删除Helm发布:helm3 uninstall $RELEASE_NAME -n $NAMESPACE
    • 删除关联PVC:kubectl delete pvc -l app.kubernetes.io/name=mongodb -n $NAMESPACE
  3. 配置认证参数
    可以直接修改values.yaml中的auth.enabled为true,或者保留GitLab CI中的--set参数覆盖配置,确保persistence.enabled保持true

  4. 重新安装Chart
    执行GitLab CI中的安装命令(或本地运行),等待Mongo集群初始化完成

  5. 恢复备份数据

    • 进入新的主Mongo Pod:kubectl exec -it <新主Pod名称> -n $NAMESPACE -- mongosh -u root -p $MONGO_ROOT_PWD_STAGE
    • 复制本地备份到Pod:kubectl cp ./mongo-backup <新主Pod名称>:/tmp/mongo-backup -n $NAMESPACE
    • 恢复数据:mongorestore /tmp/mongo-backup --username root --password $MONGO_ROOT_PWD_STAGE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:03:15