Adding a volume to a Kubernetes StatefulSet using kubectl patch
问题总结:
我正在遵循Kubernetes指南来设置示例Cassandra集群。群集已启动并正在运行,我想向每个节点添加第二个卷,以便尝试启用将存储在单独卷上的Cassandra备份。
我试图解决的问题:
我尝试通过添加新的
1 2 3 | $ 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/
1 2 | $ kubectl patch statefulset cassandra -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}' statefulset.apps/cassandra patched (no change) |
我的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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 |
但是,这导致以下错误:
1 2 | $ 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,所以我的方法可能是完全错误的。非常感谢任何意见或帮助。
答案在您的第一个日志中:
1 | The StatefulSet"cassandra" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' |
创建后,您无法更改