{"id":23544355,"url":"https://github.com/sergelogvinov/gitops-examples","last_synced_at":"2025-11-01T08:30:31.950Z","repository":{"id":264943425,"uuid":"889497566","full_name":"sergelogvinov/gitops-examples","owner":"sergelogvinov","description":"Kubernetes GitOps","archived":false,"fork":false,"pushed_at":"2025-02-13T09:20:36.000Z","size":443,"stargazers_count":2,"open_issues_count":9,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-13T10:23:42.685Z","etag":null,"topics":["flux","gitops","hybrid-cloud","k8s-at-home","kubernetes","multi-cloud","talos-linux"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sergelogvinov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-16T13:35:50.000Z","updated_at":"2025-02-13T09:19:47.000Z","dependencies_parsed_at":"2025-01-16T10:25:12.781Z","dependency_job_id":"4d47986c-b9b9-4f6e-bee6-22e84e828fcd","html_url":"https://github.com/sergelogvinov/gitops-examples","commit_stats":null,"previous_names":["sergelogvinov/gitops-examples"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fgitops-examples","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fgitops-examples/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fgitops-examples/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergelogvinov%2Fgitops-examples/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sergelogvinov","download_url":"https://codeload.github.com/sergelogvinov/gitops-examples/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239269817,"owners_count":19610870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flux","gitops","hybrid-cloud","k8s-at-home","kubernetes","multi-cloud","talos-linux"],"created_at":"2024-12-26T07:14:58.778Z","updated_at":"2025-11-01T08:30:31.840Z","avatar_url":"https://github.com/sergelogvinov.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gitops examples\n\nKubernetes GitOps examples with FluxCD.\n\nAll components are designed to work in a hybrid cloud environment, which means they can run across different cloud providers or even between cloud and on-premises systems.\n\nThe [Talos](https://github.com/siderolabs/talos) uses as kubernetes distribution. Talos is well-suited for hybrid setups because it focuses on security and simplicity, making it easy to manage Kubernetes clusters.\n\nThe Talos Cloud Controller Manager ([Talos CCM](https://github.com/siderolabs/talos-cloud-controller-manager)) is responsible for setting labels on the nodes. These labels are very important because they help the system components know how to manage workloads. For example, some workloads require specific cloud platform to launch.\n\n## Key Features:\n\n* `Flexible Deployment`: The CCM, CSI, and NodeAutoScaler components can all be deployed together or separately. This gives you the flexibility to only use what you need.\n* `Multi Cloud Support`: You can combine components from different cloud providers in the same cluster. For example, you might use one provider for storage and another for scaling. This helps avoid being locked into a single provider.\n* `Hybrid Cloud Ready`: The setup works well across public cloud, private cloud, or on-premises environments, allowing seamless integration between them.\n* `Consistent Setup Across Environments`: No matter if your cluster is running in the public cloud, private cloud, or on-premises, the setup will remain consistent. This ensures easier management and smooth transitions between environments.\n\n## Cloud Platform Integrations\n\nMost of the CCMs was patched to work with hybrid environments. You can find the patches in my repo [containers](https://github.com/sergelogvinov/containers).\n\n\n## Components\n\nThis project is a collection of base addons for kubernetes.\n\nFluxCD components:\n* [Flux system](apps/flux-system)\n* [Flux git config](apps/flux-system/config)\n* [Flux repos](apps/flux-system/repos)\n\nBase addons:\n* [Cert Manager](apps/base/cert-manager)\n* [External Secrets](apps/base/external-secrets)\n* [Keda](apps/base/keda)\n* [Local path provisioner](apps/base/local-path-provisioner)\n* [Metrics server](apps/base/metrics-server)\n* [Basic RBAC](apps/base/rbac)\n\nCloud platform integrations:\n* [Azure CCM](apps/clouds/azure-ccm)\n* [Azure CSI](apps/clouds/azure-csi)\n* [GCP CCM](apps/clouds/gcp-ccm)\n* [GCP CSI](apps/clouds/gcp-csi)\n* [Hetzner Cloud CCM](apps/clouds/hcloud-ccm)\n* [Hetzner Cloud CSI](apps/clouds/hcloud-csi)\n* [Oracle CCM](apps/clouds/oracle-ccm)\n* [Oracle CSI](apps/clouds/oracle-csi)\n* [OVHCloud CCM](apps/clouds/ovh-ccm)\n* [OVHCloud CSI](apps/clouds/ovh-csi)\n* [Proxmox CCM](apps/clouds/proxmox-ccm)\n* [Proxmox CSI](apps/clouds/proxmox-csi)\n* [Scaleway CCM](apps/clouds/scaleway-ccm)\n* [Scaleway CSI](apps/clouds/scaleway-csi)\n* [Talos CCM](apps/clouds/talos-ccm)\n* [Talos etcd backup](apps/clouds/talos-backup)\n* [Talos update](apps/clouds/talos-upgrade-controller)\n* [Cluster Node AutoScaler](apps/clouds/cluster-autoscaler)\n    * [Azure](apps/clouds/cluster-autoscaler/azure)\n    * [GCP](apps/clouds/cluster-autoscaler/gcp)\n    * [Hetzner Cloud](apps/clouds/cluster-autoscaler/hcloud)\n    * [Oracle](apps/clouds/cluster-autoscaler/oracle)\n\nCluster logging:\n* [Fluent Bit](apps/logging/fluent-bit)\n* [Fluentd route](apps/logging/fluentd-route)\n* [Kubernetes event exporter](apps/logging/event-exporter)\n\nCluster monitoring:\n* [Prometheus base components](apps/monitoring/prometheus)\n* [Prometheus AlertManager](apps/monitoring/prometheus-alertmanager)\n* [Prometheus Node exporter](apps/monitoring/prometheus-node-exporter)\n* [Victoria Metrics](apps/monitoring/victoria-metrics)\n* [Victoria Metrics Operator](apps/monitoring/victoria-metrics-operator)\n* [InfluxDB](apps/monitoring/influxdb)\n\nIngress controllers:\n* [Ingress nginx](apps/ingress/ingress-nginx)\n* [Ingress skipper](apps/ingress/skipper)\n\n## Folder structure\n\n```shell\n📁 apps\n├── 📁 name-of-application\n│   ├── 📁 app\n│   │  ├── helmrelease.yaml             # fluxcd crd\n│   │  ├── helmvalues.yaml              # helm values\n│   │  └── kustomization.yaml           # kustomization parameters\n│   │\n│   ├── fluxcd.yaml                     # fluxcd crd\n│   ├── helmfile.yaml                   # helmfile (manual deploy)\n│   └── kustomization.yaml              # kustomization parameters\n│\n├── 📁 group-of-application\n│   ├── 📁 name-of-application\n│   │   ├── 📁 app\n│   │   │   ├── helmrelease.yaml        # fluxcd crd\n│   │   │   ├── helmvalues.yaml         # helm values\n│   │   │   └── kustomization.yaml      # kustomization parameters\n│   │   │\n│   │   ├── fluxcd.yaml                 # fluxcd crd\n│   │   ├── helmfile.yaml               # helmfile (manual deploy)\n│   │   ├── kustomization.yaml          # kustomization parameters\n│   │   └── namespace.yaml              # namespace definition\n│   │\n│   └── 📁 name-of-application\n│       ├── 📁 app\n│       │   ├── helmrelease.yaml        # fluxcd crd\n│       │   ├── helmvalues.yaml         # helm values\n│       │   └── kustomization.yaml      # kustomization parameters\n│       │\n│       ├── fluxcd.yaml                 # fluxcd crd\n│       ├── helmfile.yaml               # helmfile (manual deploy)\n│       ├── kustomization.yaml          # kustomization parameters\n│       └── namespace.yaml              # namespace definition\n│\n└── 📁 clusters                         # clusters\n    └── 📁 cluster-1                    # cluster name\n       ├── 📁 vars\n       │   ├── cluster.yaml             # cluster common variables\n       │   ├── secrets.fluxcd.yaml      # fluxcd secrets git-token, slack-token etc.\n       │   └── kustomization.yaml       # kustomization parameters\n       │\n       ├── fluxcd.yaml                 # fluxcd crd\n       └── kustomization.yaml          # component list\n```\n\n## Prepare\n\nClone repository, and add change:\n* git url in file `apps/flux-system/config/repository.yaml`\n* git-token in file `clusters/cluster-0/vars/secrets.fluxcd.yaml`\n* comment/uncomment application in file `clusters/cluster-0/kustomization.yaml`\n\nCommit the changes and push to the repository.\n\n## Bootstrap\n\n```shell\nkubectl apply --server-side --kustomize bootstrap\n```\n\n## Deploy cluster\n\n```shell\nsops --decrypt clusters/cluster-0/vars/secrets.fluxcd.yaml | kubectl -n flux-system apply -f -\nkubectl apply --server-side --kustomize clusters/cluster-0\n```\n\n## Refresh source\n\n```shell\nkubectl get HelmRelease -A\nflux reconcile -n flux-system source git gitops-clusters\n```\n\n# Development\n\n## Git\n\n```shell\ngit config user.name \"Serge Logvinov\"\ngit config user.email serge.logvinov@email\n\ngpg --list-secret-keys --keyid-format=long\ngit config user.signingkey 349CAAD68AF02E2B\ngit config commit.gpgsign true\n```\n\n## References\n\n* https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key\n\n## Inspiration\n\n* https://github.com/jfroy/flatops.git\n* https://github.com/kashalls/home-cluster.git\n* https://github.com/onedr0p/home-ops.git\n* https://github.com/xunholy/k8s-gitops.git\n* https://github.com/szinn/k8s-homelab.git\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergelogvinov%2Fgitops-examples","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsergelogvinov%2Fgitops-examples","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergelogvinov%2Fgitops-examples/lists"}