- README.md: перепиcан как компактный обзор (98 строк) с навигацией по docs/ - docs/: 13 файлов — getting-started, architecture, configuration, addons, storage, security, cicd, observability, networking, operations, make-reference, molecule-testing, troubleshooting - addons/*/README.md: 31 новый файл — описание, параметры, примеры кода для каждого из 34 аддонов (vault и external-secrets уже существовали)
5.9 KiB
5.9 KiB
Операции с кластером
Управление нодами
Добавить ноду
- Добавь ноду в
inventory/hosts.ini:
[k3s_master]
master01 ansible_host=192.168.1.10 ansible_user=ubuntu
worker01 ansible_host=192.168.1.11 ansible_user=ubuntu
rpi01 ansible_host=192.168.1.12 ansible_user=pi
[k3s_workers]
worker04 ansible_host=192.168.1.14 ansible_user=ubuntu
- Добавить:
make add-node NODE=worker04
Новые ноды подключаются через VIP (kube_vip_address). После добавления нода появляется в кластере автоматически.
Удалить ноду
make remove-node NODE=worker04
Порядок:
cordon— запретить новые подыdrain— вытеснить поды (таймаут 180 сек)delete— удалить из Kubernetes API- Запуск K3S uninstall на удалённом хосте
- Очистка директорий K3S
После удаления убери ноду из inventory/hosts.ini.
Ограничения:
- Нельзя удалить первый мастер (
groups['k3s_master'][0]) — точка инициализации кластера - При удалении мастера etcd-кворум уменьшается: 3→2 нод — рекомендуется добавить замену
etcd резервное копирование
etcd хранит всё состояние кластера. Снимки хранятся на {{ k3s_data_dir }}/server/db/snapshots.
Создать снимок
make etcd-backup
Создаёт снимок k3s-etcd-<timestamp>.db, удаляет старые сверх etcd_backup_retention (умолч. 5).
Копировать снимок на локальную машину:
etcd_backup_copy_to_local: true
etcd_backup_local_dir: "./etcd-backups"
Список снимков
make etcd-list-snapshots
Восстановление
make etcd-restore SNAPSHOT=k3s-etcd-20250101T120000.db
# Без подтверждения:
FORCE=true make etcd-restore SNAPSHOT=k3s-etcd-20250101T120000.db
Что происходит:
- K3S останавливается на всех нодах
k3s server --cluster-reset --cluster-reset-restore-path=<snapshot>на первом мастере- K3S запускается на первом мастере → ждёт API
- K3S запускается на остальных мастерах
- K3S-agent на воркерах
Параметры
| Переменная | Умолч. | Описание |
|---|---|---|
etcd_backup_dir |
{{ k3s_data_dir }}/server/db/snapshots |
Директория снимков |
etcd_backup_retention |
5 |
Количество хранимых снимков |
etcd_backup_copy_to_local |
false |
Копировать на Ansible-хост |
etcd_backup_local_dir |
./etcd-backups |
Локальная директория |
Обновление K3S
make upgrade VERSION=v1.30.0+k3s1
Обновление происходит по очереди (serial: 1 в upgrade.yml):
- Drain ноды → вытеснить поды
- Обновить K3S бинарник
- Перезапустить сервис
- Дождаться
Ready - Uncordon → восстановить планирование
- Перейти к следующей ноде
HA-режим гарантирует доступность кластера: пока одна нода обновляется, остальные обслуживают трафик.
Диагностика
make health # Статус сервисов, поды, диск, память
make verify # Nodes, pods, services, storageclass, ingress
# Открыть shell в ansible-контейнере:
make shell
Внутри контейнера:
ansible all -m shell -a "systemctl status k3s"
ansible k3s_master -m shell -a "k3s kubectl get nodes -o wide"
ansible k3s_master -m shell -a "k3s kubectl get pods -A | grep -v Running"
ansible k3s_master -m shell -a "k3s etcd-snapshot ls"
Локально с kubectl:
export KUBECONFIG=$(pwd)/kubeconfig
kubectl top nodes
kubectl top pods -A
kubectl get events -A --sort-by='.lastTimestamp' | tail -20
kubectl get nodes -o wide
kubectl get pods -A | grep -v Running
Проверка etcd
kubectl -n kube-system exec -it \
$(kubectl -n kube-system get pods -l component=etcd -o name | head -1) \
-- etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/var/lib/kubernetes/k3s/server/tls/etcd/server-ca.crt \
--cert=/var/lib/kubernetes/k3s/server/tls/etcd/server-client.crt \
--key=/var/lib/kubernetes/k3s/server/tls/etcd/server-client.key \
member list
Сброс и переустановка
# Удалить весь стек (с подтверждением)
make uninstall
# Переустановить базовый стек
make install
Ротация сертификатов K3S
Systemd-таймер автоматически проверяет срок истечения сертификатов:
k3s_cert_auto_rotate: true
k3s_cert_validity_years: 5
k3s_cert_rotate_before_days: 90
k3s_cert_check_schedule: "monthly"
Ручная ротация:
make shell
ansible k3s_master -m shell -a "k3s certificate rotate"
ansible k3s_master -m shell -a "systemctl restart k3s"
Ansible Vault операции
make vault-create # Создать новый vault файл
make vault-edit # Редактировать зашифрованные секреты
make vault-view # Просмотреть содержимое
# Зашифровать одну строку:
make vault-encrypt-string STR="my-secret" NAME="vault_my_secret"