Дефрагментация 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-31-145-112   1/1     Running   0          4h17m   10.31.145.112   10-31-145-112   <none>           <none>
etcd-10-31-145-144   1/1     Running   0          4h17m   10.31.145.144   10-31-145-144   <none>           <none>
etcd-10-31-145-97    1/1     Running   0          4h17m   10.31.145.97    10-31-145-97    <none>           <none>

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

kubectl -n kube-system exec -it etcd-10-31-145-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.31.145.144:2379 | 9b99fe49341767e1 |   3.5.9 |   84 MB |     false |      false |         2 |     182220 |             182220 |        |
|  https://10.31.145.97:2379 | c27fc518bba10abd |   3.5.9 |   84 MB |      true |      false |         2 |     182222 |             182222 |        |
| https://10.31.145.112:2379 | e6fa42dc23d4ac7d |   3.5.9 |   85 MB |     false |      false |         2 |     182222 |             182222 |        |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

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

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

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

kubectl -n kube-system exec -it etcd-10-31-145-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-31-145-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.31.145.144:2379 | 9b99fe49341767e1 |   3.5.9 |   84 MB |     false |      false |         2 |     198808 |             198808 |        |
|  https://10.31.145.97:2379 | c27fc518bba10abd |   3.5.9 |   84 MB |      true |      false |         2 |     198808 |             198808 |        |
| https://10.31.145.112:2379 | e6fa42dc23d4ac7d |   3.5.9 |   42 MB |     false |      false |         2 |     198808 |             198808 |        |
+----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

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

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

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

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

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

kubectl -n kube-system exec -it etcd-10-31-145-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-31-145-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