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创建后就无法修改。具体解决步骤:
- 删除已存在的StatefulSet(由于你的StorageClass回收策略为
Retain,删除操作不会删除关联的PVC和PV,数据会完整保留):kubectl delete statefulset eventstore-cluster - 重新执行部署命令,由于你的
statefulset.yml包含Service定义,会自动重建Service和StatefulSet:kubectl apply -f .\statefulSet.yml - 若不想删除StatefulSet,仅能修改Kubernetes允许更新的字段:
replicas、ordinals、template、updateStrategy、persistentVolumeClaimRetentionPolicy、minReadySeconds,其他字段无法通过apply更新。
- 删除已存在的StatefulSet(由于你的StorageClass回收策略为
额外提示:重新创建的StatefulSet会自动关联原有PVC(PVC命名规则为
{volumeClaimTemplate-name}-{statefulset-name}-{ordinal}),无需担心数据丢失。
内容的提问来源于stack exchange,提问作者Seany84
相关产品推荐
相关产品推荐

