Aller au contenu

GitOps

Tout ce dont Tenax a besoin est déclaratif : il s'intègre donc à un dépôt Flux ou Argo CD, avec le chart à un endroit, les stores et les politiques à un autre, et chaque BackupTarget à côté de la base qu'il protège.

infrastructure/tenax/
  controllers/      # HelmRelease tenax (CRDs, controller, API, alerts, dashboard, policy presets)
  config/
    store.yaml      # BackupStore: bucket, region, age recipients
    secrets/        # SOPS-encrypted: S3 credentials, age identities, database users
apps/team-a/
  app-database.yaml
  app-backup.yaml   # BackupTarget, labelled org/project/env
HelmRelease Flux (extrait)
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata: { name: tenax, namespace: tenax-system }
spec:
  interval: 10m
  chart:
    spec:
      chart: tenax
      version: "1.2.3"
      sourceRef: { kind: HelmRepository, name: my-charts, namespace: flux-system }
  install: { crds: CreateReplace }
  upgrade: { crds: CreateReplace }
  values:
    image: { repository: registry.example.com/tenax/tenax, tag: v1.2.3 }
    targetNamespaces: [team-a]
    examplePolicies: { enabled: true, store: main }
    metrics:
      serviceMonitor: { enabled: true }
      prometheusRule: { enabled: true }
      grafanaDashboard: { enabled: true }

Conseils :

  • Générez les secrets avec kubectl create secret … --dry-run=client -o yaml | sops --encrypt, pour qu'aucun texte en clair ni aucune valeur fictive ne soit jamais commité. Ne commitez jamais les clés privées age ; gardez une copie hors ligne de la clé de sauvegarde.
  • Placez Tenax dans sa propre Kustomization Flux, hors de la chaîne dont dépendent vos applications, pour qu'un problème de Tenax ne bloque jamais un déploiement.
  • Les restaurations se créent généralement depuis la console ou la CLI, pas depuis git : ce sont des actions ponctuelles. En déclarer une dans git fonctionne aussi.