Дефрагментация 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