feat: крупное обновление стека — пути, bootstrap, etcd, cert-manager, custom errors, ноды
## Переименование путей (rancher → kubernetes)
- Все пути /var/lib/rancher/k3s → /var/lib/kubernetes/k3s
- Все пути /etc/rancher/k3s → /etc/kubernetes/k3s
- Добавлены переменные k3s_config_dir, k3s_data_dir, k3s_kubeconfig_path
- K3S install получил --data-dir и K3S_CONFIG_FILE флаги
- k3s-server-config.yaml.j2: добавлены write-kubeconfig и data-dir ключи
- Все роли (csi-nfs, ingress-nginx, cert-manager, prometheus, istio, cni)
переведены на {{ k3s_kubeconfig_path }} вместо хардкода
## Bootstrap (новое)
- bootstrap.yml — playbook для первоначальной настройки нод
- roles/bootstrap/ — создаёт пользователя ansible, настраивает sudoers,
деплоит SSH публичный ключ по паролю из vault
- host_vars/*/vault.yml.example — шаблоны с bootstrap_user/bootstrap_password
- make bootstrap, make vault-bootstrap-create NODE=..., make vault-bootstrap-edit NODE=...
## Добавление/удаление нод (новое)
- add-node.yml — добавляет мастер или воркер в существующий кластер через VIP
- remove-node.yml — cordon → drain → delete → uninstall → cleanup
- inventory/hosts.ini: добавлена группа [k3s_workers], обновлён [k3s_cluster:children]
- roles/k3s/tasks/main.yml: install_agent.yml для воркеров
## etcd backup/restore (новое)
- etcd-backup.yml / etcd-restore.yml — top-level playbooks
- roles/etcd/tasks/backup.yml — k3s etcd-snapshot save + retention cleanup
- roles/etcd/tasks/restore.yml — cluster-reset + перезапуск всех нод
- make etcd-backup, make etcd-restore SNAPSHOT=..., make etcd-list-snapshots
## cert-manager addon (новое)
- roles/cert-manager/ — установка через Helm + опциональный ClusterIssuer
- Поддержка: none | selfsigned | letsencrypt
- Шаблоны ClusterIssuer для selfsigned CA и ACME HTTP-01
- Управляется флагом cert_manager_enabled: false
## Custom error backend для ingress-nginx (новое)
- custom-error-page.html.j2 — тёмная Kubernetes-styled страница ошибок
- custom-error-backend.yaml.j2 — ConfigMap + Deployment (nginx) + Service
- nginx использует sub_filter для динамической подстановки X-Code/X-Message
- ingress-nginx Helm values: custom-http-errors, default-backend-service
- Управляется флагом ingress_nginx_custom_errors_enabled: true
## Hostname и пакеты (новое)
- prereqs.yml: установка hostname из inventory_hostname (пропускается в Molecule)
- prereqs.yml: установка k3s_common_packages (nfs-common, mc, htop, vim, wget, и др.)
- molecule_test: true в converge.yml исключает hostname из тестов
## Molecule improvements
- 3 платформы: master01 (Ubuntu 22.04) + worker01 (Ubuntu 22.04) + rpi01 (Debian 12)
- Molecule запускается из Docker контейнера через /var/run/docker.sock (DinD)
- Все пути в converge.yml и verify.yml обновлены под /etc/kubernetes/k3s
## Флаги включения компонентов
- kube_vip_enabled, nfs_server_enabled, csi_nfs_enabled, ingress_nginx_enabled
- cert_manager_enabled, istio_enabled, kiali_enabled, prometheus_stack_enabled
- Каждая роль пропускает установку через meta: end_play при disabled
## Документация
- README полностью переработан: все новые возможности с примерами
- Новые разделы: Управление нодами, etcd backup/restore, cert-manager, bootstrap
- Обновлены Makefile, docker/entrypoint.sh под все новые команды
This commit is contained in:
@@ -58,19 +58,26 @@ print_help() {
|
||||
echo " ANSIBLE_VERBOSITY — уровень verbose (0-4, default: 0)"
|
||||
echo ""
|
||||
echo -e "${BOLD}Доступные команды:${NC}"
|
||||
echo " bootstrap — создать пользователя + задеплоить SSH ключ"
|
||||
echo " install — полный стек (site.yml)"
|
||||
echo " install-k3s — только K3S"
|
||||
echo " install-kubevip — только kube-vip"
|
||||
echo " install-nfs — NFS + CSI"
|
||||
echo " install-ingress — ingress-nginx"
|
||||
echo " upgrade — обновить K3S (нужен VERSION=)"
|
||||
echo " uninstall — удалить весь стек"
|
||||
echo " health — диагностика"
|
||||
echo " verify — проверка стека"
|
||||
echo " ping — проверить SSH до всех нод"
|
||||
echo " shell — интерактивный bash"
|
||||
echo " ansible-playbook — прямой вызов ansible-playbook"
|
||||
echo " ansible — прямой вызов ansible"
|
||||
echo " install-ingress — ingress-nginx"
|
||||
echo " install-cert-manager — cert-manager + ClusterIssuer"
|
||||
echo " add-node <node> — добавить ноду (мастер или воркер)"
|
||||
echo " remove-node <node> — безопасно удалить ноду"
|
||||
echo " etcd-backup — создать снимок etcd"
|
||||
echo " etcd-restore <snap> — восстановить etcd"
|
||||
echo " etcd-list — список снимков etcd"
|
||||
echo " upgrade — обновить K3S (нужен VERSION=)"
|
||||
echo " uninstall — удалить весь стек"
|
||||
echo " health — диагностика"
|
||||
echo " verify — проверка стека"
|
||||
echo " ping — проверить SSH до всех нод"
|
||||
echo " shell — интерактивный bash"
|
||||
echo " ansible-playbook — прямой вызов ansible-playbook"
|
||||
echo " ansible — прямой вызов ansible"
|
||||
}
|
||||
|
||||
# ── Настройка SSH ─────────────────────────────────────────────────────────────
|
||||
@@ -191,6 +198,12 @@ shift || true
|
||||
|
||||
case "${COMMAND}" in
|
||||
|
||||
# ── Bootstrap ─────────────────────────────────────────────────────────────
|
||||
bootstrap)
|
||||
log "Bootstrap нод: создание пользователя + деплой SSH ключа..."
|
||||
exec ansible-playbook bootstrap.yml "$@"
|
||||
;;
|
||||
|
||||
# ── Основные команды ───────────────────────────────────────────────────────
|
||||
install)
|
||||
log "Разворачиваю полный K3S стек..."
|
||||
@@ -217,6 +230,48 @@ case "${COMMAND}" in
|
||||
run_playbook site.yml --tags ingress_nginx "$@"
|
||||
;;
|
||||
|
||||
install-cert-manager)
|
||||
log "Устанавливаю cert-manager..."
|
||||
run_playbook site.yml --tags cert_manager -e cert_manager_enabled=true "$@"
|
||||
;;
|
||||
|
||||
add-node)
|
||||
if [[ -z "${2:-}" ]]; then
|
||||
err "Укажи ноду: add-node <nodename>"
|
||||
exit 1
|
||||
fi
|
||||
log "Добавляю ноду ${2} в кластер..."
|
||||
exec ansible-playbook add-node.yml -e "node_to_add=${2}" "${@:3}"
|
||||
;;
|
||||
|
||||
remove-node)
|
||||
if [[ -z "${2:-}" ]]; then
|
||||
err "Укажи ноду: remove-node <nodename>"
|
||||
exit 1
|
||||
fi
|
||||
log "Удаляю ноду ${2} из кластера..."
|
||||
exec ansible-playbook remove-node.yml -e "node_to_remove=${2}" "${@:3}"
|
||||
;;
|
||||
|
||||
etcd-backup)
|
||||
log "Создаю снимок etcd..."
|
||||
exec ansible-playbook etcd-backup.yml "$@"
|
||||
;;
|
||||
|
||||
etcd-restore)
|
||||
if [[ -z "${2:-}" ]]; then
|
||||
err "Укажи снимок: etcd-restore <snapshot.db>"
|
||||
exit 1
|
||||
fi
|
||||
log "Восстанавливаю etcd из ${2}..."
|
||||
exec ansible-playbook etcd-restore.yml -e "etcd_restore_snapshot=${2}" "${@:3}"
|
||||
;;
|
||||
|
||||
etcd-list)
|
||||
log "Список снимков etcd..."
|
||||
exec ansible-playbook etcd-restore.yml --tags list "$@"
|
||||
;;
|
||||
|
||||
upgrade)
|
||||
if [[ -z "${VERSION:-}" ]]; then
|
||||
err "Нужна переменная VERSION. Пример: make upgrade VERSION=v1.30.0+k3s1"
|
||||
|
||||
Reference in New Issue
Block a user