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

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

Определение лидера etcd в кластере

Определение лидера "etcd" в кластере нужно сделать вначале, так как лидер должен быть дефрагментирован последним:

  1. получить список подов 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>
  1. обратиться к любому из подов (в качестве примера: 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.

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

Для дефрагментации участников "etcd" кластера необходимо выполнить следующие шаги:

  1. выполнить команду по дефрагментации БД:
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]
  1. в случае возникновения ошибки тайм-аута увеличивать значение до тех пор (--command-timeout), пока команда не выполнится успешно;
  2. убедиться, что размер БД уменьшился:
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.

  1. после дефрагментации БД рекомендуется подождать не менее одной минуты, чтобы модуль "etcd" мог восстановиться;
  2. повторить шаги данного пункта со следующими участниками "etcd" кластера.

Следует обратить внимание, что лидера необходимо дефрагментировать в последнюю очередь.

Проверка и очистка сработавших сигналов тревоги по сигналу 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