Роль mdadm: - автоопределение RAID массива через mdadm --detail --scan - монтирование в /storage через fstab (UUID-based, nofail) - автоопределение fstype через blkid - обновление mdadm.conf + initramfs - флаг mdadm_enabled для отключения на отдельных нодах Роль k8s-user: - создание пользователя k8s + группа + sudo без пароля (visudo validation) - генерация RSA 4096 ключевой пары на первом мастере (идемпотентно, creates:) - раскладка приватного и публичного ключа на все ноды кластера - добавление public key в authorized_keys — SSH с любой ноды на любую - обновление /etc/hosts блоками через blockinfile (k3s_cluster + lab_hosts) - поддержка lab_hosts: создание пользователя и деплой ключей через пароль из vault Плейбуки: - k8s-user.yml — полная оркестрация (5 plays: create → generate → distribute → hosts → lab) - mdadm.yml — запуск роли mdadm на k3s_cluster Инфраструктура: - inventory: добавлена группа [lab_hosts] с примерами - host_vars/nas01/vault.yml.example — шаблон credentials для лаб-серверов - group_vars/all/main.yml: переменные mdadm_enabled и k8s_service_user_* - Makefile: цели k8s-user и mdadm - docker/entrypoint.sh: команды k8s-user и mdadm
74 lines
3.7 KiB
YAML
74 lines
3.7 KiB
YAML
---
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
# k8s-user: создание сервисного пользователя k8s на всех серверах
|
||
#
|
||
# Последовательность:
|
||
# 1. Создать пользователя k8s + sudo на всех нодах кластера
|
||
# 2. Сгенерировать RSA 4096 ключевую пару на первом мастере (один раз)
|
||
# 3. Разложить ключи на все ноды кластера (SSH в любую сторону)
|
||
# 4. Обновить /etc/hosts на нодах кластера
|
||
# 5. То же самое для lab_hosts (через пароль из vault)
|
||
#
|
||
# Запуск: ansible-playbook k8s-user.yml --ask-vault-pass
|
||
# Только кластер: ansible-playbook k8s-user.yml --limit k3s_cluster
|
||
# ─────────────────────────────────────────────────────────────────────────────
|
||
|
||
# ── 1. Создать пользователя k8s на всех нодах кластера ───────────────────────
|
||
- name: Create k8s service user on cluster nodes
|
||
hosts: k3s_cluster
|
||
gather_facts: true
|
||
become: true
|
||
roles:
|
||
- role: k8s-user
|
||
|
||
# ── 2. Сгенерировать ключевую пару на первом мастере ─────────────────────────
|
||
- name: Generate k8s SSH key pair (first master only)
|
||
hosts: "{{ groups['k3s_master'][0] }}"
|
||
gather_facts: false
|
||
become: true
|
||
tasks:
|
||
- name: Generate RSA key pair and store facts
|
||
ansible.builtin.include_tasks: roles/k8s-user/tasks/generate_keys.yml
|
||
|
||
# ── 3. Разложить ключи на все ноды кластера ──────────────────────────────────
|
||
- name: Distribute k8s SSH keys to all cluster nodes
|
||
hosts: k3s_cluster
|
||
gather_facts: false
|
||
become: true
|
||
tasks:
|
||
- name: Deploy keys to node
|
||
ansible.builtin.include_tasks: roles/k8s-user/tasks/distribute_keys.yml
|
||
|
||
# ── 4. Обновить /etc/hosts на нодах кластера ─────────────────────────────────
|
||
- name: Update /etc/hosts on cluster nodes
|
||
hosts: k3s_cluster
|
||
gather_facts: false
|
||
become: true
|
||
tasks:
|
||
- name: Update hosts file
|
||
ansible.builtin.include_tasks: roles/k8s-user/tasks/update_hosts.yml
|
||
|
||
# ── 5. Bootstrap lab_hosts: создать пользователя, разложить ключи, обновить hosts
|
||
# Подключение через логин/пароль из host_vars/<host>/vault.yml
|
||
- name: Setup k8s user on lab hosts
|
||
hosts: lab_hosts
|
||
gather_facts: true
|
||
become: true
|
||
vars:
|
||
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 PasswordAuthentication=yes
|
||
-o PubkeyAuthentication=no
|
||
tasks:
|
||
- name: Create k8s user on lab host
|
||
ansible.builtin.include_tasks: roles/k8s-user/tasks/create_user.yml
|
||
|
||
- name: Distribute k8s SSH keys to lab host
|
||
ansible.builtin.include_tasks: roles/k8s-user/tasks/distribute_keys.yml
|
||
|
||
- name: Update /etc/hosts on lab host
|
||
ansible.builtin.include_tasks: roles/k8s-user/tasks/update_hosts.yml
|