Files
K3S/k8s-user.yml
Sergey Antropoff 408779a379 feat: добавлены роли mdadm и k8s-user с полной оркестрацией SSH ключей
Роль 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
2026-04-24 06:50:22 +03:00

74 lines
3.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.

---
# ─────────────────────────────────────────────────────────────────────────────
# 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