Назад | Перейти на главную страницу

Как восстановиться после сбоя мастера в кубернетах

У меня есть три узла multi-master kubernetes (1.17.3) кластера (стековая плоскость управления и узлы etcd),

11.11.11.1 - master1
11.11.11.2 - master2
11.11.11.3 - master3

Поэтому перед тем, как пойти в производство, я пробую возможные сбои и сделал следующие шаги

Изящное удаление главных узлов

Таким образом, применяя вышеуказанные шаги, все модули работают на мастерах 1 и 2, он удаляет записи из kubeadm-conf configmap, а также из etcd, на самом деле я выполняю вышеуказанные шаги на master2, и все еще один мастер работает, и я могу запустить kubectl.

Непредвиденное удаление главных узлов

Это может случиться, что у двух узлов могут быть проблемы с оборудованием в производстве, из моего поиска это похоже на проблему с etcd, но как я могу получить доступ к etcd и удалить master2 и master3, я подумал сделать docker ps и docker exec <etcd container> но docker ps не показывает контейнер etcd.

Тема близкий и дорогой в моем сердце.

Краткая версия:

  1. создать снимок etcd из уцелевшего узла etcd
  2. создать новый трехузловой «одноразовый» кластер etcd, восстанавливая его из этого снимка
  3. стоп master1член etcd
  4. сбросить его состояние (rm -rf /var/lib/etcd, и удалите серверные и одноранговые сертификаты, если вы не использовали один и тот же ЦС для одноразового кластера - что я настоятельно рекомендую, но может быть невозможно по ряду причин)
  5. присоединитесь к новому, теперь уже исправному одноразовому кластеру etcd
  6. теперь вы можете либо вернуть других мастеров обратно в онлайн, присоединив их к этому новому кластеру, пока у вас не появится новый кворум, и снести одноразовый кластер, либо вы можете пройти по одноразовым участникам etcd, удаляя их из кластера по одному пока только master1 остается в вашем «кластере из одного»

у меня было здорово успех с использованием etcdadm чтобы автоматизировать все эти шаги, которые я только что описал, но плохая новость в том, что вам нужно создать etcdadm двоичны сами, потому что они не прикрепляют встроенные артефакты к своим релизам - в этом сообщении

В будущем вы захотите включить etcdctl member remove $my_own_member_id от любого упорядоченного главного процесса удаления, поскольку если член просто исчезает из кластера etcd, это почти фатально для кластера. Там есть проблема с etcd Говоря о том, что etcd действительно хрупок, и вам нужна большая команда, управляющая им, чем сам kubernetes :-(

Принимая во внимание мои выводы и тесты, Чтобы восстановить полную функциональность вашего кластера k8s, сделайте оставшийся узел etcd автономным кластером etcd. Следуйте инструкциям ниже

Поскольку мы потеряли два главных узла из трех, и теперь модуль etcd на оставшемся узле не может завершить кворум, поэтому этот статический модуль постоянно выходит из строя и завершается, и вы не можете этого сделать. etcdctl member remove <node>

Остановите модуль etcd:

  • mv /etc/kubernetes/manifest/etcd.yaml /backup
  • mv /var/lib/etcd/member /backup/

Временно принудительно создайте новый кластер на хосте etcd:

  • cp /backup/etcd.yaml etcd.yaml.bak
  • редактировать /backup/etcd.yaml и измените следующие значения

etcd.yaml

Remove lost nodes(master2 and master3) from initial cluster
- --initial-cluster=master1=https://10.11.158.114:2380

Remove following line
- --initial-cluster-state=existing

Add Following line
- --force-new-cluster

Перезагрузите модуль etcd:

 cp /backup/etcd.yaml /etc/kubernetes/manifest/

Удалить --force-new-cluster команда от /etc/kubernetes/manifest/etcd.yaml как это будет заставлять каждый раз.

Восстановить в исходное состояние (если возможно)

если master2 и master3 не вышли из строя и не были потеряны по другой причине (средний диск и данные доступны), то, как только эти мастера станут доступны, вы можете выполнить следующие шаги, чтобы вернуться в исходное состояние

cd /etc/kubernetes/manifest
rm -rf etcd.yaml
cd /var/lib/etcd
rm -rf member
cp -R /backup/member /var/lib/etcd/
cp /backup/etcd.yaml /etc/kubernetes/manifest/

У меня все работает так, пожалуйста, подскажите, могу ли я оптимизировать эти шаги.