{"id":18811726,"url":"https://github.com/logicmonitor/k8s-release-manager","last_synced_at":"2026-02-03T17:07:24.822Z","repository":{"id":47230420,"uuid":"142718578","full_name":"logicmonitor/k8s-release-manager","owner":"logicmonitor","description":"Release Manager provides a long-running application that will periodically poll the Tiller server installed in your cluster. The application will retrieve all installed releases in the cluster and write them to the configured external storage location. The exported data can be retrieved in the future and used the deploy the exported Helm releases to a different cluster. The intended use case is to simplify cluster replication actions such blue/green cluster deployments and disaster recovery scenarios.","archived":false,"fork":false,"pushed_at":"2022-06-29T18:27:40.000Z","size":54393,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-13T21:05:27.422Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logicmonitor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-07-29T00:13:03.000Z","updated_at":"2022-06-29T18:24:42.000Z","dependencies_parsed_at":"2022-09-22T16:53:23.879Z","dependency_job_id":null,"html_url":"https://github.com/logicmonitor/k8s-release-manager","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/logicmonitor/k8s-release-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicmonitor%2Fk8s-release-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicmonitor%2Fk8s-release-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicmonitor%2Fk8s-release-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicmonitor%2Fk8s-release-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logicmonitor","download_url":"https://codeload.github.com/logicmonitor/k8s-release-manager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logicmonitor%2Fk8s-release-manager/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261073339,"owners_count":23105639,"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":[],"created_at":"2024-11-07T23:27:26.868Z","updated_at":"2026-02-03T17:07:22.983Z","avatar_url":"https://github.com/logicmonitor.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e **Note:** Release Manager is a community driven project. LogicMonitor support\nwill not assist in any issues related to Release Manager.\n\n## Release Manager is a tool for importing and exporting Helm release state\n\n-  **Export Helm release state:**\nRelease Manager can contact the configured cluster, collect\nall metadata for each deployed release, and write that metadata to the\nconfigured backend. This metadata can later be consumed by Release Manager\nimport to re-install the saved releases to a different cluster.\n\n-  **Continuously export Helm release state:**\nRelease Manager can also be run in daemon mode to continuously update the\nstored state to reflect ongoing changes to the cluster.\nWhen running in daemon mode, it is HIGHLY recommended when running to use the\nofficial [Release Manager Helm chart](#installing-via-helm-chart).\n\n-  **Import Helm release state:**\nRelease Manager can retrieve stored state from the configured\nbackend and install all exported releases to the current Kubernetes cluster.\n\n-  **Configurable storage backends:**\nRelease Manager can interact with multiple release state storage backends.\nCurrently supported backends are:\n    - S3 (**Note:** S3 object versioning is strongly recommended for backend buckets)\n    - Local (**Note:** the local backend is intended for non-production use only)\n\n## Release Manager Overview\nRelease Manager provides functionality for exporting and importing the\nstate of Helm releases currently deployed to a Kubernetes cluster. The state\nof the installed releases is saved to a configurable backend for easy\nrestoration of previously-deployed releases or for simplified re-deployment of\nthose releases to a new Kubernetes cluster.\n\nRelease Manager operations can be run locally or within the Kubernetes cluster.\nThe application also supports a daemon mode that will periodically update the\nsaved state.\n\nTo export releases, Release Manager queries the target Kubernetes cluster to \ncollect metadata for all releases currently deployed in the source cluster \nand writes this metadata to the configured backend data store. \nIf the Release Manager is deployed in daemon mode via its own Helm chart, \nit will also store metadata about itself. This metadata is used to prevent \nimport operations from creating a new Release Manager with the same \nconfiguration as the previous managed, causing both instances to write \nconflicting state to the backend.\n\nTo import releases, Release Manager retrieves the state stored in the backend, \nconnects to the target Kubernetes cluster, \nand deploys the saved releases to the cluster..\n\nRelease Manager will use --kubeconfig/--kubecontext, $KUBECONFIG, or\n~/.kube/config to establish a connection to the Kubernetes cluster. If none of\nthese configuraitons are set, an in-cluster connection will be attempted. All\nactions will be performed against the current cluster and a given command will\nonly perform actions against a single cluster, i.e. 'export' will\nexport releases from the configured cluster while 'import' will deploy releases\nto the configured cluster and 'clear' requires no custer connection whatsoever.\n\n## [Command usage](docs/releasemanager.md)\n\n## Installing via Helm Chart\nInstalling releasemanager daemon via Helm chart\n```\nhelm repo add logicmonitor https://logicmonitor.github.io/k8s-helm-charts\nhelm install logicmonitor/releasemanager \\\n  --set path=$BACKEND_STORAGE_PATH \\\n  --name releasemanager-$CURRENT_CLUSTER\n```\n\nFor detailed information about the Helm chart, see the [README](https://github.com/logicmonitor/k8s-helm-charts/blob/master/releasemanager/README.md)\n\n## Viewing installed releases\nWhen running in daemon mode, the Release Manager exposes an endpoint to view\nthe list of releases currently stored in the backend. This endpoint is\navailable at /releases.\n\nNote that if the Release Manager is running in-cluster, you'll\nneed to expose its service via ingress using --set ingress.hosts={...} when\ninstalling the Helm chart.\n\n## Retrieving metrics\nWhen running in daemon mode, the Release Manager exposes an endpoint providing\nmonitoring metrics. This endpoint is available at /debug/vars\nat /debug/vars.\n\nNote that if the Release Manager is running in-cluster, you'll\nneed to expose its service via ingress using --set ingress.hosts={...} when\ninstalling the Helm chart.\n\n## Use case examples\nRelease Manager was created with the goal of solving two common cluster\nmanagement problems. These use cases are outlined below along with a general\ninstructions for using Release Manager to solve the problem.\n\n### Redeploying applications after a blue/green switch\nUsing blue/green deployments for Kubernetes clusters is a great upgrade\nstrategy; however, when a cluster is running dozens or hundreds of application\ndeployments supporting several different environments, it can become burdensome\nto redploy all of these applications every time a cluster is upgraded. To solve\nthis problem, Release Manager makes it easy to take a snapshot of applications\ndeployed to the current cluster and redeploy those applications to the new\ncluster.\n\n#### 1. Install Release Manager locally\n\n```shell\ngo get github.com/logicmonitor/k8s-release-manager/cmd/releasemanager\n```\n\n#### 2. Export the releases currently installed in the source cluster\n\n```shell\nreleasemanager export local \\\n  --kubeconfig $SOURCE_CLUSTER_KUBECONFIG \\\n  --path $LOCAL_RELEASE_STATE_PATH\n```\n\n#### 3. Deploy the saved releases to the destination cluster\n\n```shell\nreleasemanager import local \\\n  --kubeconfig $DESTINATION_CLUSTER_KUBECONFIG \\\n  --path $LOCAL_RELEASE_STATE_PATH\n```\n\n### Deploying applications in a disaster recovery scenario\nSome disaster scenarios can result in the need to create a brand new Kubernetes\ncluster for failover. When a cluster is running dozens or hundreds of\napplication deployments, it can become burdensome and incur huge time costs to\nredploy all of these applications manually. To solve this problem, Release\nManager can operate as a long-running process inside your cluster to\nperiodically export snapshots of deployed applications to an external storage\nbackend. In the event of a disaster recovery operation requiring a cluster\nfailover, Release Manager can retrieve the stored state and quickly deploy all\nof the applications from the failed cluster to the new cluster.\n\n#### 1. Add the LogicMonitor Helm repository\n\n```shell\nhelm repo add logicmonitor https://logicmonitor.github.io/k8s-helm-charts\n```\n\n#### 2. Install Release Manager locally\n\n```shell\ngo get github.com/logicmonitor/k8s-release-manager/cmd/releasemanager\n```\n\n#### 3. Deploy Release Manager in daemon mode when provisioning a production cluster\n\n```shell\nhelm install logicmonitor/releasemanager \\\n  --set path=$PROD_CLUSTER_BACKEND_PATH \\\n  --set s3.bucket=$RELEASE_MANAGER_STATE_BUCKET \\\n  --set s3.region=$BUCKET_REGION \\\n  --name releasemanager-$PROD_CLUSTER_NAME\n```\n\n#### 4. Provision a failover cluster during a disaster scenario\n\n#### 5. Deploy saved releases to the failover cluster.\n\n**NOTE!** Be sure to --new-path. This prevents Release Manager in failover cluster from overwriting the production state\n\n```shell\nreleasemanager import s3 \\\n  --kubeconfig $FAILOVER_CLUSTER_KUBECONFIG \\\n  --path $PROD_CLUSTER_BACKEND_PATH \\\n  --new-path $FAILOVER_CLUSTER_BACKEND_PATH \\\n  --bucket $RELEASE_MANAGER_STATE_BUCKET \\\n  --region $BUCKET_REGION\n```\n\n## License\n[![license](https://img.shields.io/github/license/logicmonitor/k8s-argus.svg?style=flat-square)](https://github.com/logicmonitor/k8s-argus/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicmonitor%2Fk8s-release-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogicmonitor%2Fk8s-release-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogicmonitor%2Fk8s-release-manager/lists"}