Skip to main content

Helm Values Reference

Complete reference for all configurable values in the DR-Syncer Helm chart.

Quick Start​

# Install with defaults
helm install dr-syncer oci://ghcr.io/supporttools/dr-syncer \
--namespace dr-syncer \
--create-namespace

# Install with custom values
helm install dr-syncer oci://ghcr.io/supporttools/dr-syncer \
--namespace dr-syncer \
--create-namespace \
--values values.yaml

Controller Configuration​

Core Settings​

ParameterDescriptionDefault
replicaCountNumber of controller replicas1
controller.logLevelLog level (debug, info, warn, error)"debug"
controller.logVerbosityKubernetes client-go verbosity (0-9)9
controller.metricsAddrPrometheus metrics bind address":8080"
controller.probeAddrHealth probe bind address":8081"
controller.enableLeaderElectionEnable leader election for HAtrue
controller.leaderElectionIDLeader election lock name"dr-syncer.io"
controller.syncIntervalInterval between sync operations"5m"
controller.resyncPeriodFull resource resync period"1h"
controller.ignoreCertSkip TLS verification for remote clusterstrue
# Example: Production configuration
controller:
logLevel: "info"
logVerbosity: 0
enableLeaderElection: true
syncInterval: "10m"
resyncPeriod: "2h"
ignoreCert: false # Enforce TLS verification

Watch Configuration​

Controls behavior for Continuous replication mode.

ParameterDescriptionDefault
controller.watch.bufferSizeWatch event buffer size1024
controller.watch.maxConcurrentReconcilesMaximum concurrent reconciliations5
controller.watch.backgroundSyncIntervalBackground sync interval for continuous mode"1h"
# Example: High-throughput configuration
controller:
watch:
bufferSize: 2048
maxConcurrentReconciles: 10
backgroundSyncInterval: "30m"

Default Replication Settings​

Default values used when not specified in CRDs.

ParameterDescriptionDefault
controller.replication.defaultModeDefault replication mode"Scheduled"
controller.replication.defaultScheduleDefault cron schedule"*/5 * * * *"
controller.replication.defaultScaleToZeroScale deployments to 0 in DRtrue
controller.replication.defaultResourceTypesDefault resource types to syncSee below

Default resource types:

controller:
replication:
defaultResourceTypes:
- configmaps
- secrets
- deployments
- services
- ingresses
- persistentvolumeclaims

Image Configuration​

Controller Image​

ParameterDescriptionDefault
image.repositoryController image repositorydocker.io/supporttools/dr-syncer
image.pullPolicyImage pull policyIfNotPresent
image.tagImage tag (defaults to chart appVersion)"latest"

Agent Image​

The agent runs as a DaemonSet on remote clusters for PVC synchronization.

ParameterDescriptionDefault
agent.image.repositoryAgent image repositorydocker.io/supporttools/dr-syncer-agent
agent.image.pullPolicyAgent image pull policyIfNotPresent
agent.image.tagAgent image tag"latest"

Rsync Pod Image​

Used for rsync operations during PVC synchronization.

ParameterDescriptionDefault
rsyncPod.image.repositoryRsync pod image repositorydocker.io/supporttools/dr-syncer-rsync
rsyncPod.image.pullPolicyRsync pod image pull policyIfNotPresent
rsyncPod.image.tagRsync pod image tag"latest"
# Example: Using private registry
image:
repository: registry.example.com/dr-syncer/controller
pullPolicy: Always
tag: "v0.1.0"

agent:
image:
repository: registry.example.com/dr-syncer/agent
tag: "v0.1.0"

rsyncPod:
image:
repository: registry.example.com/dr-syncer/rsync
tag: "v0.1.0"

imagePullSecrets:
- name: registry-credentials

Rsync Configuration​

Controls PVC data synchronization behavior.

SSH Settings​

ParameterDescriptionDefault
rsync.ssh.portSSH port for rsync connections2222
rsync.concurrencyConcurrent rsync operations3

Retry Configuration​

ParameterDescriptionDefault
rsync.retryConfig.maxRetriesMaximum retry attempts5
rsync.retryConfig.initialDelayInitial retry delay"5s"
rsync.retryConfig.maxDelayMaximum retry delay"5m"

Health Check Configuration​

ParameterDescriptionDefault
rsync.healthCheck.intervalHealth check interval"5m"
rsync.healthCheck.sshTimeoutSSH connection timeout"10s"
rsync.healthCheck.retryAttemptsHealth check retry attempts3
rsync.healthCheck.retryIntervalInterval between retry attempts"30s"
# Example: Aggressive retry configuration
rsync:
ssh:
port: 2222
concurrency: 5
retryConfig:
maxRetries: 10
initialDelay: "10s"
maxDelay: "10m"
healthCheck:
interval: "2m"
sshTimeout: "30s"
retryAttempts: 5
retryInterval: "1m"

PVC Mount Configuration​

Controls temporary pods used for PVC volume access.

ParameterDescriptionDefault
pvcMount.pauseImagePause container image for mount podsk8s.gcr.io/pause:3.6
pvcMount.podRunningTimeoutTimeout waiting for mount pods"3m"
pvcMount.resources.requests.cpuCPU request for mount pods"10m"
pvcMount.resources.requests.memoryMemory request for mount pods"32Mi"
pvcMount.resources.limits.cpuCPU limit for mount pods"50m"
pvcMount.resources.limits.memoryMemory limit for mount pods"64Mi"
# Example: Air-gapped environment
pvcMount:
pauseImage: "registry.example.com/pause:3.6"
podRunningTimeout: "5m"
resources:
requests:
cpu: "20m"
memory: "64Mi"
limits:
cpu: "100m"
memory: "128Mi"

Resource Configuration​

Controller Resources​

ParameterDescriptionDefault
resources.requests.cpuCPU request100m
resources.requests.memoryMemory request128Mi
resources.limits.cpuCPU limit500m
resources.limits.memoryMemory limit512Mi
# Example: Production sizing
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi

See Performance & Capacity Planning for sizing recommendations.


Pod Scheduling​

Node Selector​

nodeSelector:
kubernetes.io/os: linux
node-role.kubernetes.io/infra: "true"

Tolerations​

tolerations:
- key: "node-role.kubernetes.io/infra"
operator: "Exists"
effect: "NoSchedule"

Affinity​

affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/name: dr-syncer
topologyKey: kubernetes.io/hostname

Service Account​

ParameterDescriptionDefault
serviceAccount.createCreate service accounttrue
serviceAccount.annotationsService account annotations{}
serviceAccount.nameService account name"dr-syncer"
# Example: With IAM role annotation (AWS)
serviceAccount:
create: true
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789:role/dr-syncer-role
name: "dr-syncer"

RBAC Configuration​

ParameterDescriptionDefault
rbac.createCreate cluster-wide RBAC resourcestrue
namespaceRBAC.createCreate namespace-scoped RBAC resourcestrue

CRD Configuration​

ParameterDescriptionDefault
crds.installInstall CRDstrue
crds.keepOnUninstallKeep CRDs on chart uninstalltrue

Security Configuration​

Pod Security Context​

podSecurityContext:
fsGroup: 2000
runAsNonRoot: true

Container Security Context​

securityContext:
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000

Full Example: Production Configuration​

# Production values.yaml
replicaCount: 1

image:
repository: docker.io/supporttools/dr-syncer
pullPolicy: IfNotPresent
tag: "v0.1.0"

agent:
image:
repository: docker.io/supporttools/dr-syncer-agent
tag: "v0.1.0"

rsyncPod:
image:
repository: docker.io/supporttools/dr-syncer-rsync
tag: "v0.1.0"

resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi

controller:
logLevel: "info"
logVerbosity: 0
enableLeaderElection: true
syncInterval: "10m"
resyncPeriod: "2h"
ignoreCert: false
watch:
bufferSize: 2048
maxConcurrentReconciles: 10
backgroundSyncInterval: "1h"
replication:
defaultMode: "Scheduled"
defaultSchedule: "*/15 * * * *"
defaultScaleToZero: true

rsync:
ssh:
port: 2222
concurrency: 5
retryConfig:
maxRetries: 10
initialDelay: "10s"
maxDelay: "10m"
healthCheck:
interval: "5m"
sshTimeout: "30s"
retryAttempts: 5
retryInterval: "1m"

pvcMount:
pauseImage: "k8s.gcr.io/pause:3.6"
podRunningTimeout: "5m"

serviceAccount:
create: true
name: "dr-syncer"

rbac:
create: true

crds:
install: true
keepOnUninstall: true

podSecurityContext:
fsGroup: 2000
runAsNonRoot: true

securityContext:
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000

nodeSelector:
kubernetes.io/os: linux

tolerations: []

affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/name: dr-syncer
topologyKey: kubernetes.io/hostname

Upgrade Procedures​

Pre-Upgrade Checklist​

  1. Backup CRDs: Export current CRD definitions

    kubectl get crds -o yaml | grep dr-syncer.io > crds-backup.yaml
  2. Document current values:

    helm get values dr-syncer -n dr-syncer > current-values.yaml
  3. Check release notes: Review changelog for breaking changes

Upgrade Steps​

# 1. Update Helm repository
helm repo update

# 2. Preview changes
helm diff upgrade dr-syncer oci://ghcr.io/supporttools/dr-syncer \
--namespace dr-syncer \
--values values.yaml

# 3. Perform upgrade
helm upgrade dr-syncer oci://ghcr.io/supporttools/dr-syncer \
--namespace dr-syncer \
--values values.yaml \
--wait

# 4. Verify upgrade
kubectl get pods -n dr-syncer
kubectl get crds | grep dr-syncer.io

Rollback Procedures​

# List release history
helm history dr-syncer -n dr-syncer

# Rollback to previous version
helm rollback dr-syncer <revision> -n dr-syncer

# Verify rollback
kubectl get pods -n dr-syncer

Downgrade Procedures​

Downgrades require careful handling of CRDs to avoid data loss.

Pre-Downgrade Checklist​

  1. Export all DR-Syncer resources:

    kubectl get remoteclusters -A -o yaml > remoteclusters-backup.yaml
    kubectl get replications -A -o yaml > replications-backup.yaml
    kubectl get namespacemappings -A -o yaml > namespacemappings-backup.yaml
    kubectl get pvcsyncoperations -A -o yaml > pvcsyncops-backup.yaml
  2. Check compatibility: Verify target version supports your CRD schemas

Downgrade Steps​

# 1. Scale down controller
kubectl scale deployment dr-syncer -n dr-syncer --replicas=0

# 2. Wait for termination
kubectl wait --for=delete pod -l app.kubernetes.io/name=dr-syncer -n dr-syncer --timeout=60s

# 3. Downgrade Helm release
helm upgrade dr-syncer oci://ghcr.io/supporttools/dr-syncer \
--namespace dr-syncer \
--version <target-version> \
--values values.yaml

# 4. Verify CRDs are compatible
kubectl get crds | grep dr-syncer.io

# 5. Verify resources still exist
kubectl get remoteclusters -A
kubectl get replications -A

Troubleshooting Downgrades​

If resources fail validation after downgrade:

# Remove problematic fields from resources
kubectl patch remotecluster <name> -n <namespace> --type=json \
-p='[{"op": "remove", "path": "/spec/newField"}]'

# Or restore from backup
kubectl apply -f remoteclusters-backup.yaml