feat: список пользователей cluster_service_users + роль chrony для синхронизации времени

Список пользователей (cluster_service_users):
- заменяет отдельные k8s_service_user и devops_service_user переменные
- поддерживает неограниченное число пользователей — добавь строку в список
- каждый пользователь: name, comment, shell, sudo, key_type, key_bits, key_comment, ssh_dir
- playbooks/k8s-user.yml полностью переработан — все plays используют loop: cluster_service_users
- generate_keys/distribute_keys/create_user вызываются через include_role + vars
- .gitignore: keys/*_id_rsa (паттерн вместо перечисления конкретных имён)

Роль chrony — синхронизация времени:
- устанавливается ПЕРЕД k3s как обязательный компонент (добавлена в site.yml play 0)
- часовой пояс: chrony_timezone: "Europe/Moscow" (переопределяется в group_vars)
- NTP серверы: pool.ntp.org (настраиваемые через chrony_ntp_servers)
- community.general.timezone: идемпотентная установка TZ
- chronyc makestep: принудительная синхронизация при первом деплое
- устанавливается также на lab_hosts в playbooks/k8s-user.yml
- make chrony — отдельная цель для переустановки/смены TZ (make chrony TZ=UTC)
- команда chrony в entrypoint.sh
This commit is contained in:
Sergey Antropoff
2026-04-24 07:11:38 +03:00
parent 7c71b69333
commit c6f3c60434
10 changed files with 249 additions and 189 deletions

View File

@@ -195,32 +195,43 @@ etcd_backup_local_dir: "./etcd-backups"
# Отключить на конкретной ноде: задай mdadm_enabled: false в host_vars/<node>/main.yml
mdadm_enabled: false
# ─── k8s-user ─────────────────────────────────────────────────────────────────
# Сервисный пользователь k8s — создаётся на всех серверах (кластер + lab_hosts)
# RSA 4096 ключ генерируется один раз на первом мастере, затем раскладывается везде
k8s_service_user: k8s
k8s_service_user_shell: /bin/bash
k8s_service_user_comment: "K8S Service Account"
k8s_service_user_key_type: rsa
k8s_service_user_key_bits: 4096
k8s_service_user_key_comment: "k8s@cluster"
k8s_service_user_ssh_dir: ".ssh"
k8s_service_user_sudo: true
# ─── devops-user ──────────────────────────────────────────────────────────────
# Дополнительный пользователь для инженеров DevOps
# Создаётся на тех же серверах что и k8s, та же RSA 4096 схема с ключами
devops_service_user: devops
devops_service_user_shell: /bin/bash
devops_service_user_comment: "DevOps Engineer"
devops_service_user_key_comment: "devops@cluster"
devops_service_user_sudo: true
# ─── Сервисные пользователи ───────────────────────────────────────────────────
# Список пользователей, создаваемых на ВСЕХ серверах (кластер + lab_hosts).
# Для каждого: RSA 4096 ключевая пара, authorized_keys, sudo NOPASSWD.
# Добавь любое количество пользователей — всё остальное Ansible сделает сам.
#
# Обязательные поля: name
# Опциональные: comment, shell, sudo, key_type, key_bits, key_comment, ssh_dir
cluster_service_users:
- name: k8s
comment: "K8S Service Account"
key_comment: "k8s@cluster"
sudo: true
shell: /bin/bash
key_type: rsa
key_bits: 4096
- name: devops
comment: "DevOps Engineer"
key_comment: "devops@cluster"
sudo: true
shell: /bin/bash
key_type: rsa
key_bits: 4096
# Локальная директория для сохранения сгенерированных SSH ключей
# Сохраняется на машине запуска Ansible (./keys/ относительно корня проекта)
# Файлы: keys/k8s_id_rsa, keys/k8s_id_rsa.pub, keys/devops_id_rsa, keys/devops_id_rsa.pub
# Файлы: keys/<user>_id_rsa, keys/<user>_id_rsa.pub
k8s_local_keys_dir: "./keys"
# ─── Chrony — синхронизация времени ───────────────────────────────────────────
# Устанавливается на все ноды кластера и lab_hosts как обязательный компонент.
# Критично для корректной работы etcd, TLS и Kubernetes API.
chrony_timezone: "Europe/Moscow"
chrony_ntp_servers:
- 0.pool.ntp.org
- 1.pool.ntp.org
- 2.pool.ntp.org
- 3.pool.ntp.org
# ─── k3s-certs — автоматическая ротация сертификатов K3S ─────────────────────
# K3S выпускает сертификаты с фиксированным сроком жизни 1 год.
# Systemd таймер обеспечивает автоматическое обновление до истечения срока,