Дефрагментация ETCD

В случае переполнения ETCD необходимо выполнить дефрагментацию. Это можно выполнить только из консоли.

1. Определение лидера ETCD в кластере

Это нужно сделать вначале, так как лидер должен быть дефрагментирован последним!

Сначала получите список подов ETCD.

Команда
kubectl -n kube-system get pod -l component=etcd -o wide
Пример вывода
NAME                 READY   STATUS    RESTARTS   AGE     IP              NODE            NOMINATED NODE   READINESS GATES
etcd-10-XX-XXX-112   1/1     Running   0          4h17m   10.XX.XXX.112   10-XX-XXX-112   <none>           <none>
etcd-10-XX-XXX-144   1/1     Running   0          4h17m   10.XX.XXX.144   10-XX-XXX-144   <none>           <none>
etcd-10-XX-XXX-97    1/1     Running   0          4h17m   10.XX.XXX.97    10-XX-XXX-97    <none>           <none>

Обратитесь к любому из подов (в качестве примера etcd-10-XX-XXX-112) для получения списка участников ETCD кластера.

Команда
kubectl -n kube-system exec -it etcd-10-XX-XXX-112 -- etcdctl \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  endpoint status --cluster -w table
Пример вывода
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.XX.XXX.144:2379 | 9b99fe49341767e1 |   3.5.9 |   84 MB |     false |      false |         2 |     182220 |             182220 |        |
|  https://10.XX.XXX.97:2379 | c27fc518bba10abd |   3.5.9 |   84 MB |      true |      false |         2 |     182222 |             182222 |        |
| https://10.XX.XXX.112:2379 | e6fa42dc23d4ac7d |   3.5.9 |   85 MB |     false |      false |         2 |     182222 |             182222 |        |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

Из данного вывода видно (IS LEADER=true) что в данный момент лидером является узел https://10.XX.XXX.97:2379

2. Дефрагментация участников ETCD кластера.

Выполните команду по дефрагментации БД.

Команда
kubectl -n kube-system exec -it etcd-10-XX-XXX-112 -- etcdctl \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --command-timeout=30s --endpoints=https://localhost:2379 defrag
Пример вывода
Finished defragmenting etcd member[https://localhost:2379]

В случае возникновения ошибки тайм-аута увеличивайте значение до тех пор, –command-timeout пока команда не выполнится успешно.

Убедитесь, что размер БД уменьшился.

Команда
kubectl -n kube-system exec -it etcd-10-XX-XXX-112 -- etcdctl \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  endpoint status --cluster -w table
Пример вывода
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.XX.XXX.144:2379 | 9b99fe49341767e1 |   3.5.9 |   84 MB |     false |      false |         2 |     198808 |             198808 |        |
|  https://10.XX.XXX.97:2379 | c27fc518bba10abd |   3.5.9 |   84 MB |      true |      false |         2 |     198808 |             198808 |        |
| https://10.XX.XXX.112:2379 | e6fa42dc23d4ac7d |   3.5.9 |   42 MB |     false |      false |         2 |     198808 |             198808 |        |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

Изначально БД на узле 10.XX.XXX.112 была 85 MB, а сейчас уменьшилась до 42 MB.

После дефрагментации БД рекомендуется подождать не менее одной минуты, чтобы модуль etcd мог восстановиться.

Повторите шаги данного пункта со следующими участниками ETCD кластера. Напоминаем, что лидера необходимо дефрагментировать в последнюю очередь!

3. Проверка и очистка сработавших сигналов тревоги по сигналу NOSPACE.

Проверьте, есть ли какие-либо NOSPACE сигналы тревоги.

Команда
kubectl -n kube-system exec -it etcd-10-XX-XXX-112 -- etcdctl \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  alarm list
Пример вывода
memberID:12345678912345678912 alarm:NOSPACE

Сбросьте сигналы тревоги.

Команда
kubectl -n kube-system exec -it etcd-10-XX-XXX-112 -- etcdctl \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  alarm disarm
×