У меня есть три узла multi-master kubernetes (1.17.3) кластера (стековая плоскость управления и узлы etcd),
11.11.11.1 - master1
11.11.11.2 - master2
11.11.11.3 - master3
Поэтому перед тем, как пойти в производство, я пробую возможные сбои и сделал следующие шаги
Изящное удаление главных узлов
Run kubectl drain 11.11.11.3
на master3kubeadm reset
на мастер 3kubectl delete node 11.11.11.3
на master3Таким образом, применяя вышеуказанные шаги, все модули работают на мастерах 1 и 2, он удаляет записи из kubeadm-conf
configmap, а также из etcd
, на самом деле я выполняю вышеуказанные шаги на master2, и все еще один мастер работает, и я могу запустить kubectl
.
Непредвиденное удаление главных узлов
kubectl
и делаю администрации.kubectl
и его высказывание apiserver недоступно. Как я могу восстановить master1 в этой ситуации?Это может случиться, что у двух узлов могут быть проблемы с оборудованием в производстве, из моего поиска это похоже на проблему с etcd, но как я могу получить доступ к etcd и удалить master2 и master3, я подумал сделать docker ps
и docker exec <etcd container>
но docker ps не показывает контейнер etcd.
Тема близкий и дорогой в моем сердце.
Краткая версия:
master1
член etcdrm -rf /var/lib/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/
У меня все работает так, пожалуйста, подскажите, могу ли я оптимизировать эти шаги.