我有一个使用静态NFS PV的弹性簇。我如何将这些数据移动到另一台服务器上有更多空间(already did, just copy it)
和让应用程序应用新的备份数据而无需重新安装所有内容。我在Centos 7上使用Rancher(没有VM Sphere)。
NFS path
和limitStorage
更新到新的备份服务器,但k8s不允许。#持久卷声称“ data-core-container-log-elasticsearch-data-0”无效:#*规范:禁止:创建后不可更改,除了resources.bound声明的请求
[假设nfs驱动器已装满,请在10.20.4.101
处使用nfs量声明的状态集。我重定位并将所有数据复制到另一个虚拟机10.20.4.102
。
现在,当我保留旧配置时,我在同一个名称空间中使用10.20.4.102
创建了一个新的PV,并使用了与原始标签不同的标签,就像这样[>]
New Settings
metadata:
name: my-pv-1
namespace: pv-test
labels:
volume-type: pv-1
Old Settings
metadata:
name: my-pv
namespace: pv-test
labels:
volume-type: pv
这将在您的命名空间中创建一个新的PV,您可以在kubectl get pv
中看到状态为Available
,其他状态为Bound
现在将您的statefulset yaml文件字段volume-type
更新为新的,与新pv
中的标签相同,并将volumeClaimTemplates
中的名称更改为新名称。现在不要应用此设置。
New
volumeClaimTemplates:
- metadata:
name: pv-data-1
namespace: pv-test
selector:
matchLabels:
volume-type: pv-1
Old
volumeClaimTemplates:
- metadata:
name: pv-data
namespace: pv-test
selector:
matchLabels:
volume-type: pv
您肯定不能直接申请,这将引发类似Forbidden: updates to statefulset spec for fields other than `replicas`, `template` and `updateStrategy` are forbidden.
的错误。
现在,您可以删除并重新创建整个statefulset
,而只需稍许停机。或者,您可以使用--cascade=false
标志
kubectl delete statefulset mystatefulset -n pv-test --cascade=false
这只会删除状态集而不是状态集中的Pod,如果您监视命名空间中的所有资源,它将删除状态集,而不是Pod或任何资源。使所有应用程序仍然可以访问正在运行的应用程序。
现在apply
更新的状态集将创建具有不同pvc的新状态集。但是您的广告连播仍会引用旧的pvc和pv。
现在只需使用kubectl delete pod mypod-0 -n pv-test
删除广告连播>
这将删除pod,但是在后台的statefulset会在删除时使用新的pvc创建一个新pod。现在,如果您kubectl pv和pvc,您会发现会有另外一个pvc,并且带有Available
的pv将变成Bound
,并且将由pvc声明。
手动删除所有吊舱,有状态集负责娱乐。完成所有操作后,请先手动删除旧的pvc,然后再删除旧的pv。
您可能已经尝试了所有这些步骤,并且都知道了,只是为了清楚起见,我在这里写下了所有步骤,而不是含糊其词。
希望这会有所帮助。