Files
K3S/uninstall.yml
Sergey Antropoff 24846d2e52 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 под все новые команды
2026-04-23 06:32:14 +03:00

102 lines
2.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# Полное удаление всего стека
# Порядок: обратный установке
# Запуск: ansible-playbook uninstall.yml
- name: Confirm uninstall
hosts: localhost
gather_facts: false
tasks:
- name: Ask for confirmation
ansible.builtin.pause:
prompt: |
⚠️ ВНИМАНИЕ! Будут удалены: ingress-nginx, CSI NFS, kube-vip, K3S и ВСЕ данные.
Введите 'yes' для подтверждения
register: confirm
when: confirm_uninstall is not defined
- name: Abort if not confirmed
ansible.builtin.fail:
msg: "Отменено."
when:
- confirm_uninstall is not defined
- confirm.user_input != 'yes'
- name: Remove ingress-nginx
hosts: k3s_master
gather_facts: false
become: true
tags: [ingress_nginx]
tasks:
- name: Uninstall ingress-nginx Helm release
ansible.builtin.command: >
helm uninstall ingress-nginx -n ingress-nginx
failed_when: false
changed_when: true
environment:
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
- name: Delete ingress-nginx namespace
ansible.builtin.command: k3s kubectl delete namespace ingress-nginx --ignore-not-found
changed_when: true
- name: Remove CSI NFS Driver
hosts: k3s_master
gather_facts: false
become: true
tags: [csi_nfs]
tasks:
- name: Uninstall CSI NFS Helm release
ansible.builtin.command: >
helm uninstall csi-driver-nfs -n kube-system
failed_when: false
changed_when: true
environment:
KUBECONFIG: "{{ k3s_kubeconfig_path }}"
- name: Delete NFS StorageClass
ansible.builtin.command: >
k3s kubectl delete storageclass nfs-client --ignore-not-found
changed_when: true
- name: Remove kube-vip
hosts: k3s_master
gather_facts: false
become: true
tags: [kube_vip]
tasks:
- name: Remove kube-vip manifests
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- "{{ k3s_data_dir }}/server/manifests/kube-vip.yaml"
- "{{ k3s_data_dir }}/server/manifests/kube-vip-rbac.yaml"
- name: Uninstall K3S workers
hosts: k3s_workers
gather_facts: true
become: true
tags: [k3s]
tasks:
- ansible.builtin.include_role:
name: k3s
tasks_from: uninstall
- name: Uninstall K3S master
hosts: k3s_master
gather_facts: true
become: true
tags: [k3s]
tasks:
- ansible.builtin.include_role:
name: k3s
tasks_from: uninstall
- name: Done
hosts: localhost
gather_facts: false
tasks:
- ansible.builtin.debug:
msg: "✓ Весь стек удалён."