Как сделать резервную копию и восстановить мастер-узел kubernetes? - PullRequest
0 голосов
/ 27 января 2020

Существует один главный узел k8s, мне нужно выполнить его резервное копирование и восстановление на другом сервере с разными IP-адресами. Я гуглил эту топи c и нашел решение - https://elastisys.com/2018/12/10/backup-kubernetes-how-and-why/

Все выглядело легко; Итак, я следовал инструкции и получил копию сертификатов и снимок базы данных etcd. Затем я использовал второй скрипт для восстановления узла на другом сервере. Это не go хорошо на этот раз. Он дал мне кучу ошибок, связанных с несовпадением сертификатов и локальных IP-адресов сервера.

Насколько я понял, при инициализации кластера kubernetes создается набор сертификатов, назначенных IP-адресам исходного сервера. и я не могу просто сделать резервную копию и восстановить в другом месте.

Итак, как сделать резервную копию главного узла k8s и восстановить его?

1 Ответ

0 голосов
/ 27 января 2020

Убедитесь, что вы добавили дополнительный флаг в команду инициализации 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 .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...