Terraform module for deploying Kubernetes Velero inside a pre-existing EKS cluster. Velero (formerly Heptio Ark) is an open source tool to safely backup and restore, perform disaster recovery, and migrate Kubernetes cluster resources and persistent volumes.
module "velero" {
source = "git::https://github.com/DNXLabs/terraform-aws-eks-velero.git"
enabled = true
cluster_name = module.eks_cluster.cluster_id
cluster_identity_oidc_issuer = module.eks_cluster.cluster_oidc_issuer_url
cluster_identity_oidc_issuer_arn = module.eks_cluster.oidc_provider_arn
aws_region = data.aws_region.current.name
bucket_name = ""
}
In this example we will be using wordpress, follow the steps below:
- Add the Bitnami chart repository to Helm:
helm repo add bitnami https://charts.bitnami.com/bitnami
- Modify your context to reflect the source cluster. Deploy WordPress on the source cluster and make it available at a public load balancer IP address. Replace the PASSWORD placeholder with a password for your WordPress dashboard.
helm install wordpress bitnami/wordpress --set service.type=LoadBalancer --set wordpressPassword=PASSWORD
- Wait for the deployment to complete and then use the command below to obtain the load balancer IP address:
kubectl get svc --namespace default wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}
Once Velero is running, create a backup of the WordPress deployment:
velero backup create wpb --selector release=wordpress
Execute the command below to view the contents of the backup and confirm that it contains all the required resources:
velero backup describe wpb --details
At this point, your backup is ready. You can repeat this step every time you wish to have a manual backup, or you can configure a schedule for automatic backups.
Once your backup is complete and confirmed, you can now turn your attention to restoring it. Note that this may take a few minutes to complete.
velero restore create --from-backup wpb
Wait until the backed-up resources are fully deployed and active. Use the kubectl get pods and kubectl get svc commands to track the status of the pods and service endpoint. Once the deployment has been restored, browse to the load balancer IP address and confirm that you see the same post content as that on the source cluster.
Name | Version |
---|---|
terraform | >= 0.13 |
aws | >= 3.13, < 4.0 |
helm | >= 1.0, < 3.0 |
kubernetes | >= 1.10.0, < 3.0.0 |
Name | Version |
---|---|
aws | >= 3.13, < 4.0 |
helm | >= 1.0, < 3.0 |
kubernetes | >= 1.10.0, < 3.0.0 |
Name | Description | Type | Default | Required |
---|---|---|---|---|
aws_region | AWS region where secrets are stored. | string |
n/a | yes |
bucket_name | Bucket name to store the backups. | string |
n/a | yes |
cluster_identity_oidc_issuer | The OIDC Identity issuer for the cluster. | string |
n/a | yes |
cluster_identity_oidc_issuer_arn | The OIDC Identity issuer ARN for the cluster that can be used to associate IAM roles with a service account. | string |
n/a | yes |
cluster_name | The name of the cluster | string |
n/a | yes |
create_bucket | Create bucket to store or get the backups. | bool |
true |
no |
create_namespace | Whether to create Kubernetes namespace with name defined by namespace . |
bool |
true |
no |
enabled | Variable indicating whether deployment is enabled. | bool |
true |
no |
helm_chart_name | Velero Helm chart name to be installed | string |
"velero" |
no |
helm_chart_release_name | Helm release name | string |
"velero" |
no |
helm_chart_repo | Velero repository name. | string |
"https://vmware-tanzu.github.io/helm-charts" |
no |
helm_chart_version | Velero Helm chart version. | string |
"2.20.0" |
no |
mod_dependency | Dependence variable binds all AWS resources allocated by this module, dependent modules reference this variable. | any |
null |
no |
namespace | Kubernetes namespace to deploy Velero Helm chart. | string |
"velero" |
no |
service_account_name | Velero service account name | string |
"velero" |
no |
settings | Additional settings which will be passed to the Helm chart values. | map |
{} |
no |
volume_snapshot_name | Variable indicating the snapshot name. | string |
"velero-snapshot" |
no |
No output.
Module managed by DNX Solutions.
Apache 2 Licensed. See LICENSE for full details.