Убедитесь, что вы добавили дополнительный флаг в команду инициализации kubeadm (--ignore-preflight-errors=DirAvailable--var-lib-etcd
), чтобы подтвердить, что мы хотим использовать уже существующие данные.
Выполните следующие шаги:
- заменить IP-адрес во всех конфигурационных файлах в
/etc/kubernetes
- , создать резервную копию
/etc/kubernetes/pki
- идентифицировать сертификаты в
/etc/kubernetes/pki
, которые имеют старый IP-адрес в качестве альтернативного имени - 1-й step - удалить оба сертификата и ключ для каждого из них (для меня это был просто apiserver и etcd / peer)
- восстановить сертификаты с использованием сертификатов альфа-фазы kubeadm - 2nd step
- идентифицировать configmap в пространстве имен системы kube, которое ссылается на старый IP - 3rd step
- вручную редактировать эти configmaps
- перезапустите kubelet и docker (для принудительного создания всех контейнеров)
1.
/etc/kubernetes/pki# for f in $(find -name "*.crt"); do openssl x509 -in $f -text -noout > $f.txt; done
/etc/kubernetes/pki# grep -Rl 12\\.34\\.56\\.78 .
./apiserver.crt.txt
./etcd/peer.crt.txt
/etc/kubernetes/pki# for f in $(find -name "*.crt"); do rm $f.txt; done
2.
/etc/kubernetes/pki# rm apiserver.crt apiserver.key
/etc/kubernetes/pki# kubeadm alpha phase certs apiserver
...
/etc/kubernetes/pki# rm etcd/peer.crt etcd/peer.key
/etc/kubernetes/pki# kubeadm alpha phase certs etcd-peer
... 3.
$ kubectl -n kube-system get cm -o yaml | less
...
$ kubectl -n kube-system edit cm ...
Взгляните сюда: master-backup .
UPDATE
Во время замены мастер-узлов и изменения IP-адреса вы не можете связаться с api-сервером для изменения конфигурационных карт на шаге 4. Более того, если у вас есть один кластер master k8s, соединение между рабочими узлами будет прервано, пока новый мастер не будет вверх.
Чтобы обеспечить соединение между главным и рабочим узлами во время замены мастера, необходимо создать HA-кластер .
Сертификат подписан для {your-old-IP-here} и с {your-new-ip-here}
не может произойти безопасная связь, хотя вы можете заранее добавить больше IP-адресов в сертификат ...
Сертификат api-сервера подписан для имени хоста kubernetes, так что вы можете добавить его в качестве псевдонима к новому IP-адресу в /etc/hosts
, затем выполнить k ubectl --server=https://kubernetes:6443 ....
.