Skip to content
This repository has been archived by the owner on Feb 22, 2022. It is now read-only.

Adds helm chart for heptio/ark #3795

Merged
merged 47 commits into from
Jun 14, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
65ac2e3
first commit
domcar Feb 21, 2018
f675cb1
changes SA name
domcar Feb 21, 2018
5aa0747
adds correct rbac rules
domcar Feb 21, 2018
14ea5ff
renames files; add more customizable vars
domcar Feb 21, 2018
536c688
updates readme
domcar Feb 21, 2018
4ead002
adds notes
domcar Feb 21, 2018
3f0aad2
removes config values
domcar Feb 21, 2018
d5858f5
changes email in chart
domcar Feb 21, 2018
b65504c
updates readme
domcar Feb 21, 2018
bf9b51c
test changes author
domcar Feb 21, 2018
adf608d
test change email
domcar Feb 21, 2018
e4d1e82
test change email
domcar Feb 21, 2018
9373293
adds prerequisites in readme
domcar Feb 21, 2018
d80dd98
fixes typo
domcar Feb 22, 2018
44d8acd
adds AWS
domcar Feb 22, 2018
669ce07
updates to version 0.7
domcar Feb 22, 2018
f47b895
updates version in chart
domcar Feb 22, 2018
e85c4f0
adds repo source; removes unnecessary values
domcar Feb 22, 2018
4802657
moves deployment to templates
domcar Feb 23, 2018
e6b9d24
renames folder
domcar Feb 23, 2018
ff4b980
updaates to 0.7.1
domcar Feb 23, 2018
8eb6040
creates ark sa in helpers; separates files according to object type
domcar Feb 23, 2018
261d611
updates version in chart
domcar Feb 23, 2018
61a05b8
adds home to chart
domcar Feb 23, 2018
8c74bc3
updates to v0.7.1
domcar Feb 23, 2018
bb0ff5a
modifies chart according to best practices
domcar Feb 26, 2018
e305418
removes blank line
domcar Feb 26, 2018
5463c3f
adds delete backup hook to solve issue crd backup not deleting
domcar Feb 27, 2018
fb90ec9
adjusts indentation, renames file with using hyphene
domcar Mar 13, 2018
ac6d7bc
moves folder to stable
domcar Mar 13, 2018
be5596c
remove unnecessary test condition
domcar Apr 10, 2018
2c74977
Update to v0.8.1; Add support for Azure
domcar Apr 25, 2018
e5b514f
Update readme
domcar Apr 30, 2018
e564f4e
Add annotation for kube2iam
domcar Apr 30, 2018
00d250e
Add image for hooks. Update readme
domcar Apr 30, 2018
0f7cb0a
Rename serviceaccount
domcar May 9, 2018
8984ec0
Use Get instead of Glob
domcar May 9, 2018
9b80a0b
Remove namespace
domcar May 9, 2018
00e6649
Add PullPolicy; Modify readme
domcar May 9, 2018
fb6a6fd
Rename Chart ark
domcar May 9, 2018
2af806e
Add standard labels to resources
domcar May 9, 2018
b78fceb
Add customizable tolertion and nodeselector
domcar May 9, 2018
2a9682b
Add missing labels; Use image with tag
domcar May 16, 2018
7df92c4
Implement suggestion
domcar Jun 4, 2018
6cd1fd9
Various updates
unguiculus Jun 7, 2018
d6bb35b
Merge remote-tracking branch 'upstream/master' into feature/ark
unguiculus Jun 11, 2018
6901ca2
Add missing if block around delete hook
unguiculus Jun 11, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions stable/ark/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
13 changes: 13 additions & 0 deletions stable/ark/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
appVersion: 0.8.2
description: A Helm chart for ark
name: ark
version: 1.0.0
home: https://heptio.com/products/#heptio-ark
sources:
- https://github.com/heptio/ark
maintainers:
- name: domcar
email: d-caruso@hotmail.it
- name: unguiculus
email: unguiculus@gmail.com
91 changes: 91 additions & 0 deletions stable/ark/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Ark-server

This helm chart install ark version v0.8.1
https://github.com/heptio/ark/tree/v0.8.1

## Premise
In general, Helm cannot install CRDs and resources based on these CRDs in the same Helm chart because CRDs need to be installed before CRD
resources can be created and Helm cannot guarantee the correct ordering for this to work.

As a workaround, the chart creates a Config resource via post-install hook.
Since resources created by hooks are not managed by Helm, a pre-delete hook removes the Config CRD when the release is deleted.

At the same time the resources created with the hook are completely transparent to Helm, that is, when you delete the
chart those resources remain there. Hence we need a sencond hook for deleting them (see hook-delete.yaml)

## ConfigMap customization
Since we want to have a customizable chart it's important that the configmap is a template and not a static file.
To do this we add the keyword `tpl` when reading the file
- {{ (tpl (.Files.Glob "configuration/").AsConfig .) | indent 2 }}


## Prerequisites

### Secret for cloud provider credentials
Ark server needs a IAM service account in order to run, if you don't have it you must create it.
Please follow the official documentation: https://heptio.github.io/ark/v0.8.1/cloud-common

Don't forget the step to create the secret
```
kubectl create secret generic cloud-credentials --namespace <ARK_NAMESPACE> --from-file cloud=credentials-ark
```

### Configuration
Please change the values.yaml according to your setup
See here for the official documentation https://heptio.github.io/ark/v0.8.1/config-definition

Parameter | Description | Default | Required
--- | --- | --- | ---
`cloudprovider` | Cloud provider | `nil` | yes
`bucket` | Object storage where to store backups | `nil` | yes
`region` | AWS region | `nil` | only if using AWS
`apitimeout` | Api Timeout | `nil` | only if using Azure
`credentials` | Credentials | `nil` | Yes (not required for kube2iam)
`backupSyncPeriod` | How frequently Ark queries the object storage to make sure that the appropriate Backup resources have been created for existing backup files. | `60m` | yes
`gcSyncPeriod` | How frequently Ark queries the object storage to delete backup files that have passed their TTL. | `60m` | yes
`scheduleSyncPeriod` | How frequently Ark checks its Schedule resource objects to see if a backup needs to be initiated | `1m` | yes
`restoreOnlyMode` | When RestoreOnly mode is on, functionality for backups, schedules, and expired backup deletion is turned off. Restores are made from existing backup files in object storage. | `false` | yes
`kubectl.image` | A docker image with kubectl, required by hook-deploy.yaml and hook-delete.yaml | `docker pull claranet/gcloud-kubectl-docker` | yes

Parameter | Description | Default
--- | --- | ---
`image.repository` | Image repository | `gcr.io/heptio-images/ark`
`image.tag` | Image tag | `v0.8.2`
`image.pullPolicy` | Image pull policy | `IfNotPresent`
`kubectl.image.repository` | Image repository | `gcr.io/heptio-images/ark`
`kubectl.image.tag` | Image tag | `v0.8.2`
`kubectl.image.pullPolicy` | Image pull policy | `IfNotPresent`
`podAnnotations` | Annotations for the Ark server pod | `{}`
`rbac.create` | If true, create and use RBAC resources | `true`
`rbac.server.serviceAccount.create` | Whether a new service account name that the server will use should be created | `true`
`rbac.server.serviceAccount.name` | Service account to be used for the server. If not set and `rbac.server.serviceAccount.create` is `true` a name is generated using the fullname template | ``
`rbac.hook.serviceAccount.create` | Whether a new service account name that the hook will use should be created | `true`
`rbac.hook.serviceAccount.name` | Service account to be used for the server. If not set and `rbac.hook.serviceAccount.create` is `true` a name is generated using the fullname template | ``
`tolerations` | List of node taints to tolerate | `[]`
`nodeSelector` | Node labels for pod assignment | `{}`
`configuration.persistentVolumeProvider.name` | The name of the cloud provider the cluster is using for persistent volumes, if any | `{}`
`configuration.persistentVolumeProvider.config.region` | The cloud provider region (AWS only) | ``
`configuration.persistentVolumeProvider.config.apiTimeout` | The API timeout (Azure only) |
`configuration.backupStorageProvider.nam` | The name of the cloud provider that will be used to actually store the backups (`aws`, `azure`, `gcp`) | ``
`configuration.backupStorageProvider.bucket` | The storage bucket where backups are to be uploaded | ``
`configuration.backupStorageProvider.config.regio`n | The cloud provider region (AWS only) | ``
`configuration.backupStorageProvider.config.s3ForcePathStyle` | Set to `true` for a local storage service like Minio | ``
`configuration.backupStorageProvider.config.s3Url` | S3 url (primarily used for local storage services like Minio) | ``
`configuration.backupStorageProvider.config.kmsKeyId` | KMS key for encryption (AWS only) | ``
`configuration.backupSyncPeriod` | How frequently Ark queries the object storage to make sure that the appropriate Backup resources have been created for existing backup files | `60m`
`configuration.gcSyncPeriod` | How frequently Ark queries the object storage to delete backup files that have passed their TTL | `60m`
`configuration.scheduleSyncPeriod` | How frequently Ark checks its Schedule resource objects to see if a backup needs to be initiated | `1m`
`configuration.resourcePriorities` | An ordered list that describes the order in which Kubernetes resource objects should be restored | `[]`
`configuration.restoreOnlyMode` | When RestoreOnly mode is on, functionality for backups, schedules, and expired backup deletion is turned off. Restores are made from existing backup files in object storage | `false`
`credentials.existingSecret` | If specified and `useSecret` is `true`, uses an existing secret with this name instead of creating one | ``
`credentials.useSecret` | Whether a secret should be used. Set this to `false` when using `kube2iam` | `true`
`credentials.secretContents` | Contents for the credentials secret | `{}`


## How to
```
helm install --name ark --namespace heptio-ark ./ark
```

## Remove heptio/ark
Remember that when you remove ark all backups remain untouched
9 changes: 9 additions & 0 deletions stable/ark/templates/NOTES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Check that the ark is up and running:

Check that the secret has been created:

Once ark server is up and running you need the client before you can use it
1. wget https://github.com/heptio/ark/releases/download/{{ .Values.image.tag }}/ark-{{ .Values.image.tag }}-darwin-amd64.tar.gz
2. tar -xvf ark-{{ .Values.image.tag }}-darwin-amd64.tar.gz -C ark-client

More info on the official site: https://github.com/heptio/ark#install-client
65 changes: 65 additions & 0 deletions stable/ark/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "ark.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "ark.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "ark.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create the name of the service account to use for creating or deleting the ark config
*/}}
{{- define "ark.hookServiceAccount" -}}
{{- if .Values.serviceAccount.hook.create -}}
{{ default (printf "%s-%s" (include "ark.fullname" .) "hook") .Values.serviceAccount.hook.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.hook.name }}
{{- end -}}
{{- end -}}

{{/*
Create the name of the service account to use for creating or deleting the ark server
*/}}
{{- define "ark.serverServiceAccount" -}}
{{- if .Values.serviceAccount.server.create -}}
{{ default (printf "%s-%s" (include "ark.fullname" .) "server") .Values.serviceAccount.server.name }}
{{- else -}}
{{ default "default" .Values.serviceAccount.server.name }}
{{- end -}}
{{- end -}}

{{/*
Create the name for the credentials secret.
*/}}
{{- define "ark.secretName" -}}
{{- if .Values.credentials.existingSecret -}}
{{- .Values.credentials.existingSecret -}}
{{- else -}}
{{- template "ark.fullname" . -}}
{{- end -}}
{{- end -}}
16 changes: 16 additions & 0 deletions stable/ark/templates/backups.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: backups.ark.heptio.com
labels:
chart: {{ template "ark.chart" . }}
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
spec:
group: ark.heptio.com
version: v1
scope: Namespaced
names:
plural: backups
kind: Backup
54 changes: 54 additions & 0 deletions stable/ark/templates/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ template "ark.fullname" . }}
labels:
chart: {{ template "ark.chart" . }}
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
data:
ark-config.yaml: |
apiVersion: ark.heptio.com/v1
kind: Config
metadata:
name: default
{{ with .Values.configuration }}
{{- with .persistentVolumeProvider }}
persistentVolumeProvider:
name: {{ .name }}
{{ with .config }}
config:
{{- with .region }}
region: {{ . }}
{{- end }}
{{- with .apitimeout }}
apiTimeout: {{ . }}
{{- end }}
{{- end }}
{{- end }}
{{- with .backupStorageProvider }}
backupStorageProvider:
name: {{ .name }}
bucket: {{ .bucket }}
{{- with .config }}
config:
{{- with .region }}
region: {{ . }}
{{- end }}
{{- with .s3ForcePathStyle }}
s3ForcePathStyle: {{ . }}
{{- end }}
{{- with .s3Url }}
s3Url: {{ . }}
{{- end }}
{{- with .kmsKeyId }}
kmsKeyId: {{ . }}
{{- end }}
{{- end }}
{{- end }}
backupSyncPeriod: {{ .backupSyncPeriod }}
gcSyncPeriod: {{ .gcSyncPeriod }}
scheduleSyncPeriod: {{ .scheduleSyncPeriod }}
restoreOnlyMode: {{ .restoreOnlyMode }}
{{- end }}
16 changes: 16 additions & 0 deletions stable/ark/templates/configs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: configs.ark.heptio.com
labels:
chart: {{ template "ark.chart" . }}
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
spec:
group: ark.heptio.com
version: v1
scope: Namespaced
names:
plural: configs
kind: Config
16 changes: 16 additions & 0 deletions stable/ark/templates/deletebackuprequests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: deletebackuprequests.ark.heptio.com
labels:
chart: {{ template "ark.chart" . }}
heritage: {{ .Release.Service }}
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
spec:
group: ark.heptio.com
version: v1
scope: Namespaced
names:
plural: deletebackuprequests
kind: DeleteBackupRequest
73 changes: 73 additions & 0 deletions stable/ark/templates/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
{{- if and .Values.configuration.backupStorageProvider.name .Values.configuration.backupStorageProvider.bucket -}}
{{- $provider := .Values.configuration.backupStorageProvider.name -}}
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: {{ template "ark.fullname" . }}
labels:
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
chart: {{ template "ark.chart" . }}
heritage: {{ .Release.Service }}
spec:
replicas: 1
selector:
matchLabels:
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
template:
metadata:
labels:
release: {{ .Release.Name }}
app: {{ template "ark.name" . }}
{{- with .Values.podAnnotations }}
annotations:
{{ toYaml . | indent 8 }}
{{- end }}
spec:
restartPolicy: Always
serviceAccountName: {{ template "ark.serverServiceAccount" . }}
containers:
- name: ark
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- /ark
args:
- server
{{- if eq $provider "azure" }}
envFrom:
- secretRef:
name: {{ template "ark.secretName" . }}
{{- end }}
volumeMounts:
- name: plugins
mountPath: /plugins
{{- if and .Values.credentials.useSecret (or (eq $provider "aws") (eq $provider "gcp")) }}
- name: cloud-credentials
mountPath: /credentials
env:
{{- if eq $provider "aws" }}
- name: AWS_SHARED_CREDENTIALS_FILE
{{- else }}
- name: GOOGLE_APPLICATION_CREDENTIALS
{{- end }}
value: /credentials/cloud
{{- end }}
volumes:
{{- if and .Values.credentials.useSecret (or (eq $provider "aws") (eq $provider "gcp")) }}
- name: cloud-credentials
secret:
secretName: {{ template "ark.secretName" . }}
{{- end }}
- name: plugins
emptyDir: {}
{{- with .Values.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
{{- end -}}
Loading