refactor: перемещение плейбуков в playbooks/, ротация сертификатов, сохранение ключей локально
Организация плейбуков: - все .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
This commit is contained in:
35
Makefile
35
Makefile
@@ -47,7 +47,7 @@ DOCKER_RUN := docker run --rm -it \
|
||||
$(IMAGE_NAME)
|
||||
|
||||
.PHONY: help setup build rebuild \
|
||||
bootstrap k8s-user mdadm \
|
||||
bootstrap k8s-user mdadm k3s-certs \
|
||||
install install-k3s install-cni install-kubevip install-nfs install-ingress \
|
||||
install-cert-manager install-istio install-monitoring \
|
||||
add-node remove-node \
|
||||
@@ -145,11 +145,11 @@ ping: _check_env _check_image ## Проверить SSH доступность
|
||||
|
||||
check: _check_env _check_image ## Dry-run: проверить плейбук без изменений
|
||||
@printf "$(CYAN)Dry-run...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook site.yml --check --diff
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/site.yml --check --diff
|
||||
|
||||
lint: _check_image ## Проверить синтаксис всех плейбуков
|
||||
@printf "$(CYAN)Проверка синтаксиса...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook site.yml --syntax-check
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/site.yml --syntax-check
|
||||
@printf "$(GREEN)✓ Синтаксис корректен$(NC)\n"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
@@ -163,7 +163,7 @@ lint: _check_image ## Проверить синтаксис всех плейб
|
||||
bootstrap: _check_env _check_image ## Первый запуск: создать пользователя и задеплоить SSH ключ на все ноды
|
||||
@printf "$(CYAN)$(BOLD)Bootstrap нод (пользователь + SSH ключ)...$(NC)\n"
|
||||
@printf "$(YELLOW)Нужны: host_vars/<node>/vault.yml с bootstrap_user и bootstrap_password$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook bootstrap.yml \
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/bootstrap.yml \
|
||||
$(if $(NODE),-e "node_to_bootstrap=$(NODE)",)
|
||||
|
||||
vault-bootstrap-create: _check_image ## Создать vault с bootstrap credentials для ноды (NODE=master01)
|
||||
@@ -197,12 +197,17 @@ vault-bootstrap-edit: _check_image ## Редактировать bootstrap vault
|
||||
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 \
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/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 \
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/mdadm.yml \
|
||||
$(if $(NODE),--limit $(NODE),)
|
||||
|
||||
k3s-certs: _check_env _check_image ## Установить systemd таймер автоматической ротации сертификатов K3S
|
||||
@printf "$(CYAN)Настройка автоматической ротации сертификатов K3S...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/k3s-certs.yml \
|
||||
$(if $(NODE),--limit $(NODE),)
|
||||
|
||||
install: _check_env _check_image ## Развернуть полный стек (K3S + kube-vip + NFS + ingress)
|
||||
@@ -215,7 +220,7 @@ install-k3s: _check_env _check_image ## Установить только K3S к
|
||||
|
||||
install-cni: _check_env _check_image ## Установить CNI плагин (задай K3S_CNI=calico|cilium)
|
||||
@printf "$(CYAN)Устанавливаю CNI ($(or $(K3S_CNI),flannel))...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook site.yml --tags cni $(if $(K3S_CNI),-e k3s_cni=$(K3S_CNI),)
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/site.yml --tags cni $(if $(K3S_CNI),-e k3s_cni=$(K3S_CNI),)
|
||||
|
||||
install-kubevip: _check_env _check_image ## Установить только kube-vip
|
||||
@printf "$(CYAN)Устанавливаю kube-vip...$(NC)\n"
|
||||
@@ -231,15 +236,15 @@ install-ingress: _check_env _check_image ## Установить ingress-nginx
|
||||
|
||||
install-cert-manager: _check_env _check_image ## Установить cert-manager + ClusterIssuer
|
||||
@printf "$(CYAN)Устанавливаю cert-manager...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook site.yml --tags cert_manager -e cert_manager_enabled=true
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/site.yml --tags cert_manager -e cert_manager_enabled=true
|
||||
|
||||
install-istio: _check_env _check_image ## Установить Istio + Kiali (нужен istio_enabled: true в vars)
|
||||
@printf "$(CYAN)Устанавливаю Istio + Kiali...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook site.yml --tags istio -e istio_enabled=true
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/site.yml --tags istio -e istio_enabled=true
|
||||
|
||||
install-monitoring: _check_env _check_image ## Установить Prometheus + Grafana (нужен prometheus_stack_enabled: true)
|
||||
@printf "$(CYAN)Устанавливаю kube-prometheus-stack...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook site.yml --tags monitoring -e prometheus_stack_enabled=true
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/site.yml --tags monitoring -e prometheus_stack_enabled=true
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# МАСШТАБИРОВАНИЕ КЛАСТЕРА
|
||||
@@ -251,7 +256,7 @@ add-node: _check_env _check_image ## Добавить ноду: make add-node NO
|
||||
exit 1; \
|
||||
fi
|
||||
@printf "$(CYAN)Добавляю ноду $(NODE) в кластер...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook add-node.yml -e "node_to_add=$(NODE)"
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/add-node.yml -e "node_to_add=$(NODE)"
|
||||
|
||||
remove-node: _check_env _check_image ## Удалить ноду: make remove-node NODE=worker04
|
||||
@if [ -z "$(NODE)" ]; then \
|
||||
@@ -259,7 +264,7 @@ remove-node: _check_env _check_image ## Удалить ноду: make remove-nod
|
||||
exit 1; \
|
||||
fi
|
||||
@printf "$(RED)$(BOLD)Удаление ноды $(NODE) из кластера...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook remove-node.yml -e "node_to_remove=$(NODE)"
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/remove-node.yml -e "node_to_remove=$(NODE)"
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# РЕЗЕРВНОЕ КОПИРОВАНИЕ ETCD
|
||||
@@ -267,7 +272,7 @@ remove-node: _check_env _check_image ## Удалить ноду: make remove-nod
|
||||
|
||||
etcd-backup: _check_env _check_image ## Создать снимок etcd (make etcd-backup [SNAPSHOT=name] [ETCD_COPY=true])
|
||||
@printf "$(CYAN)Создаю снимок etcd...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook etcd-backup.yml \
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/etcd-backup.yml \
|
||||
$(if $(SNAPSHOT),-e etcd_backup_name=$(SNAPSHOT),) \
|
||||
$(if $(ETCD_COPY),-e etcd_backup_copy_to_local=$(ETCD_COPY),)
|
||||
|
||||
@@ -278,13 +283,13 @@ etcd-restore: _check_env _check_image ## Восстановить etcd: make etc
|
||||
exit 1; \
|
||||
fi
|
||||
@printf "$(RED)$(BOLD)ВНИМАНИЕ: восстановление etcd перезапишет данные кластера!$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook etcd-restore.yml \
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/etcd-restore.yml \
|
||||
-e "etcd_restore_snapshot=$(SNAPSHOT)" \
|
||||
$(if $(FORCE),-e etcd_restore_force=true,)
|
||||
|
||||
etcd-list-snapshots: _check_env _check_image ## Показать доступные снимки etcd
|
||||
@printf "$(CYAN)Список снимков etcd...$(NC)\n"
|
||||
$(DOCKER_RUN) ansible-playbook etcd-restore.yml --tags list
|
||||
$(DOCKER_RUN) ansible-playbook playbooks/etcd-restore.yml --tags list
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════════
|
||||
# ОБНОВЛЕНИЕ
|
||||
|
||||
Reference in New Issue
Block a user