使用kubectl补丁向kubernetes statefulset添加卷

dldeef67  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(1532)

问题摘要:
我按照kubernetes指南建立了一个cassandra集群示例。集群已启动并正在运行,我想为每个节点添加第二个卷,以便尝试启用存储在单独卷上的cassandra备份。
我的解决方案:
我试图通过添加一个新的 volumeMounts 以及 volumeClaimTemplates 项,并重新应用它,但收到以下错误消息:

  1. $ kubectl apply -f cassandra-statefulset.yaml
  2. storageclass.storage.k8s.io/fast unchanged
  3. The StatefulSet "cassandra" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden

然后,我尝试启用滚动更新,并按照以下文档修补我的配置:https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/

  1. $ kubectl patch statefulset cassandra -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}'
  2. statefulset.apps/cassandra patched (no change)

我的 cassandra-backup-patch.yaml :

  1. spec:
  2. template:
  3. spec:
  4. containers:
  5. volumeMounts:
  6. - name: cassandra-backup
  7. mountPath: /cassandra_backup
  8. volumeClaimTemplates:
  9. - metadata:
  10. name: cassandra-backup
  11. spec:
  12. accessModes: [ "ReadWriteOnce" ]
  13. storageClassName: fast
  14. resources:
  15. requests:
  16. storage: 1Gi

但是,这会导致以下错误:

  1. $ kubectl patch statefulset cassandra --patch "$(cat cassandra-backup-patch.yaml)"
  2. The request is invalid: patch: Invalid value: "map[spec:map[template:map[spec:map[containers:map[volumeMounts:[map[mountPath:/cassandra_backup name:cassandra-backup]]]]] volumeClaimTemplates:[map[metadata:map[name:cassandra-backup] spec:map[accessModes:[ReadWriteOnce] resources:map[requests:map[storage:1Gi]] storageClassName:fast]]]]]": cannot restore slice from map

有谁能告诉我如何为每个节点添加一个额外的卷,或者解释一下为什么这个补丁不起作用?这是我第一次使用kubernetes,所以我的方法可能是完全错误的。任何意见或帮助是非常欢迎的,提前感谢。

x7yiwoj4

x7yiwoj41#

答案在您的第一个日志中:

  1. The StatefulSet "cassandra" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy'

您不能更改 statefulset 创造之后。您可能需要删除并重新创建 statefulset 添加新的 volumeClaimTemplate .

相关问题