Files
K3S/playbooks/bootstrap.yml
Sergey Antropoff 437d0cce34 refactor: перемещение плейбуков в playbooks/, ротация сертификатов, сохранение ключей локально
Организация плейбуков:
- все .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
2026-04-24 07:00:18 +03:00

57 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.

---
# ─────────────────────────────────────────────────────────────────────────────
# Bootstrap — первоначальная настройка нод
#
# Запускать ОДИН РАЗ перед make install.
# Подключается с начальными логином/паролем из vault (host_vars/<node>/vault.yml).
# Создаёт пользователя k3s_admin_user, раскладывает SSH ключ.
# После этого все playbook работают по ключу без пароля.
#
# Использование:
# make bootstrap
# make bootstrap NODE=master01 — только одна нода
#
# Требования vault (в host_vars/<node>/vault.yml для каждой ноды):
# bootstrap_user: ubuntu # начальный пользователь
# bootstrap_password: "секрет" # пароль SSH
# bootstrap_sudo_password: "секрет" # пароль sudo (часто тот же)
# ─────────────────────────────────────────────────────────────────────────────
- name: Bootstrap cluster nodes
hosts: "{{ node_to_bootstrap | default('k3s_cluster') }}"
gather_facts: false
serial: 1
vars:
# Подключаемся с первоначальными credentials из vault каждой ноды
ansible_user: "{{ bootstrap_user }}"
ansible_password: "{{ bootstrap_password }}"
ansible_become_password: "{{ bootstrap_sudo_password | default(bootstrap_password) }}"
ansible_ssh_common_args: >-
-o StrictHostKeyChecking=no
-o UserKnownHostsFile=/dev/null
-o PasswordAuthentication=yes
-o PubkeyAuthentication=no
pre_tasks:
- name: Validate bootstrap credentials are defined
ansible.builtin.assert:
that:
- bootstrap_user is defined
- bootstrap_user | length > 0
- bootstrap_password is defined
- bootstrap_password | length > 0
fail_msg: >
Для {{ inventory_hostname }} не заданы bootstrap credentials.
Создай host_vars/{{ inventory_hostname }}/vault.yml с полями:
bootstrap_user: ubuntu
bootstrap_password: "пароль"
Зашифруй файл: ansible-vault encrypt host_vars/{{ inventory_hostname }}/vault.yml
- name: Test initial SSH connection
ansible.builtin.ping:
register: ping_result
roles:
- role: bootstrap