Организация плейбуков: - все .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
57 lines
2.7 KiB
YAML
57 lines
2.7 KiB
YAML
---
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# 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
|