Files
K3S/docs/operations.md
Sergey Antropoff eccc1c2a01 docs: полная документация проекта — docs/ и README.md для каждого аддона
- 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 уже существовали)
2026-04-26 00:22:06 +03:00

5.9 KiB
Raw Permalink Blame History

Операции с кластером

Управление нодами

Добавить ноду

  1. Добавь ноду в 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
  1. Добавить:
make add-node NODE=worker04

Новые ноды подключаются через VIP (kube_vip_address). После добавления нода появляется в кластере автоматически.

Удалить ноду

make remove-node NODE=worker04

Порядок:

  1. cordon — запретить новые поды
  2. drain — вытеснить поды (таймаут 180 сек)
  3. delete — удалить из Kubernetes API
  4. Запуск K3S uninstall на удалённом хосте
  5. Очистка директорий 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

Что происходит:

  1. K3S останавливается на всех нодах
  2. k3s server --cluster-reset --cluster-reset-restore-path=<snapshot> на первом мастере
  3. K3S запускается на первом мастере → ждёт API
  4. K3S запускается на остальных мастерах
  5. 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):

  1. Drain ноды → вытеснить поды
  2. Обновить K3S бинарник
  3. Перезапустить сервис
  4. Дождаться Ready
  5. Uncordon → восстановить планирование
  6. Перейти к следующей ноде

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"