我有一个有状态集想要更新,但收到错误:
The StatefulSet "postgres" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'ordinals', 'template', 'updateStrategy', 'persistentVolumeClaimRetentionPolicy' and 'minReadySeconds' are forbidden
如何更新静态集? 我尝试缩小 Pod 的规模:
kubectl get pods
NAME READY STATUS RESTARTS AGE
postgres-0 0/1 Pending 0 11m
kubectl scale --replicas=0 deployment/postgres-0
error: no objects passed to scale
我尝试缩小服务规模:
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
postgres ClusterIP None <none> 5432/TCP 107m
kubectl scale --replicas=0 service/postgres
Error from server (NotFound): the server could not find the requested resource
所以我的问题是,如何将更改应用到
statefulSet
?
您已指定要更新有状态集,但实际上并未提及您要更新的内容
Kubernetes 中的 StatefulSet 有一个恼人的限制,即一旦创建了其中的指定字段,您就只能更改它们 - 正如错误消息所暗示的那样。
如果有状态集是不允许更改的字段之一,则更新有状态集的唯一方法是删除有状态集并重新创建它。
如果有状态集的名称不更改,kubernetes 应该重新附加相同的磁盘。
我在尝试更改有状态集上的标签和选择器时遇到了这个问题,并将其提交到 Kubernetes 项目中。 (https://github.com/kubernetes/kubernetes/issues/90519如果您有兴趣)