Дефрагментация etcd
В случае переполнения "etcd" необходимо выполнить дефрагментацию. Это можно выполнить только из консоли.
Определение лидера etcd в кластере
Определение лидера "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.
Дефрагментация участников etcd кластера.
Для дефрагментации участников "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" кластера.
Следует обратить внимание, что лидера необходимо дефрагментировать в последнюю очередь.
Проверка и очистка сработавших сигналов тревоги по сигналу 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