{"id":13774467,"url":"https://github.com/projectsveltos/addon-controller","last_synced_at":"2025-05-15T04:04:52.174Z","repository":{"id":61679899,"uuid":"512455390","full_name":"projectsveltos/addon-controller","owner":"projectsveltos","description":"Sveltos Kubernetes add-on controller programmatically deploys add-ons and applications in tens of clusters. Support for ClusterAPI powered clusters, Helm charts, kustomize ,YAMLs. Sveltos has built-in support for multi-tenancy.","archived":false,"fork":false,"pushed_at":"2025-05-07T07:12:15.000Z","size":24608,"stargazers_count":371,"open_issues_count":12,"forks_count":29,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-07T20:05:29.369Z","etag":null,"topics":["add-ons","addons","devops","gitops","helm","jsonnet","k8s","kubernetes","kustomize","multi-tenancy","platform-engineering","ytt"],"latest_commit_sha":null,"homepage":"https://projectsveltos.github.io/sveltos/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/projectsveltos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2022-07-10T14:25:32.000Z","updated_at":"2025-05-07T07:12:20.000Z","dependencies_parsed_at":"2023-07-28T12:58:39.490Z","dependency_job_id":"f666f3d2-ba2d-478d-b1e6-17929f71a6f6","html_url":"https://github.com/projectsveltos/addon-controller","commit_stats":null,"previous_names":["projectsveltos/sveltos-manager","projectsveltos/addon-controller","projectsveltos/addon-manager","projectsveltos/cluster-api-feature-manager"],"tags_count":81,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Faddon-controller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Faddon-controller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Faddon-controller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/projectsveltos%2Faddon-controller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/projectsveltos","download_url":"https://codeload.github.com/projectsveltos/addon-controller/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254092648,"owners_count":22013290,"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":["add-ons","addons","devops","gitops","helm","jsonnet","k8s","kubernetes","kustomize","multi-tenancy","platform-engineering","ytt"],"created_at":"2024-08-03T17:01:27.035Z","updated_at":"2025-05-15T04:04:47.156Z","avatar_url":"https://github.com/projectsveltos.png","language":"Go","readme":"[![CI](https://github.com/projectsveltos/addon-controller/actions/workflows/main.yaml/badge.svg)](https://github.com/projectsveltos/addon-controller/actions)\n[![Go Report Card](https://goreportcard.com/badge/github.com/projectsveltos/addon-controller)](https://goreportcard.com/report/github.com/projectsveltos/addon-controller)\n[![Docker Pulls](https://img.shields.io/docker/pulls/projectsveltos/addon-controller.svg)](https://store.docker.com/community/images/projectsveltos/addon-controller)\n[![Release](https://img.shields.io/github/v/release/projectsveltos/addon-controller)](https://github.com/projectsveltos/addon-controller/releases)\n[![Slack](https://img.shields.io/badge/join%20slack-%23projectsveltos-brighteen)](https://join.slack.com/t/projectsveltos/shared_invite/zt-1hraownbr-W8NTs6LTimxLPB8Erj8Q6Q)\n[![License](https://img.shields.io/badge/license-Apache-blue.svg)](LICENSE)\n[![Twitter Follow](https://img.shields.io/twitter/follow/projectsveltos?style=social)](https://twitter.com/projectsveltos)\n\n# Sveltos: Kubernetes add-on controller\n\n\u003cimg src=\"https://raw.githubusercontent.com/projectsveltos/sveltos/main/docs/assets/logo.png\" width=\"200\"\u003e\n\n# What is the Projectsveltos?\nSveltos is a Kubernetes add-on controller that simplifies the deployment and management of add-ons and applications across multiple clusters. It runs in the management cluster and can programmatically deploy and manage add-ons and applications on any cluster in the fleet, including the management cluster itself. Sveltos supports a variety of add-on formats, including Helm charts, raw YAML, Kustomize, Carvel ytt, and Jsonnet.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Sveltos Kubernetes add-ons management across clusters\" src=\"https://projectsveltos.github.io/sveltos/assets/multi-clusters.png\" width=\"600\"/\u003e\n\u003c/p\u003e\n\nSveltos allows you to represent add-ons and applications as templates. Before deploying to managed clusters, Sveltos instantiates these templates. Sveltos can gather the information required to instantiate the templates from either the management cluster or the managed clusters themselves. This enables you to use the same add-on configuration across all of your clusters, while still allowing for some variation, such as different add-on configuration values. In other words, Sveltos lets you define add-ons and applications in a reusable way. You can then deploy these definitions to multiple clusters, with minor adjustments as needed. This can save you a lot of time and effort, especially if you manage a large number of clusters.\n\nSveltos provides precise control over add-on deployment order. Add-ons within a Profile/ClusterProfile are deployed in the exact order they appear, ensuring a predictable and controlled rollout. Furthermore, ClusterProfiles can depend on others, guaranteeing that dependent add-ons only deploy after their dependencies are fully operational. Finally Sveltos' event-driven framework offers additional flexibility. This framework allows for deploying add-ons and applications in response to specific events, enabling dynamic and adaptable deployments based on your needs.\n\n👉 To get updates [⭐️ star](https://github.com/projectsveltos/addon-controller/stargazers) this repository.\n\n[![Sveltos Dashboard](https://img.youtube.com/vi/GspTTGAmQwk/0.jpg)](https://www.youtube.com/watch?v=GspTTGAmQwk)\n\n## Profiles vs. ClusterProfiles\n\nProjectsveltos offers two powerful tools for managing cluster configurations: **Profiles** and **ClusterProfiles**. Understanding their distinctions is crucial for efficient setup and administration.\n\n1. ClusterProfiles: Apply across all clusters in any namespace. Ideal for platform admins maintaining global consistency and managing settings like networking, security, and resource allocation.\n2. Profiles: Limited to a specific namespace, granting granular control to tenant admins. This isolation ensures teams manage, from the management cluster, their managed clusters independently without impacting others.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Sveltos Profile vs ClusterProfile\" src=\"https://projectsveltos.github.io/sveltos/assets/profile_vs_clusterprofile.png\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n## Addon deployment: how it works\n\nThe idea is simple:\n1. from the management cluster, selects one or more `clusters` with a Kubernetes [label selector](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors);\n2. lists which `addons` need to be deployed on such clusters.\n\nwhere term:\n1. `clusters` represents both [CAPI cluster](https://github.com/kubernetes-sigs/cluster-api/blob/main/api/v1beta1/cluster_types.go) or any other Kubernetes cluster registered with Sveltos;\n2. `addons` represents either an [helm release](https://helm.sh), Kubernetes resource YAMLs or [kustomize](https://github.com/kubernetes-sigs/kustomize) resources.\n\nHere is an example of how to require that any CAPI Cluster with label *env: prod* has following features deployed:\n1. Kyverno helm chart (version v3.0.1)\n2. kubernetes resource(s) contained in the referenced Secret: *default/storage-class*\n3. kubernetes resource(s) contained in the referenced ConfigMap: *default/contour*.\n\n```yaml\napiVersion: config.projectsveltos.io/v1beta1\nkind: ClusterProfile\nmetadata:\n  name: deploy-kyverno\nspec:\n  clusterSelector:\n    matchLabels:\n      env: prod\n  syncMode: Continuous\n  helmCharts:\n  - repositoryURL:    https://kyverno.github.io/kyverno/\n    repositoryName:   kyverno\n    chartName:        kyverno/kyverno\n    chartVersion:     v3.0.1\n    releaseName:      kyverno-latest\n    releaseNamespace: kyverno\n    helmChartAction:  Install\n    values: |\n      admissionController:\n        replicas: 3\n  policyRefs:\n  - name: storage-class\n    namespace: default\n    kind: Secret\n  - name: contour-gateway\n    namespace: default\n    kind: ConfigMap\n```\n\nAs soon as a cluster is a match for above ClusterProfile instance, all referenced features are automatically deployed in such cluster.\n\n![Kubernetes add-on deployment](https://github.com/projectsveltos/sveltos/blob/main/docs/assets/addons_deployment.gif)\n\nHere is an example using Kustomize:\n\n```yaml\napiVersion: config.projectsveltos.io/v1beta1\nkind: ClusterProfile\nmetadata:\n  name: flux-system\nspec:\n  clusterSelector:\n    matchLabels:\n      env: fv\n  syncMode: Continuous\n  kustomizationRefs:\n  - namespace: flux-system\n    name: flux-system\n    kind: GitRepository\n    path: ./helloWorld/\n    targetNamespace: eng\n```\n\nwhere GitRepository synced with Flux contains following resources:\n\n```bash\n├── deployment.yaml\n├── kustomization.yaml\n└── service.yaml\n└── configmap.yaml\n```\n\nRefer to [examples](./examples/) for more complex examples.\n\n## Different SyncMode\n\n- *OneTime*: This mode is designed for bootstrapping critical components during the initial cluster setup. Think of it as a one-shot configuration injection:\n    1. Deploying essential infrastructure components like CNI plugins, cloud controllers, or the workload cluster's package manager itself;\n    2. Simplifies initial cluster setup;\n    3. Hands over management to the workload cluster's own tools, promoting modularity and potentially simplifying ongoing maintenance. \n- *Continuous*: This mode continuously monitors ClusterProfiles or Profiles for changes and automatically applies them to matching clusters. It ensures ongoing consistency between your desired configuration and the actual cluster state: \n    1. Centralized control over deployments across multiple clusters for consistency and compliance;\n    2. Simplifies management of configurations across multiple clusters.\n- *ContinuousWithDriftDetection*: Detects and automatically corrects configuration drifts in managed clusters, ensuring they remain aligned with the desired state defined in the management cluster.\n\n## Configuration Drift Detection\n\nSveltos can automatically detect drift between the desired state, defined in the management cluster, and actual state of your clusters and recover from it.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Configuration drift recovery\" src=\"https://github.com/projectsveltos/demos/blob/main/configuration_drift/reconcile_configuration_drift.gif\" width=\"600\"/\u003e\n\u003c/p\u003e\n\n\n[![Projectsveltos intro](https://img.youtube.com/vi/bsWEo79w09c/0.jpg)](https://www.youtube.com/watch?v=bsWEo79w09c)\n[![Projectsveltos event driven framework](https://img.youtube.com/vi/4mOWuOF0gWY/0.jpg)](https://www.youtube.com/watch?v=4mOWuOF0gWY)\n[![Projectsveltos intro](https://img.youtube.com/vi/FRYYHAWr0MQ/0.jpg)](https://www.youtube.com/watch?v=FRYYHAWr0MQ)\n[![Projectsveltos intro](https://img.youtube.com/vi/A5Y0XTnoS7k/0.jpg)](https://www.youtube.com/watch?v=A5Y0XTnoS7k)\n\n## Quick Start\n\n💡 🏃‍♂️ To try projectsveltos on a test cluster, follow these [instructions](https://projectsveltos.github.io/sveltos/getting_started/install/quick_start/)\n\n## Sveltos in action\n\n![Sveltos in action](doc/SveltosOverview.gif)\n\nTo see the full demo, have a look at this [youtube video](https://youtu.be/Ai5Mr9haWKM)\n\n# Useful links\n\n- Projectsveltos [documentation](https://projectsveltos.github.io/sveltos/)\n- [Quick Start](https://projectsveltos.github.io/sveltos/install/quick_start/)\n\n## Contributing \n\n❤️ Your contributions are always welcome! If you want to contribute, have questions, noticed any bug or want to get the latest project news, you can connect with us in the following ways:\n\n1. Read contributing [guidelines](CONTRIBUTING.md)\n2. Open a bug/feature enhancement on github [![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/projectsveltos/addon-controller/issues)\n3. Chat with us on the Slack in the #projectsveltos channel [![Slack](https://img.shields.io/badge/join%20slack-%23projectsveltos-brighteen)](https://join.slack.com/t/projectsveltos/shared_invite/zt-1hraownbr-W8NTs6LTimxLPB8Erj8Q6Q)\n4. [Contact Us](mailto:support@projectsveltos.io)\n\n## License\n\nCopyright 2022.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","funding_links":[],"categories":["Configuration Management","Tools and Libraries","kubernetes","Go"],"sub_categories":["Cluster Resources Management"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectsveltos%2Faddon-controller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprojectsveltos%2Faddon-controller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprojectsveltos%2Faddon-controller/lists"}