Turns Kubernetes resources into a Helm chart
JavaScript
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

README.md

Anchor

Backups Kubernetes resources as a Helm chart.
Extract configurations from resources and save them as values and templates in a reproducible Helm chart.

Anchor - Kubernetes backup

How to use it?

Requirements

  • Node.js, >= v6
  • kubectl
npm install @risingstack/anchor

Example

For more detailed examples like sub-charts check out the ./example folder.

const anchor = require('@risingstack/anchor')

anchor.snapshot({
  resources: [
    'deployment/my-app',
    'deployment/my-worker'
  ]
})
  .then(() => console.log('Snapshot finished'))
  .catch((err) => console.error('Snapshot error', err))

API

anchor.snapshot(options)

Backup Kubernetes resources as a Helm chart and returns a Promise.

  • options.resources: Kubernetes resources to snapshot
    • required
    • example: ['deployment/my-app', 'deployment/my-worker']
  • options.namespace: Kubernetes namespace for kubectl
    • optional
    • default: default
  • options.name: name of the Helm chart
    • optional
    • default: my-chart
  • options.description: description of the Helm chart
    • optional
    • default: ''
  • options.version: version of the Helm chart
    • optional
    • default: 0.0.1
  • options.overwrite: overwrite output directory
    • optional
    • default: false
  • options.outputPath: defines chart path, throws error when exist but overwrite is false
    • optional
    • default: ./output

How does it work?

  1. Download Kubernetes resource via kubectl
  2. Parse resource, extract values and transform to template
  3. Outputs a Helm chart: YAML templates and values.yaml

What can it extract as a template?

  • Containers with name or single container
  • Container environment variables with value
  • Container image with tag
  • Deployment replicas
  • Secret data
  • Service type

TODO:

  • ConfigMap
  • PVC
  • Ingress
  • Job

Output

The ./output directory will contains the templates under the ./output/templates folder.
Your Values.yaml file will look like the following:

deploymentMyApp:
  image: my-company/my-app
  imageTag: 1f40c1f
  envLogLevel: info
  resourcesLimitsCPU: 150m
  resourcesLimitsMemory: 1536Mi
  resourcesRequestsCPU: 10m
  resourcesRequestsMemory: 128Mi
  replicas: 2
deploymentMyWorker:
  containers:
    myWorker:
      image: my-company/my-worker
      imageTag: 295a9c2
      envLogLevel: warning
      envTraceServiceName: my-worker
      resourcesLimitsCPU: 200m
      resourcesLimitsMemory: 1536Mi
      resourcesRequestsCPU: 20m
      resourcesRequestsMemory: 128Mi
    mySidecar:
      image: my-company/metrics-exporter
      imageTag: aa1c434
  replicas: 2

Feature ideas:

  • Versioning
  • Snapshot reload by date
  • Auto-sync (auto snapshot)