feat(fluxcd): introduce multi-layer infrastructure setup with kustomize and CRD dependency handling in aero environment

This commit is contained in:
emelinda 2026-08-03 16:02:35 +03:00
parent 037d069c85
commit b28e5dd27a
8 changed files with 101 additions and 4 deletions

View File

@ -0,0 +1,8 @@
# Слой 2: ресурсы, которым нужны CRD из слоя controllers.
# Применяется только после того, как infra-controllers дошёл до Ready
# (dependsOn в clusters/aero/infrastructure.yaml).
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
# Внутренний удостоверяющий центр контура: selfsigned → корневой CA → издатель.
- ../../../infrastructure/cert-manager/aero/configs

View File

@ -0,0 +1,18 @@
# Слой 1: чарты инфраструктуры. Только HelmRelease и Namespace — никаких
# ресурсов, чьи CRD ставятся этими же чартами (см. clusters/aero/infrastructure.yaml).
#
# Порядок внутри слоя обеспечивают dependsOn в самих HelmRelease:
# istiod и ingressgateway ждут istio-base, istio-config ждёт всех троих.
#
# local-path-provisioner намеренно НЕ подключён: в k3s он встроен и уже
# обслуживает StorageClass local-path (по умолчанию). Чарт из репозитория
# создал бы второй провижинер с тем же именем класса.
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../../infrastructure/cert-manager/aero
- ../../../infrastructure/istio-base/aero
- ../../../infrastructure/istio-pilot/aero
- ../../../infrastructure/istio-gateway/aero
- ../../../infrastructure/istio-config/aero
- ../../../infrastructure/dashboard/aero

View File

@ -0,0 +1,41 @@
# Инфраструктура разделена на два слоя, и это не косметика.
#
# Flux делает dry-run всей Kustomization целиком перед применением. Если
# положить cert-manager (который СТАВИТ CRD) и ClusterIssuer/Certificate
# (которые ЭТИ CRD используют) в один слой, dry-run падает с
# no matches for kind "Certificate" in version "cert-manager.io/v1"
# и не применяется НИЧЕГО — включая сам cert-manager. Дедлок: CRD никогда не
# появятся, потому что слой не может пройти проверку.
#
# Поэтому: controllers ставят чарты (и CRD), configs применяются после них
# через dependsOn и содержат только пользовательские ресурсы.
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: infra-controllers
namespace: flux-system
spec:
interval: 10m0s
path: ./clusters/aero/controllers
prune: true
wait: true
timeout: 10m0s
sourceRef:
kind: GitRepository
name: flux-system
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: infra-configs
namespace: flux-system
spec:
interval: 10m0s
path: ./clusters/aero/configs
prune: true
dependsOn:
- name: infra-controllers
sourceRef:
kind: GitRepository
name: flux-system

View File

@ -0,0 +1,7 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./flux-system
- ./helm-repositories.yaml
# Два слоя инфраструктуры с dependsOn — см. комментарий внутри файла.
- ./infrastructure.yaml

View File

@ -0,0 +1,7 @@
# Пользовательские ресурсы cert-manager: применяются слоем infra-configs,
# после того как чарт из слоя infra-controllers поставил CRD.
---
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- clusterissuer-ca.yaml

View File

@ -3,11 +3,14 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../base
# Внутренний CA вместо ACME: контур закрытый, до Let's Encrypt не достучаться.
- clusterissuer-ca.yaml
# ACME-издатели из base выключены удалением, а не форком base: так overlay
# остаётся патчем и не расходится с остальными кластерами при обновлении base.
# Здесь только чарт и namespace. Корневой CA (clusterissuer-ca.yaml) лежит
# рядом, но подключается СЛОЕМ ВЫШЕ — из clusters/aero/configs: его ресурсы
# требуют CRD, которые ставит этот же чарт.
#
# ACME-издатели из base выключены удалением, а не форком base: overlay
# остаётся патчем и не расходится при обновлении base. Плюс без этого они
# ломали бы dry-run слоя controllers — их CRD тоже ещё не существует.
patches:
- target:
kind: ClusterIssuer

View File

@ -6,6 +6,19 @@ metadata:
spec:
interval: 5m
timeout: 10m
# Список продублирован из base целиком: для CRD kustomize заменяет списки,
# а не сливает, поэтому частичный патч потерял бы зависимости от istio.
# cert-manager добавлен сверх base — чарт istio-config рендерит Certificate,
# и без готовых CRD установка падает.
dependsOn:
- name: istio-base
namespace: istio-system
- name: istiod
namespace: istio-system
- name: ingressgateway
namespace: istio-system
- name: cert-manager
namespace: cert-manager
values:
global:
env: aero