White Paper: Technology-Driven VMware to OpenStack Migration A Comprehensive Guide

How to Backup and Restore InFluxDB Databases on Kubernetes

Backup and Restore InFluxDB Databases on Kubernetes

Table of Contents

In this blog post, you will find out how to back up and restore InfluxDB time-series databases to S3-compatible or NFS targets.

InFluxDB Backup and Recovery in Kubernetes

InfluxDB is an open-source time-series database developed by InfluxData. It is optimized for fast, high-availability storage and retrieval of time-series data for use with operations monitoring, application metrics, Internet of Things sensor data, real-time analytics, and more. InfluxDB is designed to handle high write and query loads.

Why Backup InfluxDB in Kubernetes?

Data loss is a serious problem. Losing files means losing time and money while you restore or recover information essential to the business. In the case of a server failure or outage, valuable data could be lost from the database forever. Losing files and documents often has a lasting impact on the company’s financial health. Consequently, backup and recovery are essential to the overall viability of the business.

The dynamic architecture of Kubernetes puts a lot of demands on a backup and recovery solution, so finding the right one can be difficult. In Kubernetes, applications are microservices-based and dynamic in nature. Applications can be deployed using labels, Helm charts, or Operators. There are also multiple namespaces and resources that are either tied to a specific namespace or common across all namespaces. As such, metadata is vital for application-centric backup.

Considering all of the above, you need to identify software that can provide an application-centric, cloud-native data protection solution. TrilioVault for Kubernetes (TVK) offers a platform that satisfies these requirements.

The image below provides a quick overview of how backup works in TVK:

InfluxDB Backup with Trilio

Now, take a look at how TVK performs application consistent backup and restore of InfluxDB.

Pre-requisite: Install Trilio for Kubernetes (T4K) and configure using the following steps:

  • Install Test CSI Driver — Leverage the test hostpath driver if your environment does not support the driver with Snapshot capabilities today.
  • Software Access and Installation — Access software and install it based on the specific directions for your environment.
  • License — Leverage the Free Trial or Free Basic Edition by following instructions from the licensing page. If you already have an enterprise license, you can skip this step.

Create a target where backups will be stored

The Backup Target CRD specifies the backup storage media. TrilioVault supports either AWS S3-compatible object storage or NFS. All the backups created will be saved on the backup target specified in the Application CR spec. An Amazon S3 target example is provided below:

					apiVersion: triliovault.trilio.io/v1
kind: Target
  name: demo-s3-target
  type: ObjectStore
  vendor: AWS
    url: "https://s3.amazonaws.com"
    accessKey: "AaBbCcDdEeFf"
    secretKey: "BogusKeyEntry"
    bucketName: "S3_Bucket_US_East"
    region: "us-east-1"
  thresholdCapacity: 1000Gi
					$ kubectl create -f tv-backup-target.yaml

InfluxDB databases can be deployed on Kubernetes using Helm charts. In the example below, a new release called my-release is created from helm chart bitnami/influxdb using the helm install command.


$ helm repo add bitnami https://charts.bitnami.com/bitnami
$ helm repo update
$ helm install my release bitnami/influxdb

Add Test Data

Let’s add some test data to the InfluxDB database. Please follow the commands below to create a test database, table, and records.


$ oc exec -it influxdb-deployment-54c5c78664-f7z7n -- influx
Connected to https://localhost:8086 version 1.7.4
InfluxDB shell version 1.7.4
Enter an InfluxQL query
username: xxxx
password: xxxx
>use pirates
Using database pirates
>INSERT treasures,captain_id=dread_pirate_roberts value=801
>INSERT treasures,captain_id=flint value=29
>INSERT treasures,captain_id=sparrow value=38
>INSERT treasures,captain_id=tetra value=47
>INSERT treasures,captain_id=crunch value=109
>SELECT * FROM treasures
time                captain_id          value
----                ----------          -----
1613634634180857624 dread_pirate-roberts 801
1613634654035942732 flint                29
1613634666125641798 sparrow              38
1613634676936723375 tetra                47
1613634694340402128 crunch               109

Create Hooks

Hooks enable the ability to inject commands into pods or containers before and after a backup via pre/post commands. As a result, customers can take application consistent backups of their applications.

  • InfluxDB has its own built-in backup and restore capabilities. Their scope can range from individual databases to shards, policies, etc. A backup creates a copy of the metastore and shard data at a point in time and stores the copy in the specified directory.
  • A full backup creates a copy of the metastore and shard data.
  • An incremental backup creates a copy of whatever metastore and shard data has changed since the last incremental backup.
  • If there are no existing incremental backups, the system automatically performs a complete backup.
  • Use the InfluxDB backup command inside the TVK backup hook (see below).

apiVersion: triliovault.trilio.io/v1
kind: Hook
  name: influx-hook
        - "bash"
        - "-c"
        - "bkpfile=/tmp/snapdate +%Y%m%dT%H%M; influxdbackup $bkpfile"
    ignoreFailure: false
    maxRetryCount: 1
    timeoutSeconds: 10
        - "bash"
        - "-c"
					$kubectl create -f tv-influx-hook.yaml

Create BackupPlan

The BackupPlan specifies the backup job. The specification includes the backup schedule, backup target, and the resources to backup.


apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
name: influx-hook-label-backup-plan
backupNamespace: default
    name: demo-s3-target
- matchLabels:
  mode: Sequential
    - hook:
        name: influx-hook
          - matchLabels:
              app: influxdb
        regex: influxdb*
					$kubectl create -f tv-influx-backupplan.yaml

Create Backups


The backup takes either a full or incremental backup of the resources specified in the BackupPlan spec. The first backup of the application will always be a full backup, even if the user specifies their backup type as incremental.


apiVersion: triliovault.trilio.io/v1
kind: Backup
  name: influx-hook-label-full-backup
  type: Full
  scheduleType: Periodic
    name: influx-hook-label-backup-plan

$kubectl create -f tvk-mysql-backup.yaml

$kubectl create -f tvk-mysql-backup.yaml

Restore InfluxDB in Kubernetes

The restore specifies which backup resources should be restored. Resources can be restored to the same namespace or to a different one. Let’s take a look at restoring to a different namespace, e.g. “restore-ns.” This needs to be created if it does not already exist.


apiVersion: triliovault.trilio.io/v1
kind: Restore
  name: influx-label-restore
    name: influx-hook-label-backup-plan
    type: Backup
      name: influx-hook-label-full-backup
      name: demo-s3-target
  restoreNamespace: restore-ns
  skipIfAlreadyExists: true

$kubectl create -f tv-influx-restore.yaml
$kubectl create -f tv-influx-restore.yaml


When you use this procedure, backing up a time-series database like InfluxDB with TrilioVault for Kubernetes is as easy as it gets. The backups are application-consistent, and the “hooks” allow the user to perform any pre/post-backup actions. Furthermore, TrilioVault for Kubernetes provides a wide range of helpful features, including:

    • Native Kubernetes application

    • Stores metadata and all application resources to a specified target

    • Supports application deployment types of Helm/Label/Operators and S3 or NFS-based backup targets

    • Provides application hooks to ensure data-consistent backups

Altogether, TVK provides a strong platform for enterprise database backups.

For more information on TrilioVault for Kubernetes request a demo today.

Sachin Kulkarni, Solutions Engineer for Trilio