我正在尝试将 Kubernetes 集群(主实例和工作实例)迁移到不同的 OpenStack 区域。经过一些简单的修改(更改了云配置、节点标签)后,我设法启动了集群。还有一个问题——存储。在这个设置中,我使用 OpenStack Internal Cloud Provider,它将 cinder 卷作为 pod 的 PV 进行管理。新区域使用不同的区域名称和卷类型。卷 ID 也已更改。无法通过例如 kubectl 修改 SC 和 PV 定义来更改此值。
我想知道是否可以直接在 etcd 数据库中更改它?到目前为止,我尝试修改 PV 定义,但似乎 Kubernetes 还插入了额外的字符,并且修改它并不那么明显。
我做了什么:
- 从 etcd 获取 PV 定义并保存到文件:
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes k8s.gcr.io/etcd:3.4.3-0 etcdctl --cert /etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.key --cacert /etc/kubernetes/pki/etcd/ca.crt --endpoints https://kube-dev02-master01:2379 get /registry/persistentvolumes/pvc-1625baa0-e36c-4e2b-ad3d-0dfecc910ae0 --print-value-only > pv1.txt
. - 我更改了区域名称、区域名称和卷 ID(使用 vi)。
- 将修改后的值加载到 etcd:
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes k8s.gcr.io/etcd:3.4.3-0 etcdctl --cert /etc/kubernetes/pki/etcd/healthcheck-client.crt --key /etc/kubernetes/pki/etcd/healthcheck-client.key --cacert /etc/kubernetes/pki/etcd/ca.crt --endpoints https://kube-dev02-master01:2379 put /registry/persistentvolumes/pvc-1625baa0-e36c-4e2b-ad3d-0dfecc910ae0 "$(cat pv1.txt)"
- 从 kubectl 检查 PV:
[kubeadmin@kube-dev02-master01 ~]$ kubectl get pv
Error from server: illegal base64 data at input byte 5
所以似乎编码可能有问题,但我不知道在哪里。
Kubernetes v1.17.5、etcd v.3.4.3-0 与 Kubeadm 一起安装。