gpt4 book ai didi

kubernetes - 使用 kubectl 补丁将卷添加到 Kubernetes StatefulSet

转载 作者:行者123 更新时间:2023-12-02 11:39:03 25 4
gpt4 key购买 nike

问题总结:

我正在关注 Kubernetes guide to set up a sample Cassandra cluster .集群已启动并正在运行,我想向每个节点添加第二个卷,以便尝试为将存储在单独卷上的 Cassandra 启用备份。

我的解决方案尝试:

我尝试编辑我的 cassandra-statefulset.yaml通过添加新的 volumeMountsvolumeClaimTemplates 条目并重新应用它,但是收到以下错误消息:

$ kubectl apply -f cassandra-statefulset.yaml 
storageclass.storage.k8s.io/fast unchanged
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/

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

我的cassandra-backup-patch.yaml:

spec:
template:
spec:
containers:
volumeMounts:
- name: cassandra-backup
mountPath: /cassandra_backup
volumeClaimTemplates:
- metadata:
name: cassandra-backup
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: fast
resources:
requests:
storage: 1Gi

但是这导致了以下错误:

$ kubectl patch statefulset cassandra --patch "$(cat cassandra-backup-patch.yaml)"
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,所以我的方法可能完全错误。非常欢迎任何评论或帮助,在此先感谢。

最佳答案

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

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

statefulset 中的某些字段在创建后无法更改。您可能需要删除并重新创建 statefulset 以添加新的 volumeClaimTemplate

编辑:很多时候,即使您删除了 statefulset,也可以让您的 pod 继续运行。要完成此操作,请在删除操作中使用 --cascade=false 标志。

kubectl delete statefulset <name> --cascade=false

然后,当您使用更新后的 VPC 重新创建状态集时,您的工作负载将保持运行。

关于kubernetes - 使用 kubectl 补丁将卷添加到 Kubernetes StatefulSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60177120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com