Масштабирование кластера: добавление и удаление узлов
Как добавить узел в кластер Cozystack
Узел добавляется почти так же, как при обычной установке Cozystack.
Установите Talos на узел, используя кастомный образ Talos для Cozystack.
Сгенерируйте конфигурацию для нового узла по руководству Talm или talosctl.
Например, конфигурация узла control plane:
talm template -e 192.168.123.20 -n 192.168.123.20 -t templates/controlplane.yaml -i > nodes/nodeN.yamlа для worker-узла:
talm template -e 192.168.123.20 -n 192.168.123.20 -t templates/worker.yaml -i > nodes/nodeN.yamlПримените сгенерированную конфигурацию к узлу по руководству Talm или talosctl. Например:
talm apply -f nodes/nodeN.yaml -iДождитесь, пока узел перезагрузится и самостоятельно подключится к кластеру. Запускать bootstrap вручную или устанавливать на него Cozystack не нужно: все будет выполнено автоматически.
Результат можно проверить командой
kubectl get nodes.
Как удалить узел из кластера Cozystack
Когда узел кластера выходит из строя, Cozystack автоматически поддерживает отказоустойчивость, пересоздавая реплицированные PVC и workloads на других узлах. Однако иногда для устранения проблем узел нужно удалить:
PV локального хранилища могут остаться привязанными к отказавшему узлу, что вызывает проблемы с новыми pod. Такие ресурсы нужно очистить вручную.
Отказавший узел будет по-прежнему существовать в кластере, что может привести к несогласованности состояния кластера и повлиять на планирование pod.
Шаг 1: удалите узел из кластера
Выполните следующую команду, чтобы удалить отказавший узел. Замените mynode на фактическое имя узла:
kubectl delete node mynode
Если отказавший узел был узлом control plane, также удалите его etcd member из кластера etcd:
talm -f nodes/node1.yaml etcd member list
Пример вывода:
NODE ID HOSTNAME PEER URLS CLIENT URLS LEARNER
37.27.60.28 2ba6e48b8cf1a0c1 node1 https://192.168.100.11:2380 https://192.168.100.11:2379 false
37.27.60.28 b82e2194fb76ee42 node2 https://192.168.100.12:2380 https://192.168.100.12:2379 false
37.27.60.28 f24f4de3d01e5e88 node3 https://192.168.100.13:2380 https://192.168.100.13:2379 false
Затем удалите соответствующий member. Замените ID на ID отказавшего узла:
talm -f nodes/node1.yaml etcd remove-member f24f4de3d01e5e88
Шаг 2: удалите PVC и pod, привязанные к отказавшему узлу
Ниже несколько команд, которые помогут очистить отказавший узел:
Удалите PVC, привязанные к отказавшему узлу:
(Заменитеmynodeна имя отказавшего узла)kubectl get pv -o json | jq -r '.items[] | select(.spec.nodeAffinity.required.nodeSelectorTerms[0].matchExpressions[0].values[0] == "mynode").spec.claimRef | "kubectl delete pvc -n \(.namespace) \(.name)"' | sh -xУдалите pod, зависшие в состоянии
Pendingво всех namespaces:kubectl get pod -A | awk '/Pending/ {print "kubectl delete pod -n " $1 " " $2}' | sh -x
Шаг 3: проверьте состояние ресурсов
После очистки проверьте проблемы с ресурсами с помощью linstor advise:
# linstor advise resource
╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
┊ Resource ┊ Issue ┊ Possible fix ┊
╞═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡
┊ pvc-02b0c0a1-e0b6-4e98-9384-60ff24f3b3b6 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-02b0c0a1-e0b6-4e98-9384-60ff24f3b3b6 ┊
┊ pvc-06e3b406-23f0-4f10-8b03-84063c1b2a12 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-06e3b406-23f0-4f10-8b03-84063c1b2a12 ┊
┊ pvc-a0b8aeaf-076e-4bd9-93ed-c4db09c04d0b ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-a0b8aeaf-076e-4bd9-93ed-c4db09c04d0b ┊
┊ pvc-a523ebeb-c3b6-468d-abe5-f6afbbf31081 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-a523ebeb-c3b6-468d-abe5-f6afbbf31081 ┊
┊ pvc-cf7e87b5-3e6d-4034-903d-4625830fb5b4 ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-cf7e87b5-3e6d-4034-903d-4625830fb5b4 ┊
┊ pvc-d344bc83-97fd-4489-bbe7-5399eea57165 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-d344bc83-97fd-4489-bbe7-5399eea57165 ┊
┊ pvc-d39345a9-5446-4c64-a5ba-957ff7c7a31f ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-d39345a9-5446-4c64-a5ba-957ff7c7a31f ┊
┊ pvc-db6d4236-93bd-4268-9dcc-0ed275b17067 ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-db6d4236-93bd-4268-9dcc-0ed275b17067 ┊
┊ pvc-ebb412c3-083c-4eee-93dc-70917ea6d87e ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-ebb412c3-083c-4eee-93dc-70917ea6d87e ┊
┊ pvc-f107aacb-78d7-4ac6-97f8-8ed529a9c292 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-f107aacb-78d7-4ac6-97f8-8ed529a9c292 ┊
┊ pvc-f347d71a-b646-45e5-a717-f0a745061beb ┊ Resource expected to have 1 replicas, got only 0. ┊ linstor rd ap --place-count 1 pvc-f347d71a-b646-45e5-a717-f0a745061beb ┊
┊ pvc-f6e96c83-6144-4510-b0ab-61936db52391 ┊ Resource expected to have 3 replicas, got only 2. ┊ linstor rd ap --place-count 3 pvc-f6e96c83-6144-4510-b0ab-61936db52391 ┊
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
Run the linstor rd ap commands suggested in the “Possible fix” column to restore the desired replica count.