From 00d06c12bc13e2ea2c80cbd6cd3a55841e657594 Mon Sep 17 00:00:00 2001 From: riotpiaole <19826264+Riotpiaole@users.noreply.github.com> Date: Mon, 22 Jun 2026 12:22:38 -0700 Subject: [PATCH] feat: add ArgoCD app-of-apps manifests for homelab GitOps deployment Root application + project plus per-component Application CRs (Strimzi operator, Kafka cluster, Redis, queue CRD/operator, management-service). --- k8s/argocd/apps/00-strimzi-operator.yaml | 25 +++++++++++++ k8s/argocd/apps/01-kafka-cluster.yaml | 31 ++++++++++++++++ k8s/argocd/apps/02-redis.yaml | 43 ++++++++++++++++++++++ k8s/argocd/apps/03-queue-crd.yaml | 30 +++++++++++++++ k8s/argocd/apps/04-management-service.yaml | 37 +++++++++++++++++++ k8s/argocd/project.yaml | 23 ++++++++++++ k8s/argocd/root.yaml | 22 +++++++++++ 7 files changed, 211 insertions(+) create mode 100644 k8s/argocd/apps/00-strimzi-operator.yaml create mode 100644 k8s/argocd/apps/01-kafka-cluster.yaml create mode 100644 k8s/argocd/apps/02-redis.yaml create mode 100644 k8s/argocd/apps/03-queue-crd.yaml create mode 100644 k8s/argocd/apps/04-management-service.yaml create mode 100644 k8s/argocd/project.yaml create mode 100644 k8s/argocd/root.yaml diff --git a/k8s/argocd/apps/00-strimzi-operator.yaml b/k8s/argocd/apps/00-strimzi-operator.yaml new file mode 100644 index 0000000..48d92d5 --- /dev/null +++ b/k8s/argocd/apps/00-strimzi-operator.yaml @@ -0,0 +1,25 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: strimzi-operator + namespace: cicd + annotations: + argocd.argoproj.io/sync-wave: "0" +spec: + project: kmsvc + source: + repoURL: https://strimzi.io/charts/ + chart: strimzi-kafka-operator + targetRevision: 0.46.0 + helm: + values: | + watchNamespaces: ["sqs"] + destination: + server: https://kubernetes.default.svc + namespace: sqs + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true diff --git a/k8s/argocd/apps/01-kafka-cluster.yaml b/k8s/argocd/apps/01-kafka-cluster.yaml new file mode 100644 index 0000000..a27d542 --- /dev/null +++ b/k8s/argocd/apps/01-kafka-cluster.yaml @@ -0,0 +1,31 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: kafka-cluster + namespace: cicd + annotations: + argocd.argoproj.io/sync-wave: "1" +spec: + project: kmsvc + source: + repoURL: https://forgejo.riotpiao.homelab.com/rock/kafaka-management-service.git + targetRevision: main + path: k8s/charts/kafka-cluster + helm: + values: | + namespace: sqs + nodePool: + replicas: 3 + storage: + class: longhorn + sizeGi: 50 + resources: + memory: 5Gi + cpu: "2" + destination: + server: https://kubernetes.default.svc + namespace: sqs + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/k8s/argocd/apps/02-redis.yaml b/k8s/argocd/apps/02-redis.yaml new file mode 100644 index 0000000..e1076a3 --- /dev/null +++ b/k8s/argocd/apps/02-redis.yaml @@ -0,0 +1,43 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: kmsvc-redis + namespace: cicd + annotations: + argocd.argoproj.io/sync-wave: "1" +spec: + project: kmsvc + source: + repoURL: https://charts.bitnami.com/bitnami + chart: redis + targetRevision: 20.6.0 + helm: + values: | + architecture: standalone + # docker.io/bitnami stopped publishing version-pinned tags; bitnamilegacy + # mirrors them for free. allowInsecureImages silences the chart's + # container-image allowlist check, which doesn't know about that mirror. + global: + security: + allowInsecureImages: true + image: + repository: bitnamilegacy/redis + auth: + enabled: false + master: + persistence: + enabled: true + storageClass: longhorn + size: 2Gi + resources: + limits: + memory: 1Gi + requests: + memory: 1Gi + destination: + server: https://kubernetes.default.svc + namespace: sqs + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/k8s/argocd/apps/03-queue-crd.yaml b/k8s/argocd/apps/03-queue-crd.yaml new file mode 100644 index 0000000..495d309 --- /dev/null +++ b/k8s/argocd/apps/03-queue-crd.yaml @@ -0,0 +1,30 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: queue-crd + namespace: cicd + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + project: kmsvc + source: + repoURL: https://forgejo.riotpiao.homelab.com/rock/kafaka-management-service.git + targetRevision: main + path: k8s/charts/queue-crd + helm: + values: | + namespace: sqs + kafkaBrokers: "kmsvc-kafka-bootstrap.sqs.svc.cluster.local:9092" + redisAddr: "kmsvc-redis-master.sqs.svc.cluster.local:6379" + image: + repository: forgejo.riotpiao.homelab.com/rock/kafka-management-service-queue-operator + # CI (.forgejo/workflows/release.yaml) writes the released git tag + # here and pushes the commit -- ArgoCD picks it up on its next sync. + tag: latest + destination: + server: https://kubernetes.default.svc + namespace: sqs + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/k8s/argocd/apps/04-management-service.yaml b/k8s/argocd/apps/04-management-service.yaml new file mode 100644 index 0000000..3ffac2c --- /dev/null +++ b/k8s/argocd/apps/04-management-service.yaml @@ -0,0 +1,37 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: management-service + namespace: cicd + annotations: + argocd.argoproj.io/sync-wave: "2" +spec: + project: kmsvc + source: + repoURL: https://forgejo.riotpiao.homelab.com/rock/kafaka-management-service.git + targetRevision: main + path: k8s/charts/management-service + helm: + values: | + namespace: sqs + image: + repository: forgejo.riotpiao.homelab.com/rock/kafka-management-service + # CI (.forgejo/workflows/release.yaml) writes the released git tag + # here and pushes the commit -- ArgoCD picks it up on its next sync. + tag: latest + env: + kafkaBrokers: "kmsvc-kafka-bootstrap.sqs.svc.cluster.local:9092" + redisAddr: "kmsvc-redis-master.sqs.svc.cluster.local:6379" + authentikIssuerURL: "https://authentik.riotpiao.homelab.com/application/o/kafaka/" + authentikAudience: "QI0gPtR99ar8VvhK8Tqox4SDkTKzbNU7lbgwBNSc" + ingress: + enabled: true + host: kmsvc.homelab.internal + clusterIssuer: homelab-ca + destination: + server: https://kubernetes.default.svc + namespace: sqs + syncPolicy: + automated: + prune: true + selfHeal: true diff --git a/k8s/argocd/project.yaml b/k8s/argocd/project.yaml new file mode 100644 index 0000000..062b2d6 --- /dev/null +++ b/k8s/argocd/project.yaml @@ -0,0 +1,23 @@ +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + name: kmsvc + namespace: cicd +spec: + description: Kafka Management Service (design.md) -- Strimzi/Kafka, Redis, queue-operator, message-plane server + sourceRepos: + - https://forgejo.riotpiao.homelab.com/rock/kafaka-management-service.git + - https://strimzi.io/charts/ + - https://charts.bitnami.com/bitnami + destinations: + - namespace: sqs + server: https://kubernetes.default.svc + - namespace: cicd + server: https://kubernetes.default.svc + clusterResourceWhitelist: + - group: "apiextensions.k8s.io" + kind: CustomResourceDefinition + - group: "rbac.authorization.k8s.io" + kind: ClusterRole + - group: "rbac.authorization.k8s.io" + kind: ClusterRoleBinding diff --git a/k8s/argocd/root.yaml b/k8s/argocd/root.yaml new file mode 100644 index 0000000..240b1b0 --- /dev/null +++ b/k8s/argocd/root.yaml @@ -0,0 +1,22 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: kmsvc-root + namespace: cicd +spec: + project: kmsvc + source: + repoURL: https://forgejo.riotpiao.homelab.com/rock/kafaka-management-service.git + targetRevision: main + path: k8s/argocd/apps + directory: + recurse: false + destination: + server: https://kubernetes.default.svc + namespace: cicd + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true