Tools
repctl
repctl is a command-line client for configuring replication
and managing replicated resources between multiple Kubernetes clusters.
Usage
Managing Clusters
To begin managing replication with repctl you need to add your Kubernetes
clusters, you can do that using cluster add command:
./repctl cluster add -f <config-file> -n <name>
You can view clusters that are currently being managed by repctl
by running cluster get command:
./repctl cluster get
Or, alternatively, using get cluster command:
./repctl get cluster
Also, you can inject information about all of your current clusters as
config maps into the same clusters, so it can be used by dell-csi-replicator:
./repctl cluster inject
NOTE: Please ensure that CA certificate is present in kubeconfig, as repctl --use-sa flag requires it for proper operation.
You can also generate kubeconfigs from existing replication service accounts and inject them in config maps by providing --use-sa flag:
./repctl cluster inject --use-sa
Querying Resources
After adding clusters you want to manage with repctl you can query
resources from multiple clusters at once using get command.
For example, this command will list all storage classes in all clusters
that currently are being managed by repctl:
./repctl get storageclasses --all
If you want to query some particular clusters you can do that by specifying with the
clusters flag:
./repctl get pv --clusters cluster-1,cluster-3
All other different flags for querying resources you can check using
included into the tool help flag -h.
Creating Resources
Generic
Generic create command allows you to apply provided config file into
multiple clusters at once:
/repctl create -f <path-to-file>
PersistentVolumeClaims
You can use repctl to create PVCs from Replication Group’s PVs
on the target cluster:
./repctl create pvc --rg <rg-name> -t <target-namespace> --dry-run=false
By default, ‘create pvc’ will do a ‘dry-run’ while creating PVCs. If you don’t encounter any issues in the dry-run, then you can re-run the command by turning off the dry-run flag to false.
Storage Classes
repctl can create special replication enabled storage classes from
provided config, you can find example configs in examples folder. The command would look similar to below:
./repctl create sc --from-config <config-file>`
Single Cluster Replication
repctl supports working with replication within a single Kubernetes cluster.
Just add cluster you want to use with cluster add command, and you can list, filter, and create resources.
Volumes and ReplicationGroups created as “target” resources would be prefixed with replicated-
so you can easily differentiate them.
You can also differentiate between single cluster replication configured StorageClasses and ReplicationGroups and multi-cluster ones
by checking remoteClusterID field, for a single cluster the field would be set to self.
To create replication enabled storage classes for single cluster replication using create sc command,
be sure to set both sourceClusterID and targetClusterID to the same clusterID and continue as usual with executing the command.
The name of the StorageClass resource that is created as the “target” will be appended with -tgt.
Executing Actions
repctl can be used to execute various replication actions on ReplicationGroups.
Failover
This command will perform a planned failover to a cluster or an RG.
When working with multiple clusters, you can perform failover by specifying the target cluster ID. To do that, use --target <targetClusterID> parameter:
./repctl --rg <rg-id> failover --target <tgt-cluster-id>
When working with replication within a single cluster, you can perform failover by specifying the target replication group ID. To do that, use --target <rg-id> parameter:
./repctl --rg <rg-id> failover --target <tgt-rg-id>
In both scenarios, repctl will patch the CR at the source site with action FAILOVER_REMOTE.
You can also provide --unplanned parameter, then repctl will perform an unplanned failover to a given cluster or an RG. Instead of FAILOVER_REMOTE on the source cluster’s CR, repctl will patch CR at target cluster with action UNPLANNED_FAILOVER_LOCAL.
Reprotect
This command will perform a reprotect at the specified cluster or the RG.
When working with multiple clusters, you can perform reprotect by specifying the cluster ID. To do that, use --at <clusterID> parameter:
./repctl --rg <rg-id> reprotect --at <tgt-cluster-id>
When working with replication within a single cluster, you can perform reprotect by specifying the replication group ID. To do that, use --rg <rg-id> parameter:
./repctl --rg <rg-id> reprotect
In both scenarios repctl will patch the CR at the source site with action REPROTECT_LOCAL.
Failback
This command will perform a planned failback to a cluster or an RG.
When working with multiple clusters, you can perform failback by specifying the cluster ID. To do that, use --target <clusterID> parameter:
./repctl --rg <rg-id> failback --target <tgt-cluster-id>
When working with replication within a single cluster, you can perform failback by specifying the replication group ID. To do that, use --target <rg-id> parameter:
./repctl --rg <rg-id> failback --target <tgt-rg-id>
In both scenarios, repctl will patch the CR at the source site with action FAILBACK_LOCAL.
You can also provide --discard parameter, then repctl will perform a failback but discard any writes at target, instead of FAILBACK_LOCAL repctl will patch CR at target cluster with action ACTION_FAILBACK_DISCARD_CHANGES_LOCAL.
Swap
This command will perform a swap at a specified cluster or an RG.
When working with multiple clusters, you can perform swap by specifying the cluster ID. To do that, use --at <clusterID> parameter:
./repctl --rg <rg-id> swap --at <tgt-cluster-id>
When working with replication within a single cluster, you can perform swap by specifying the replication group ID. To do that, use --rg <rg-id> parameter:
./repctl --rg <rg-id> swap
repctl will patch CR at the source cluster with action SWAP_LOCAL.
Wait For Completion
When executing actions you can provide --wait argument to make repctl wait for completion of specified action.
For example when executing failover:
./repctl --rg <rg-id> failover --target <tgt-cluster-id> --wait
Maintenance Actions
You can also use exec command to execute maintenance actions such as suspend, resume, and sync.
For single or multi-cluster config:
./repctl --rg <rg-id> exec -a <ACTION>
Where <ACTION> can be one of the following:
suspendwill suspend replication, changes will no longer be synced between replication sites.resumewill resume replication, canceling the effect ofsuspendaction.syncwill force synchronization of change between replication sites.