A operator for syncing any kind of resources across namespaces.
Most operators for syncing between namespaces only allow this for configmaps and secrets (which might also be most of the use-cases), but they won't be able to sync any other resources. So, I got curious about the limitations and started to build sync-operator
which can sync all kind of resources.
The downside is, that I didn't yet find an easy way for triggering a reconcile when the original resource or one of its replicas get adjusted. Probably, this might be the reason why similar solutions only sync on configmaps ans secrests. As a workaround, you have to set the interval
in the SyncObject
to match your needs.
- Adjust the
sync-operator-object-role
ClusterRole according to your needs. By default, it has permissions for all resources. You may want to adjust it to the resources you want to sync. - Pin the image version of the operator in the Deployment.
- Adjust the sample according to the resource you want to sync.
Apply the manifests:
kubectl apply -Rf deploy/
Lets imagine we have the following ConfigMap
we want to sync:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-sync
namespace: default
data:
key1: value1
When you have installed the CRDs and the Operator succesfully, you can create a SyncObject
and reference the ConfigMap
from above:
apiVersion: sync.sj14.github.io/v1alpha1
kind: SyncObject
metadata:
name: syncobject-sample
spec:
# interval: 1h # How often to sync the reference resource (defaults to 10h)
# targetNamespaces: # Namespaces to replicate the reference into (defaults to all namespaces)
# - kube-public
# ignoreNamespaces: # Namespaces to not replicate into
# - kube-system
# disableFinalizer: true # Do not remove replicas when the reference gets removed
reference: # Reference which will get replicated into other namespaces
group: "" # empty for core group
version: v1
kind: ConfigMap # case-sensitive!
name: test-sync
namespace: default
After applying the manifests, the ConfigMap
should get synced across the namespaces.