Before 2022 ended, we released the CSI 2.5 plugins for our storage arrays, you can read all about it here but, as I said before, this was just the beginning..

Today, I would like to announce a new feature that have been in the making, for quite a while:

Application Mobility

https://dell.github.io/csm-docs/docs/applicationmobility/


NOTE: This tech-preview release is not intended for use in production environment.

NOTE: Application Mobility requires a time-based license. See Deployment for instructions.

Container Storage Modules for Application Mobility provide Kubernetes administrators the ability to clone their stateful application workloads and application data to other clusters, either on-premise or in the cloud.

Application Mobility uses Velero and its integration of Restic to copy both application metadata and data to object storage. When a backup is requested, Application Mobility uses these options to determine how the application data is backed up:

  • If Volume Group Snapshots are enabled on the CSI driver backing the application’s Persistent Volumes, crash consistent snapshots of all volumes are used for the backup.
  • If Volume Snapshots are enabled on the Kubernetes cluster and supported by the CSI driver, individual snapshots are used for each Persistent Volume used by the application.
  • If no snapshot options are enabled, default to using full copies of each Persistent Volume used by the application.

After a backup has been created, it can be restored on the same Kubernetes cluster or any other cluster(s) if this criteria is met:

  • Application Mobility is installed on the target cluster(s).
  • The target cluster(s) has access to the object store bucket. For example, if backing up and restoring an application from an on-premise Kubernetes cluster to AWS EKS, an S3 bucket can be used if both the on-premise and EKS cluster have access to it.
  • Storage Class is defined on the target cluster(s) to support creating the required Persistent Volumes used by the application.

Supported Data Movers

Data Mover

Description

Restic Persistent Volume data will be stored in the provided object store bucket

Supported Operating Systems/Container Orchestrator Platforms

COP/OS

Supported Versions

Kubernetes 1.23, 1.24, 1.25
Red Hat OpenShift 4.10, 4.11
RHEL 7.x, 8.x
CentOS 7.8, 7.9


Deployment

Pre-requisites


Installation

  1. Create a namespace where Application Mobility will be installed.
  2. kubectl create ns application-mobility
  3. Edit the license Secret file (see Pre-requisites above) and set the correct namespace (ex: namespace: application-mobility)
  4. Create the Secret containing a license file
  5. kubectl apply -f license.yml
  6. Add the Dell Helm Charts repository
  7. helm repo add dell https://dell.github.io/helm-charts
  8. Either create a values.yml file or provide the –set options to the helm install to override default values from the Configuration section.
  9. Install the helm chart
  10. helm install application-mobility -n application-mobility dell/csm-application-mobility

Configuration

This table lists the configurable parameters of the Application Mobility Helm chart and their default values.


Use Cases

After Application Mobility is installed, the dellctl CLI can be used to register clusters and manage backups and restores of applications. These examples also provide references for using the Application Mobility Custom Resource Definitions (CRDs) to define Custom Resources (CRs) as an alternative to using the dellctl CLI.

Backup and Restore an Application

This example details the steps when an application in namespace demo1 is being backed up and then later restored to either the same cluster or another cluster. In this sample, both Application Mobility and Velero are installed in the application-mobility namespace.

  1. If Velero is not installed in the default velero namespace and dellctl is being used, set this environment variable to the namespace where it is installed:
  2. export VELERO_NAMESPACE=application-mobility
  3. On the source cluster, create a Backup by providing a name and the included namespace where the application is installed. The application and its data will be available in the object store bucket and can be restored at a later time.

    Using dellctl:

    dellctl backup create backup1 –include-namespaces demo1 –namespace application-mobility

    Using Backup Custom Resource:

    apiVersion: mobility.storage.dell.com/v1alpha1

    kind: Backup

    metadata:

    name: backup1

    namespace: application-mobility

    spec:

    includedNamespaces: [demo1]

    datamover: Restic

    clones: []

  4. Monitor the backup status until it is marked as Completed.

    Using dellctl:

    dellctl backup get –namespace application-mobility

    Using kubectl:

    kubectl describe backups.mobility.storage.dell.com/backup1 -n application-mobility

  5. If the Storage Class name on the target cluster is different than the Storage Class name on the source cluster where the backup was created, a mapping between source and target Storage Class names must be defined. See Changing PV/PVC Storage Classes.
  6. The application and its data can be restored on either the same cluster or another cluster by referring to the backup name and providing an optional mapping of the original namespace to the target namespace.

    Using dellctl:

    dellctl restore create restore1 –from-backup backup1 \

    –namespace-mappings “demo1:restorens1” –namespace application-mobility

    Using Restore Custom Resource:

    apiVersion: mobility.storage.dell.com/v1alpha1

    kind: Restore

    metadata:

    name: restore1

    namespace: application-mobility

    spec:

    backupName: backup1

    namespaceMapping:

    “demo1” : “restorens1”

  7. Monitor the restore status until it is marked as Completed.

    Using dellctl:

    dellctl restore get –namespace application-mobility

    Using kubectl:

    kubectl describe restores.mobility.storage.dell.com/restore1 -n application-mobility

 

Clone an Application

This example details the steps when an application in namespace demo1 is cloned from a source cluster to a target cluster in a single operation. In this sample, both Application Mobility and Velero are installed in the application-mobility namespace.

  1. If Velero is not installed in the default velero namespace and dellctl is being used, set this environment variable to the namespace where it is installed:
  2. export VELERO_NAMESPACE=application-mobility
  3. Register the target cluster if using dellctl
  4. dellctl cluster add -n targetcluster -u <kube-system-namespace-uuid> -f ~/kubeconfigs/target-cluster-kubeconfig
  5. If the Storage Class name on the target cluster is different than the Storage Class name on the source cluster where the backup was created, a mapping between source and target Storage Class names must be defined. See Changing PV/PVC Storage Classes.
  6. Create a Backup by providing a name, the included namespace where the application is installed, and the target cluster and namespace mapping where the application will be restored.

    Using dellctl:

    dellctl backup create backup1 –include-namespaces demo1 –clones “targetcluster/demo1:restore-ns2” \

    –namespace application-mobility

    Using Backup Custom Resource:

    apiVersion: mobility.storage.dell.com/v1alpha1

    kind: Backup

    metadata:

    name: backup1

    namespace: application-mobility

    spec:

    includedNamespaces: [demo1]

    datamover: Restic

    clones:

    – namespaceMapping:

    “demo1”: “restore-ns2”

    restoreOnceAvailable: true

    targetCluster: targetcluster

  7. Monitor the restore status on the target cluster until it is marked as Completed.

    Using dellctl:

    dellctl restore get –namespace application-mobility

    Using kubectl:

    kubectl get restores.mobility.storage.dell.com -n application-mobility

    kubectl describe restores.mobility.storage.dell.com/<restore-name> -n application-mobility

Changing PV/PVC Storage Classes

Create a ConfigMap on the target cluster in the same namespace where Application Mobility is installed. The data field must contain a mapping of source Storage Class name to target Storage Class name. See Velero’s documentation for Changing PV/PVC Storage Classes for additional details.

apiVersion: v1

kind: ConfigMap

metadata:

name: change-storage-class-config

namespace: <application-mobility-namespace>

labels:

velero.io/plugin-config: “”

velero.io/change-storage-class: RestoreItemAction

data:

<source-storage-class-name>: <target-storage-class-name>

Troubleshooting

Frequently Asked Questions

  1. How can I diagnose an issue with Application Mobility?
  2. How can I view logs?
  3. How can I debug and troubleshoot issues with Kubernetes?
  4. Why are there error logs about a license?

How can I diagnose an issue with Application Mobility?

Once you have attempted to install Application Mobility to your Kubernetes or OpenShift cluster, the first step in troubleshooting is locating the problem.

Get information on the state of your Pods.

kubectl get pods -n $namespace

Get verbose output of the current state of a Pod.

kubectl describe pod -n $namespace $pod

How can I view logs?

View pod container logs. Output logs to a file for further debugging.

kubectl logs -n $namespace $pod $container

kubectl logs -n $namespace $pod $container > $logFileName

How can I debug and troubleshoot issues with Kubernetes?

Why are there error logs about a license?

Application Mobility requires a license in order to function. See the Deployment instructions for steps to request a license.

There will be errors in the logs about the license for these cases:

  • License does not exist
  • License is not valid for the current Kubernetes cluster
  • License has expired

Uninstallation

This section outlines the uninstallation steps for Application Mobility.

Uninstall the Application Mobility Helm Chart

This command removes all the Kubernetes components associated with the chart.

$ helm delete [APPLICATION_MOBILITY_NAME] –namespace [APPLICATION_MOBILITY_NAMESPACE]

You can watch a demo below, showing you how to move data from Dell Unity to Dell PowerStore, both, On-Premises

And below, you can watch a demo below, showing you how it all looks, moving data from on-premises to PowerFlex on AWS (Off-Premises)

Leave a Reply