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
This commit is contained in:
Sergey Antropoff
2026-04-24 06:50:22 +03:00
parent 24846d2e52
commit 408779a379
15 changed files with 470 additions and 10 deletions

View File

@@ -47,7 +47,7 @@ DOCKER_RUN := docker run --rm -it \
$(IMAGE_NAME)
.PHONY: help setup build rebuild \
bootstrap \
bootstrap k8s-user mdadm \
install install-k3s install-cni install-kubevip install-nfs install-ingress \
install-cert-manager install-istio install-monitoring \
add-node remove-node \
@@ -194,6 +194,17 @@ vault-bootstrap-edit: _check_image ## Редактировать bootstrap vault
$(IMAGE_NAME) \
ansible vault edit host_vars/$(NODE)/vault.yml
k8s-user: _check_env _check_image ## Создать k8s пользователя + разложить SSH ключи на все ноды (cluster + lab_hosts)
@printf "$(CYAN)$(BOLD)Настройка k8s пользователя и SSH ключей...$(NC)\n"
@printf "$(YELLOW)Нужны: host_vars/<node>/vault.yml с bootstrap_user и bootstrap_password для lab_hosts$(NC)\n"
$(DOCKER_RUN) ansible-playbook k8s-user.yml \
$(if $(NODE),-e "node_to_limit=$(NODE)" --limit $(NODE),)
mdadm: _check_env _check_image ## Найти RAID массив и смонтировать в /storage (mdadm_enabled: true)
@printf "$(CYAN)Настройка mdadm RAID...$(NC)\n"
$(DOCKER_RUN) ansible-playbook mdadm.yml \
$(if $(NODE),--limit $(NODE),)
install: _check_env _check_image ## Развернуть полный стек (K3S + kube-vip + NFS + ingress)
@printf "$(CYAN)$(BOLD)Разворачиваю полный K3S стек...$(NC)\n"
$(DOCKER_RUN) install