Эта проблема уже обсуждалась на вопросе Github - HA для миграции с одного мастера .
Для вас уже подготовлено решение .
С тех пор как etcd-manager был введен в kops 1.12, а main
и events
Кластеры etcd автоматически и регулярно выполняют резервное копирование в S3 (та же корзина для KOPS_STATE_STORE
).
Поэтому, если у вас кластер k8s более новой, чем версия 1.12, возможно, вам понадобятся следующие шаги:
- Удалить зоны etcd в кластере
$ kops edit cluster
В разделе etcdCluster
удалить etcdMembers
элементов, чтобы оставить только один instanceGroup
для main
и events
. например,
etcdClusters:
- etcdMembers:
- instanceGroup: master-ap-southeast-1a
name: a
name: main
- etcdMembers:
- instanceGroup: master-ap-southeast-1a
name: a
name: events
Применить изменения
$ kops update cluster --yes
$ kops rolling-update cluster --yes
Удалите 2 группы экземпляров мастера
$ kops delete ig master-xxxxxx-1b
$ kops delete ig master-xxxxxx-1c
Это действие не может быть отменено, и оно немедленно удалит 2 мастер-узла.
Теперь 2 из 3 вашего мастера узлы удаляются, службы k8s и т. д. могут быть недоступны, а служба kube-api будет недоступна. Это нормально, что ваши команды kops
и kubectl
больше не работают после этого шага.
Перезапустите кластер ectd с одним главным узлом.
Это сложная часть. s sh в оставшийся мастер-узел, затем
$ sudo systemctl stop protokube
$ sudo systemctl stop kubelet
Загрузите инструмент etcd-manager-ctl
. Если используется другая версия etcd-manager
, измените ссылку для загрузки соответственно
$ wget https://github.com/kopeio/etcd-manager/releases/download/3.0.20190930/etcd-manager-ctl-linux-amd64
$ mv etcd-manager-ctl-linux-amd64 etcd-manager-ctl
$ chmod +x etcd-manager-ctl
$ mv etcd-manager-ctl /usr/local/bin/
Восстановите резервные копии с S3. См. официальные документы
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/main list-backups
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/main restore-backup 2019-10-16T09:42:37Z-000001
# do the same for events
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/events list-backups
$ etcd-manager-ctl -backup-store=s3://<kops s3 bucket name>/<cluster name>/backups/etcd/events restore-backup 2019-10-16T09:42:37Z-000001
Это не запускает восстановление немедленно; вам нужно перезапустить etcd: убить связанные контейнеры и запустить kubelet
$ sudo systemctl start kubelet
$ sudo systemctl start protokube
Дождаться восстановления до конца sh, тогда kubectl get nodes
и kops validate cluster
должны работать. Если нет, вы можете просто прекратить работу экземпляра EC2 оставшегося главного узла в консоли AWS, новый главный узел будет создан группами автоматического масштабирования и кластер etcd будет восстановлен.