feat: аддоны через addons.yml, внешний etcd, управление etcd нодами
## Аддоны (group_vars/all/addons.yml)
- Создан group_vars/all/addons.yml — единое место для включения/отключения
аддонов (addon_ingress_nginx: true/false и т.д.) и их основных настроек
- Из group_vars/all/main.yml убраны все секции аддонов (NFS, CSI, ingress,
cert-manager, etcd backup, Istio, Prometheus) — остался только core кластер
- Создан playbooks/addons.yml — комбинированный плейбук с 10 плеями,
каждый с `when: addon_X | default(false) | bool`; запускает только включённые
- make install-full: core (site.yml) + аддоны по addons.yml
- make install-addons: только аддоны без переустановки core
- Убраны все *_enabled флаги из аддонов (cert_manager_enabled, istio_enabled,
prometheus_stack_enabled и др.) — аддон ставится явным вызовом
- kube-vip: убран skip guard и kube_vip_enabled флаг (core, всегда ставится)
- TLS defaults в argocd/longhorn/kubernetes-dashboard: убрана зависимость
от cert_manager_enabled, теперь просто false (задаётся явно)
- Kiali: убрана зависимость от prometheus_stack_enabled, добавлены переменные
kiali_prometheus_enabled/url и kiali_grafana_enabled/url
## Внешний etcd кластер
- Новая переменная k3s_etcd_type: embedded|external в main.yml
- inventory/hosts.ini: добавлена группа [etcd_nodes] — любые серверы,
не обязательно мастера
- roles/etcd/: полная роль для установки внешнего etcd кластера:
- install.yml — скачивает бинарник, создаёт пользователя и директории
- pki.yml — генерирует CA + server/peer/client сертификаты через openssl
на Ansible-контроллере; раскладывает на etcd ноды и k3s мастера
- service.yml — разворачивает etcd.env и systemd сервис, проверяет здоровье
- etcd.env.j2 и etcd.service.j2 — шаблоны конфигурации
- etcd_pki_local_dir: persistent путь (<project>/etcd-pki/) вместо /tmp,
etcd-pki/ добавлен в .gitignore
- roles/k3s/templates/k3s-server-config.yaml.j2: при external режиме
подставляет datastore-endpoint со всеми etcd нодами + пути к клиентским
сертификатам; при embedded — прежняя логика cluster-init
- playbooks/site.yml: условный плей для etcd перед k3s (тег etcd)
- make install-etcd: отдельная команда для развёртывания etcd кластера
## Управление etcd нодами
- playbooks/add-etcd-node.yml: добавить ноду в работающий etcd кластер
(PKI генерация → install → etcdctl member add → start с state=existing → verify)
- playbooks/remove-etcd-node.yml: безопасно удалить ноду из etcd кластера
(проверка кворума → member remove → stop → clean up PKI)
- playbooks/add-node.yml: при k3s_etcd_type=external и наличии ноды в
[etcd_nodes] автоматически добавляет её в etcd кластер после k3s
- playbooks/remove-node.yml: при k3s_etcd_type=external сначала удаляет
ноду из etcd (member remove + stop), затем из k3s
- make add-etcd-node NODE=etcd04 / make remove-etcd-node NODE=etcd04
- Команды add-etcd-node / remove-etcd-node в docker/entrypoint.sh
This commit is contained in:
@@ -9,7 +9,7 @@ argocd_insecure: true
|
||||
argocd_ingress_enabled: false
|
||||
argocd_ingress_host: "argocd.example.com"
|
||||
argocd_ingress_class: "{{ ingress_nginx_class_name | default('nginx') }}"
|
||||
argocd_ingress_tls: "{{ cert_manager_enabled | default(false) | bool }}"
|
||||
argocd_ingress_tls: false
|
||||
argocd_ingress_cert_issuer: "{{ cert_manager_default_issuer_name | default('letsencrypt-prod') }}"
|
||||
|
||||
argocd_resources:
|
||||
|
||||
@@ -32,9 +32,18 @@ istio_gateway_resources:
|
||||
istio_telemetry_enabled: true
|
||||
|
||||
# ─── Kiali (Service Mesh UI) ──────────────────────────────────────────────────
|
||||
# Установка по желанию (истио должен быть включён)
|
||||
# Установка Kiali опционально вместе с Istio
|
||||
kiali_enabled: false
|
||||
|
||||
# Интеграция с Prometheus (если prometheus-stack addon установлен)
|
||||
# Установи kiali_prometheus_enabled: true и укажи URL Prometheus
|
||||
kiali_prometheus_enabled: false
|
||||
kiali_prometheus_url: "http://prometheus-operated.monitoring:9090"
|
||||
|
||||
# Интеграция с Grafana (если prometheus-stack addon установлен)
|
||||
kiali_grafana_enabled: false
|
||||
kiali_grafana_url: "http://kube-prometheus-stack-grafana.monitoring:80"
|
||||
|
||||
kiali_version: "1.86.0" # Helm chart version
|
||||
kiali_namespace: "{{ istio_namespace }}"
|
||||
kiali_chart_repo: "https://kiali.org/helm-charts"
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
gather_facts: false
|
||||
|
||||
vars:
|
||||
istio_enabled: true
|
||||
istio_version: "1.22.2"
|
||||
istio_namespace: "istio-system"
|
||||
istio_mtls_mode: "STRICT"
|
||||
@@ -42,13 +41,11 @@
|
||||
cpu: 200m
|
||||
memory: 256Mi
|
||||
|
||||
# Vars для kiali-values.yaml.j2 (интеграция с prometheus-stack)
|
||||
prometheus_stack_enabled: true
|
||||
prometheus_stack_release_name: "prom"
|
||||
prometheus_stack_namespace: "monitoring"
|
||||
prometheus_grafana_enabled: true
|
||||
grafana_admin_user: "admin"
|
||||
prometheus_grafana_admin_password: "molecule-test-pass"
|
||||
# Vars для kiali-values.yaml.j2 (интеграция с prometheus-stack addon)
|
||||
kiali_prometheus_enabled: true
|
||||
kiali_prometheus_url: "http://prometheus-operated.monitoring:9090"
|
||||
kiali_grafana_enabled: true
|
||||
kiali_grafana_url: "http://kube-prometheus-stack-grafana.monitoring:80"
|
||||
|
||||
tasks:
|
||||
- name: Render istiod Helm values
|
||||
|
||||
@@ -40,20 +40,12 @@ deployment:
|
||||
|
||||
external_services:
|
||||
prometheus:
|
||||
{% if prometheus_stack_enabled %}
|
||||
url: "http://{{ prometheus_stack_release_name }}-kube-prometheus-stack-prometheus.{{ prometheus_stack_namespace }}:9090"
|
||||
{% else %}
|
||||
url: "http://prometheus-operated.monitoring:9090"
|
||||
{% endif %}
|
||||
url: "{{ kiali_prometheus_url }}"
|
||||
|
||||
grafana:
|
||||
enabled: {{ prometheus_grafana_enabled | lower }}
|
||||
{% if prometheus_stack_enabled and prometheus_grafana_enabled %}
|
||||
url: "http://{{ prometheus_stack_release_name }}-grafana.{{ prometheus_stack_namespace }}:80"
|
||||
auth:
|
||||
username: "{{ grafana_admin_user }}"
|
||||
password: "{{ prometheus_grafana_admin_password }}"
|
||||
type: basic
|
||||
enabled: {{ kiali_grafana_enabled | lower }}
|
||||
{% if kiali_grafana_enabled %}
|
||||
url: "{{ kiali_grafana_url }}"
|
||||
{% endif %}
|
||||
|
||||
istio:
|
||||
|
||||
@@ -6,7 +6,7 @@ dashboard_chart_repo: "https://kubernetes.github.io/dashboard/"
|
||||
dashboard_ingress_enabled: false
|
||||
dashboard_ingress_host: "dashboard.example.com"
|
||||
dashboard_ingress_class: "{{ ingress_nginx_class_name | default('nginx') }}"
|
||||
dashboard_ingress_tls: "{{ cert_manager_enabled | default(false) | bool }}"
|
||||
dashboard_ingress_tls: false
|
||||
dashboard_ingress_cert_issuer: "{{ cert_manager_default_issuer_name | default('letsencrypt-prod') }}"
|
||||
|
||||
# Срок жизни сгенерированного токена admin-user (0 = бессрочно, форматы: 1h, 24h, 8760h)
|
||||
|
||||
@@ -13,7 +13,7 @@ longhorn_storage_class_default: false
|
||||
longhorn_ingress_enabled: false
|
||||
longhorn_ingress_host: "longhorn.example.com"
|
||||
longhorn_ingress_class: "{{ ingress_nginx_class_name | default('nginx') }}"
|
||||
longhorn_ingress_tls: "{{ cert_manager_enabled | default(false) | bool }}"
|
||||
longhorn_ingress_tls: false
|
||||
longhorn_ingress_cert_issuer: "{{ cert_manager_default_issuer_name | default('letsencrypt-prod') }}"
|
||||
|
||||
longhorn_resources:
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
gather_facts: false
|
||||
|
||||
vars:
|
||||
prometheus_stack_enabled: true
|
||||
prometheus_stack_namespace: "monitoring"
|
||||
prometheus_stack_release_name: "prom"
|
||||
prometheus_stack_chart_name: "kube-prometheus-stack"
|
||||
|
||||
Reference in New Issue
Block a user