Skip to content

Commit b56c4a5

Browse files
authored
[Feature] ArangoClusterSynchronization controller (TG-190) (#876)
* [Feature] ArangoClusterSynchronization controller (TG-190) * helm chart * Fix model
1 parent 061d1d7 commit b56c4a5

File tree

24 files changed

+503
-131
lines changed

24 files changed

+503
-131
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
- Add ArangoJob and Apps Operator
1414
- Use Go 1.17
1515
- Add metrics for the plan actions
16+
- Add ArangoClusterSynchronization Operator
1617

1718
## [1.2.6](https://github.com/arangodb/kube-arangodb/tree/1.2.6) (2021-12-15)
1819
- Add ArangoBackup backoff functionality

Makefile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ MANIFESTPATHDEPLOYMENT := manifests/arango-deployment$(MANIFESTSUFFIX).yaml
9898
MANIFESTPATHDEPLOYMENTREPLICATION := manifests/arango-deployment-replication$(MANIFESTSUFFIX).yaml
9999
MANIFESTPATHBACKUP := manifests/arango-backup$(MANIFESTSUFFIX).yaml
100100
MANIFESTPATHAPPS := manifests/arango-apps$(MANIFESTSUFFIX).yaml
101+
MANIFESTPATHK2KCLUSTERSYNC := manifests/arango-k2kclustersync$(MANIFESTSUFFIX).yaml
101102
MANIFESTPATHSTORAGE := manifests/arango-storage$(MANIFESTSUFFIX).yaml
102103
MANIFESTPATHALL := manifests/arango-all$(MANIFESTSUFFIX).yaml
103104
MANIFESTPATHTEST := manifests/arango-test$(MANIFESTSUFFIX).yaml
@@ -106,6 +107,7 @@ KUSTOMIZEPATHDEPLOYMENT := manifests/kustomize/deployment/arango-deployment$(MAN
106107
KUSTOMIZEPATHDEPLOYMENTREPLICATION := manifests/kustomize/deployment-replication/arango-deployment-replication$(MANIFESTSUFFIX).yaml
107108
KUSTOMIZEPATHBACKUP := manifests/kustomize/backup/arango-backup$(MANIFESTSUFFIX).yaml
108109
KUSTOMIZEPATHAPPS := manifests/kustomize/apps/arango-apps$(MANIFESTSUFFIX).yaml
110+
KUSTOMIZEPATHK2KCLUSTERSYNC := manifests/kustomize/apps/arango-k2kclustersync$(MANIFESTSUFFIX).yaml
109111
KUSTOMIZEPATHSTORAGE := manifests/kustomize/storage/arango-storage$(MANIFESTSUFFIX).yaml
110112
KUSTOMIZEPATHALL := manifests/kustomize/all/arango-all$(MANIFESTSUFFIX).yaml
111113
KUSTOMIZEPATHTEST := manifests/kustomize/test/arango-test$(MANIFESTSUFFIX).yaml
@@ -333,41 +335,55 @@ $(eval $(call manifest-generator, deployment, kube-arangodb, \
333335
--set "operator.features.deploymentReplications=false" \
334336
--set "operator.features.storage=false" \
335337
--set "operator.features.apps=false" \
338+
--set "operator.features.k8sToK8sClusterSync=false" \
336339
--set "operator.features.backup=false"))
337340

338341
$(eval $(call manifest-generator, deployment-replication, kube-arangodb, \
339342
--set "operator.features.deployment=false" \
340343
--set "operator.features.deploymentReplications=true" \
341344
--set "operator.features.storage=false" \
342345
--set "operator.features.apps=false" \
346+
--set "operator.features.k8sToK8sClusterSync=false" \
343347
--set "operator.features.backup=false"))
344348

345349
$(eval $(call manifest-generator, storage, kube-arangodb, \
346350
--set "operator.features.deployment=false" \
347351
--set "operator.features.deploymentReplications=false" \
348352
--set "operator.features.storage=true" \
349353
--set "operator.features.apps=false" \
354+
--set "operator.features.k8sToK8sClusterSync=false" \
350355
--set "operator.features.backup=false"))
351356

352357
$(eval $(call manifest-generator, backup, kube-arangodb, \
353358
--set "operator.features.deployment=false" \
354359
--set "operator.features.deploymentReplications=false" \
355360
--set "operator.features.storage=false" \
356361
--set "operator.features.apps=false" \
362+
--set "operator.features.k8sToK8sClusterSync=false" \
357363
--set "operator.features.backup=true"))
358364

359365
$(eval $(call manifest-generator, apps, kube-arangodb, \
360366
--set "operator.features.deployment=false" \
361367
--set "operator.features.deploymentReplications=false" \
362368
--set "operator.features.storage=false" \
363369
--set "operator.features.apps=true" \
370+
--set "operator.features.k8sToK8sClusterSync=false" \
371+
--set "operator.features.backup=false"))
372+
373+
$(eval $(call manifest-generator, k2kclustersync, kube-arangodb, \
374+
--set "operator.features.deployment=false" \
375+
--set "operator.features.deploymentReplications=false" \
376+
--set "operator.features.storage=false" \
377+
--set "operator.features.apps=false" \
378+
--set "operator.features.k8sToK8sClusterSync=true" \
364379
--set "operator.features.backup=false"))
365380

366381
$(eval $(call manifest-generator, all, kube-arangodb, \
367382
--set "operator.features.deployment=true" \
368383
--set "operator.features.deploymentReplications=true" \
369384
--set "operator.features.storage=true" \
370385
--set "operator.features.apps=true" \
386+
--set "operator.features.k8sToK8sClusterSync=true" \
371387
--set "operator.features.backup=true"))
372388

373389
.PHONY: chart-crd
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
name: arangoclustersynchronizations.database.arangodb.com
5+
labels:
6+
app.kubernetes.io/name: {{ template "kube-arangodb-crd.name" . }}
7+
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
8+
app.kubernetes.io/managed-by: {{ .Release.Service }}
9+
app.kubernetes.io/instance: {{ .Release.Name }}
10+
release: {{ .Release.Name }}
11+
spec:
12+
group: database.arangodb.com
13+
names:
14+
kind: ArangoClusterSynchronization
15+
listKind: ArangoClusterSynchronizationList
16+
plural: arangoclustersynchronizations
17+
singular: arangoclustersynchronization
18+
shortNames:
19+
- arangoclustersync
20+
scope: Namespaced
21+
versions:
22+
- name: v1
23+
schema:
24+
openAPIV3Schema:
25+
type: object
26+
x-kubernetes-preserve-unknown-fields: true
27+
served: true
28+
storage: true
29+
subresources:
30+
status: {}
31+
- name: v2alpha1
32+
schema:
33+
openAPIV3Schema:
34+
type: object
35+
x-kubernetes-preserve-unknown-fields: true
36+
served: true
37+
storage: false
38+
subresources:
39+
status: {}

chart/kube-arangodb/README.md

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,20 @@ Possible Operators:
2424
- `ArangoDeployment` - enabled by default
2525
- `ArangoDeploymentReplications` - enabled by default
2626
- `ArangoLocalStorage` - disabled by default
27+
- `ArangoBackup` - disabled by default
28+
- `ArangoJob` - disabled by default
29+
- `ArangoClusterSynchronization` - disabled by default
2730

2831
To install Operators in mode "One per Helm Release" we can use:
2932

3033
```
3134
helm install --name arango-deployment kube-arangodb.tar.gz \
3235
--set operator.features.deployment=true \
3336
--set operator.features.deploymentReplications=false \
34-
--set operator.features.storage=false
35-
36-
37-
helm install --name arango-deployment-replications kube-arangodb.tar.gz \
38-
--set operator.features.deployment=false \
39-
--set operator.features.deploymentReplications=true \
40-
--set operator.features.storage=false
41-
42-
43-
helm install --name arango-storage kube-arangodb.tar.gz \
44-
--set operator.features.deployment=false \
45-
--set operator.features.deploymentReplications=false \
46-
--set operator.features.storage=true
37+
--set operator.features.storage=false \
38+
--set operator.features.backup=false \
39+
--set operator.features.apps=false \
40+
--set operator.features.k8sToK8sClusterSync=false
4741
```
4842

4943

@@ -155,6 +149,18 @@ Define if ArangoBackup Operator should be enabled.
155149

156150
Default: `false`
157151

152+
### `operator.features.apps`
153+
154+
Define if ArangoJob Operator should be enabled.
155+
156+
Default: `false`
157+
158+
### `operator.features.k8sToK8sClusterSync`
159+
160+
Define if ArangoClusterSynchronization Operator should be enabled.
161+
162+
Default: `false`
163+
158164
### `rbac.enabled`
159165

160166
Define if RBAC should be enabled.

chart/kube-arangodb/templates/deployment.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ spec:
105105
{{- end }}
106106
{{ if .Values.operator.features.apps }}
107107
- --operator.apps
108+
{{- end }}
109+
{{ if .Values.operator.features.k8sToK8sClusterSync }}
110+
- --operator.k2k-cluster-sync
108111
{{- end }}
109112
- --chaos.allowed={{ .Values.operator.allowChaos }}
110113
{{- if .Values.operator.args }}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{{ if .Values.rbac.enabled -}}
2+
{{ if not (eq .Values.operator.scope "namespaced") -}}
3+
{{ if .Values.operator.features.k8sToK8sClusterSync -}}
4+
5+
apiVersion: rbac.authorization.k8s.io/v1
6+
kind: ClusterRoleBinding
7+
metadata:
8+
name: {{ template "kube-arangodb.rbac-cluster" . }}-k2kclustersync
9+
labels:
10+
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
11+
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
12+
app.kubernetes.io/managed-by: {{ .Release.Service }}
13+
app.kubernetes.io/instance: {{ .Release.Name }}
14+
release: {{ .Release.Name }}
15+
roleRef:
16+
apiGroup: rbac.authorization.k8s.io
17+
kind: ClusterRole
18+
name: {{ template "kube-arangodb.rbac-cluster" . }}-k2kclustersync
19+
subjects:
20+
- kind: ServiceAccount
21+
name: {{ template "kube-arangodb.operatorName" . }}
22+
namespace: {{ .Release.Namespace }}
23+
24+
{{- end }}
25+
{{- end }}
26+
{{- end }}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{{ if .Values.rbac.enabled -}}
2+
{{ if not (eq .Values.operator.scope "namespaced") -}}
3+
{{ if .Values.operator.features.k8sToK8sClusterSync -}}
4+
5+
apiVersion: rbac.authorization.k8s.io/v1
6+
kind: ClusterRole
7+
metadata:
8+
name: {{ template "kube-arangodb.rbac-cluster" . }}-k2kclustersync
9+
labels:
10+
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
11+
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
12+
app.kubernetes.io/managed-by: {{ .Release.Service }}
13+
app.kubernetes.io/instance: {{ .Release.Name }}
14+
release: {{ .Release.Name }}
15+
rules:
16+
- apiGroups: ["apiextensions.k8s.io"]
17+
resources: ["customresourcedefinitions"]
18+
verbs: ["get", "list", "watch"]
19+
20+
{{- end }}
21+
{{- end }}
22+
{{- end }}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{{ if .Values.rbac.enabled -}}
2+
{{ if .Values.operator.features.k8sToK8sClusterSync -}}
3+
4+
apiVersion: rbac.authorization.k8s.io/v1
5+
kind: RoleBinding
6+
metadata:
7+
name: {{ template "kube-arangodb.rbac" . }}-k2kclustersync
8+
namespace: {{ .Release.Namespace }}
9+
labels:
10+
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
11+
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
12+
app.kubernetes.io/managed-by: {{ .Release.Service }}
13+
app.kubernetes.io/instance: {{ .Release.Name }}
14+
release: {{ .Release.Name }}
15+
roleRef:
16+
apiGroup: rbac.authorization.k8s.io
17+
kind: Role
18+
name: {{ template "kube-arangodb.rbac" . }}-k2kclustersync
19+
subjects:
20+
- kind: ServiceAccount
21+
name: {{ template "kube-arangodb.operatorName" . }}
22+
namespace: {{ .Release.Namespace }}
23+
24+
{{- end }}
25+
{{- end }}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{{ if .Values.rbac.enabled -}}
2+
{{ if .Values.operator.features.k8sToK8sClusterSync -}}
3+
4+
apiVersion: rbac.authorization.k8s.io/v1
5+
kind: Role
6+
metadata:
7+
name: {{ template "kube-arangodb.rbac" . }}-k2kclustersync
8+
namespace: {{ .Release.Namespace }}
9+
labels:
10+
app.kubernetes.io/name: {{ template "kube-arangodb.name" . }}
11+
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
12+
app.kubernetes.io/managed-by: {{ .Release.Service }}
13+
app.kubernetes.io/instance: {{ .Release.Name }}
14+
release: {{ .Release.Name }}
15+
rules:
16+
- apiGroups: [""]
17+
resources: ["pods", "services", "endpoints"]
18+
verbs: ["get", "update"]
19+
- apiGroups: [""]
20+
resources: ["events"]
21+
verbs: ["*"]
22+
- apiGroups: [""]
23+
resources: ["secrets"]
24+
verbs: ["get"]
25+
- apiGroups: ["apps"]
26+
resources: ["deployments", "replicasets"]
27+
verbs: ["get"]
28+
- apiGroups: ["database.arangodb.com"]
29+
resources: ["arangodeployments", "arangoclustersynchronizations"]
30+
verbs: ["get", "list", "watch"]
31+
32+
{{- end }}
33+
{{- end }}

chart/kube-arangodb/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ operator:
3939
storage: false
4040
backup: false
4141
apps: false
42+
k8sToK8sClusterSync: false
4243

4344
images:
4445
base: alpine:3.11

0 commit comments

Comments
 (0)