Организация плейбуков: - все .yml плейбуки перенесены из корня в playbooks/ - Makefile и entrypoint.sh обновлены — все пути с playbooks/ префиксом - k8s-user.yml переработан: include_tasks → include_role (корректная работа из подкаталога) Сохранение ключей и kubeconfig локально: - k8s-user.yml: новый play сохраняет k8s SSH ключи в ./keys/ на машине запуска - переменная k8s_local_keys_dir: "./keys" (настраивается в group_vars) - .gitignore: keys/k8s_id_rsa исключён (публичный ключ можно коммитить) - kubeconfig уже сохранялся роль k3s (k3s_kubeconfig_local_path: "./kubeconfig") Автоматическая ротация сертификатов K3S (роль k3s-certs): - K3S выпускает сертификаты на 1 год (hardcoded), таймер обеспечивает их обновление - скрипт k3s-cert-check.sh: проверяет срок через openssl, ротирует при k3s_cert_rotate_before_days - systemd service + timer: запуск по расписанию k3s_cert_check_schedule (по умолчанию monthly) - RandomizedDelaySec: снижает нагрузку при одновременном запуске на нескольких нодах - переменные: k3s_cert_validity_years: 5, k3s_cert_rotate_before_days: 90 - добавлен в site.yml (тег certs) и отдельный плейбук playbooks/k3s-certs.yml - make k3s-certs и команда k3s-certs в entrypoint.sh
61 lines
2.1 KiB
YAML
61 lines
2.1 KiB
YAML
---
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# Восстановление etcd из снимка
|
||
# ВНИМАНИЕ: останавливает K3S на ВСЕХ нодах и восстанавливает данные!
|
||
#
|
||
# Запуск: make etcd-restore SNAPSHOT=k3s-etcd-20250101T120000.db
|
||
# make etcd-list-snapshots — посмотреть доступные снимки
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
- name: List available etcd snapshots
|
||
hosts: "{{ groups['k3s_master'][0] }}"
|
||
gather_facts: false
|
||
become: true
|
||
tags: [etcd, list]
|
||
tasks:
|
||
- name: List snapshots
|
||
ansible.builtin.command: k3s etcd-snapshot ls
|
||
register: snap_list
|
||
changed_when: false
|
||
- ansible.builtin.debug:
|
||
msg: "{{ snap_list.stdout_lines }}"
|
||
|
||
- name: Restore etcd snapshot
|
||
hosts: "{{ groups['k3s_master'][0] }}"
|
||
gather_facts: true
|
||
become: true
|
||
tags: [etcd, restore]
|
||
serial: 1
|
||
|
||
vars:
|
||
etcd_restore_snapshot: "{{ lookup('env', 'SNAPSHOT') }}"
|
||
etcd_restore_force: "{{ lookup('env', 'FORCE') | default(false, true) | bool }}"
|
||
|
||
tasks:
|
||
- name: Run etcd restore
|
||
ansible.builtin.include_tasks: roles/etcd/tasks/restore.yml
|
||
|
||
- name: Restart k3s on remaining master nodes
|
||
hosts: k3s_master
|
||
gather_facts: false
|
||
become: true
|
||
tags: [etcd, restore]
|
||
tasks:
|
||
- name: Start k3s (skip first master — already running)
|
||
ansible.builtin.systemd:
|
||
name: k3s
|
||
state: started
|
||
when: inventory_hostname != groups['k3s_master'][0]
|
||
failed_when: false
|
||
|
||
- name: Restart k3s-agent on worker nodes
|
||
hosts: k3s_workers
|
||
gather_facts: false
|
||
become: true
|
||
tags: [etcd, restore]
|
||
tasks:
|
||
- name: Start k3s-agent on workers
|
||
ansible.builtin.systemd:
|
||
name: k3s-agent
|
||
state: started
|
||
failed_when: false
|