Skip to content

dcardellino24/flux-multi-cluster

Repository files navigation

Multi-Cluster Kubernetes Operations Repository

... managed with Flux, Renovate, and GitHub Actions 🤖


📖 Overview

This is a mono repository for Hulk AG infrastructure and Kubernetes cluster. We try to adhere to Infrastructure as Code (IaC) and GitOps practices using tools like Terraform, Kubernetes, Flux, Renovate, and GitHub Actions.


⛵ Kubernetes

Repository Structure

Flux watches any folder in clusters (see Directories below) and makes the changes to the clusters based on the YAML manifests. This approach causes a bit more overhead in duplicate code, but we are deploying cluster-based services/applications and can use separate secrets between those.

.
├── applications
│   ├── base
│   │   ├── echo-server
│   │   │   ├── helmrelease.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── namespace.yaml
│   │   ├── external-secrets
│   │   │   ├── helmrelease.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── namespace.yaml
│   │   ├── monitoring
│   │   │   ├── helmrelease.yaml
│   │   │   ├── kustomization.yaml
│   │   │   └── namespace.yaml
│   │   └── podinfo
│   │       ├── helmrelease.yaml
│   │       ├── kustomization.yaml
│   │       └── namespace.yaml
│   ├── infra-kind-dev
│   │   ├── echo-server
│   │   │   └── kustomization.yaml
│   │   ├── external-secrets
│   │   │   ├── kustomization.yaml
│   │   │   └── secret_store.yaml
│   │   ├── monitoring
│   │   │   ├── kube-prometheus-stack.values.yaml
│   │   │   └── kustomization.yaml
│   │   ├── podinfo
│   │   │   ├── kustomization.yaml
│   │   │   └── podinfo.values.yaml
│   │   └── kustomization.yaml
│   └── infra-kind-staging
│       ├── kustomization.yaml
│       └── podinfo.values.yaml
├── clusters                                            # Entrypoint for Kubernetes Clusters
│   ├── infra-kind-dev                                  # Entrypoint for infra-kind-dev
│   │   ├── flux-system                                 # Main Flux Configuration for infra-kind-dev
│   │   │   ├── gotk-components.yaml
│   │   │   ├── gotk-sync.yaml
│   │   │   └── kustomization.yaml
│   │   ├── applications.yaml                           # Kustomization for Applications that are deployed in infra-kind-dev
│   │   ├── cluster-vars.yaml                           # General cluster variables (ConfigMap)
│   │   └── infrastructure.yaml                         # Kustomization for Infrastructure, Components that are needed for cluster functionality
│   └── infra-kind-staging
│       ├── flux-system
│       │   ├── gotk-components.yaml
│       │   ├── gotk-sync.yaml
│       │   └── kustomization.yaml
│       └── applications.yaml
├── infrastructure                                      # Entrypoint for Infrastructure kustomization
│   ├── base                                            # Configuration that do not differentiate between clusters
│   │   └── cert-manager                                # Namespace-Based split
│   │       ├── helmrelease.yaml
│   │       ├── kustomization.yaml
│   │       └── namespace.yaml
│   ├── infra-kind-dev                                  # Entrypoint for infra-kind-dev
│   │   └── cert-manager
│   │       ├── clusterissuer.yaml
│   │       ├── kustomization.yaml
│   │       └── secret.sops.yaml
│   └── infra-kind-staging                              # Entrypoint for infra-kind-dev
└── README.md

Infrastructure/Core Components

The Infrastructure kustomization defines a set of applications, which are responsible for the cluster functionality. These components are the same on each GKE cluster.

  • autoneg-controller: This GKE controller provides simple custom integration between GKE and GCLB.
  • contour: Contour is an open source Kubernetes ingress controller providing the control plane for the Envoy edge and service proxy.​
  • descheduler: Descheduler for Kubernetes
  • external-dns

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published