GitOps¶
Tenax 所需的一切都是声明式的,因此很适合放进 Flux 或 Argo CD 仓库:Chart 放在一处,存储和策略放在另一处,
每个 BackupTarget 则放在它所保护的数据库旁边。
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
Flux HelmRelease (excerpt)
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 }
提示:
- 用
kubectl create secret … --dry-run=client -o yaml | sops --encrypt生成 Secret,这样永远不会提交明文或占位符。 绝不要提交 age 私钥;请离线保存一份备份密钥。 - 把 Tenax 放在独立的 Flux Kustomization 中,置于应用所依赖的链之外,这样 Tenax 出问题时永远不会阻塞部署。
- 恢复通常从控制台或 CLI 创建,而不是从 git:它们是一次性操作。在 git 中声明一个恢复也是可以的。