Перейти к основному содержимому

5.1.5.1. Чек-лист диагностики etcd

Перед началом диагностики убедитесь, что переменная ETCDCTL_API=3 установлена и доступны TLS-сертификаты для подключения к кластеру.

Предварительные проверки

Здоровье кластера

etcdctl endpoint health \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key

Список участников кластера

etcdctl member list \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
-w table

Статус эндпоинтов

etcdctl endpoint status \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
-w table

Использование диска

etcdctl endpoint status \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
-w json | python3 -m json.tool | grep dbSize

Проверка алармов

etcdctl alarm list \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key

Типовые ошибки

connection refused

Симптомdial tcp 127.0.0.1:2379: connect: connection refused
ПричинаПроцесс etcd не запущен или слушает на другом адресе/порту.
РешениеПроверьте статус пода/сервиса etcd: crictl ps | grep etcd. Проверьте логи: crictl logs <container-id>. Убедитесь, что --listen-client-urls содержит нужный адрес.

certificate expired

Симптомcertificate has expired or is not yet valid
ПричинаСрок действия TLS-сертификата etcd истек.
РешениеПроверьте срок: openssl x509 -in /etc/kubernetes/pki/etcd/server.crt -noout -dates. Перевыпустите сертификаты и перезапустите etcd.

quorum lost

Симптомetcdserver: request timed out или rafthttp: failed to reach the peer
ПричинаБолее половины участников кластера недоступны — кворум потерян.
РешениеВосстановите доступность узлов. Если узел не восстанавливается — удалите его из кластера (etcdctl member remove) и добавьте заново. В критическом случае восстановите кластер из snapshot: etcdctl snapshot restore.

database size exceeded

Симптомmvcc: database space exceeded
ПричинаРазмер базы данных etcd превысил квоту (по умолчанию 2 GB).
Решение1. Выполните компактацию: etcdctl compact $(etcdctl endpoint status -w json | python3 -c "import sys,json; print(json.load(sys.stdin)[0]['Status']['header']['revision'])"). 2. Запустите дефрагментацию: etcdctl defrag. 3. Снимите аларм: etcdctl alarm disarm. 4. Рассмотрите увеличение квоты через --quota-backend-bytes.

too many learner members in cluster

Симптомetcdserver: too many learner members in cluster
ПричинаВ кластере etcd уже присутствует один или несколько узлов в состоянии learner. При добавлении нового control-plane kubeadm сначала добавляет etcd-узел как learner. etcd допускает ограниченное количество learner-узлов (обычно один), поэтому добавление нового узла завершается ошибкой.
РешениеПроверьте список участников кластера: etcdctl member list. Если обнаружен зависший learner, удалите его: etcdctl member remove <member-id>. После этого повторите процедуру kubeadm join. Если узел должен был стать voter, попробуйте выполнить etcdctl member promote <member-id>.

rpc not supported for learner

Симптомrpc error: code = Unavailable desc = etcdserver: rpc not supported for learner
ПричинаУзел etcd находится в состоянии learner и еще не синхронизирован с кластером. Некоторые операции недоступны для learner-узлов до их продвижения в voter.
РешениеПроверьте состояние узла: etcdctl member list. Убедитесь, что узел синхронизирован. После завершения репликации выполните etcdctl member promote <member-id> или повторите процедуру kubeadm join, чтобы kubeadm автоматически завершил процесс продвижения узла.