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

AKS v1.26.6部署StatefulSet遇字段更新限制错误求助

问题

在Azure托管Kubernetes集群(AKS v1.26.6)中部署statefulset.yml和storageclass.yml配置文件时,执行kubectl apply -f .\statefulSet.yml后出现以下错误:

StatefulSet "eventstore-cluster" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'ordinals', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden

涉及的配置文件如下:

storageclass.yml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium-retain
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Retain
parameters:
  storageaccounttype: Premium_LRS

statefulset.yml

apiVersion: v1
kind: Service
metadata:
  name: eventstore-cluster
  labels:
    app: eventstore-cluster
spec:
  clusterIP: "None"
  ports:
  - port: 2113
    name: eventstore-web
  - port: 1113
    name: eventstore-tcp
  - port: 2112
    name: gossip
  selector:
    app: eventstore-cluster
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: eventstore-cluster
spec:
  selector:
    matchLabels:
      app: eventstore-cluster 
  serviceName: eventstore-cluster
  replicas: 3
  template:
    metadata:
      labels:
        app: eventstore-cluster 
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - eventstore-cluster
              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: eventstore
        image: eventstore/eventstore:release-4.1.1-hotfix1
        env:
        - name: EVENTSTORE_CLUSTER_SIZE 
          value: "3"
        - name: EVENTSTORE_DISCOVER_VIA_DNS
          value: "true"
        - name: EVENTSTORE_CLUSTER_DNS 
          value: "eventstore-cluster"
        - name: EVENTSTORE_EXT_IP
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        ports: 
        - containerPort: 2113
          name: eventstore-web
        - containerPort: 1113
          name: eventstore-tcp
        - containerPort: 2112
          name: gossip
        volumeMounts:
        - name: eventstore-cluster-data
          mountPath: /var/lib/eventstore
        livenessProbe:
          httpGet:
            path: /
            port: 2113
          initialDelaySeconds: 30
          periodSeconds: 15
        readinessProbe:
          httpGet:
            path: /
            port: 2113
          initialDelaySeconds: 5
          periodSeconds: 5
  volumeClaimTemplates:
  - metadata:
      name: eventstore-cluster-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-premium-retain"
      resources:
        requests:
          storage: 20Gi
解决方法
  • 该错误的核心原因:你并非首次部署此StatefulSet,而是在已有实例的基础上执行apply时,修改了Kubernetes禁止更新的字段。比如serviceName、selector、volumeClaimTemplates这类字段,在StatefulSet创建后就无法修改。

  • 具体解决步骤:

    1. 删除已存在的StatefulSet(由于你的StorageClass回收策略为Retain,删除操作不会删除关联的PVC和PV,数据会完整保留):
      kubectl delete statefulset eventstore-cluster
      
    2. 重新执行部署命令,由于你的statefulset.yml包含Service定义,会自动重建Service和StatefulSet:
      kubectl apply -f .\statefulSet.yml
      
    3. 若不想删除StatefulSet,仅能修改Kubernetes允许更新的字段:replicas、ordinals、template、updateStrategy、persistentVolumeClaimRetentionPolicy、minReadySeconds,其他字段无法通过apply更新。
  • 额外提示:重新创建的StatefulSet会自动关联原有PVC(PVC命名规则为{volumeClaimTemplate-name}-{statefulset-name}-{ordinal}),无需担心数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:36:04