feat(fluxcd): introduce multi-layer infrastructure setup with kustomize and CRD dependency handling in aero environment
This commit is contained in:
parent
037d069c85
commit
b28e5dd27a
8
clusters/aero/configs/kustomization.yaml
Normal file
8
clusters/aero/configs/kustomization.yaml
Normal 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
|
||||
18
clusters/aero/controllers/kustomization.yaml
Normal file
18
clusters/aero/controllers/kustomization.yaml
Normal 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
|
||||
41
clusters/aero/infrastructure.yaml
Normal file
41
clusters/aero/infrastructure.yaml
Normal 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
|
||||
7
clusters/aero/kustomization.yaml
Normal file
7
clusters/aero/kustomization.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- ./flux-system
|
||||
- ./helm-repositories.yaml
|
||||
# Два слоя инфраструктуры с dependsOn — см. комментарий внутри файла.
|
||||
- ./infrastructure.yaml
|
||||
@ -0,0 +1,7 @@
|
||||
# Пользовательские ресурсы cert-manager: применяются слоем infra-configs,
|
||||
# после того как чарт из слоя infra-controllers поставил CRD.
|
||||
---
|
||||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
resources:
|
||||
- clusterissuer-ca.yaml
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user