mirror of https://github.com/helm/helm
https://github.com/kubernetes/helm/issues/3309pull/3343/head
parent
077be881c4
commit
8e23265ace
@ -0,0 +1,75 @@
|
|||||||
|
# Export and import feature proposal
|
||||||
|
|
||||||
|
Export - ability to save currently installed releases into a single file (`helm export` command). Import - ability to restore (re-install)
|
||||||
|
previously exported releases (`helm import` command).
|
||||||
|
|
||||||
|
## Use cases
|
||||||
|
|
||||||
|
### Disaster recovery
|
||||||
|
|
||||||
|
A Cluster Administrator can run `helm export` command continuously or after releasing software. This command will save all Helm releases into a file.
|
||||||
|
It will include all data associated with the release including name, version, chart, values and release history. This file can be uploaded to S3 bucket where it
|
||||||
|
will be stored permanently. Later, in case of emergency, this file can be used to restore cluster state by running `helm import` command.
|
||||||
|
|
||||||
|
### Creating new environment
|
||||||
|
|
||||||
|
Typically, organizations run multiple environments. Example: DEV, STAGE, PROD. This can be achieved by either using a dedicated namespace in the single
|
||||||
|
Kubernetes cluster or by creating a dedicated Kubernetes cluster for every environment. In either case, `helm export` and `helm import` can be used for creating
|
||||||
|
new environments from scratch. `helm export` will save a snapshot of the environment and `helm import` will restore this snapshot in given Kubernetes cluster or namespace.
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
The following commands will be added to `helm` binary:
|
||||||
|
|
||||||
|
* `helm export`
|
||||||
|
* `helm import`
|
||||||
|
|
||||||
|
The following actions will be added to tiller's `ReleaseServer`:
|
||||||
|
|
||||||
|
* `func (s *ReleaseServer) Export(...)`
|
||||||
|
* `func (s *ReleaseServer) Import(...)`
|
||||||
|
|
||||||
|
### Export file format
|
||||||
|
|
||||||
|
```protobuf
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package hapi.export;
|
||||||
|
|
||||||
|
message Metadata {
|
||||||
|
google.protobuf.Timestamp created_at = 1; // Timestamp when export file was created
|
||||||
|
string tiller_version = 2; // Version of tiller which was used
|
||||||
|
}
|
||||||
|
|
||||||
|
message Export {
|
||||||
|
hapi.export.Metadata metadata = 1; // Export file metadata
|
||||||
|
repeated hapi.release.Release releases = 2; // List of releases
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
The protobuf representation of `hapi.export.Export` will be additionally gzipped.
|
||||||
|
|
||||||
|
### helm export
|
||||||
|
|
||||||
|
`helm export` will send a new gRPC request to `tiller` asking to create a new export file. `tiller` will prepare and send this file back to the client.
|
||||||
|
All releases including the ones which were superseded by new versions will be saved.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
* `--namespace` - Namespace to export. Defaults to the current kube config namespace.
|
||||||
|
* `--file` - Output file path. Defaults to "helm-releases-<timestamp>.gz".
|
||||||
|
|
||||||
|
### helm import
|
||||||
|
|
||||||
|
`helm import` will send the passed export file to `tiller` and tiller will install all releases from this file in the given namespace.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
|
||||||
|
* `--file` (Mandatory) - Path to the export file
|
||||||
|
* `--namespace` - Namespace where tiller will re-install releases. Defaults to the current kube config namespace.
|
||||||
|
* `--no-hooks` - Skip hooks
|
||||||
|
* `--replace` - By default, helm will raise an error if any of the releases in the export file are already installed. This option will force tiller to replace them.
|
||||||
|
|
||||||
|
## Alternatives
|
||||||
|
|
||||||
|
* https://github.com/heptio/ark
|
Loading…
Reference in new issue