Skip to content

Commit 550ace8

Browse files
committed
Splitting operator in two parts
1 parent fd7b559 commit 550ace8

File tree

16 files changed

+452
-205
lines changed

16 files changed

+452
-205
lines changed

Makefile

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,11 @@ else
4040
IMAGESUFFIX := :dev
4141
endif
4242

43-
ifndef MANIFESTPATH
44-
MANIFESTPATH := manifests/arango-operator-dev.yaml
43+
ifndef MANIFESTSUFFIX
44+
MANIFESTSUFFIX := -dev
4545
endif
46+
MANIFESTPATHDEPLOYMENT := manifests/arango-deployment$(MANIFESTSUFFIX).yaml
47+
MANIFESTPATHSTORAGE := manifests/arango-storage$(MANIFESTSUFFIX).yaml
4648
ifndef DEPLOYMENTNAMESPACE
4749
DEPLOYMENTNAMESPACE := default
4850
endif
@@ -189,7 +191,7 @@ endif
189191
.PHONY: manifests
190192
manifests: $(GOBUILDDIR)
191193
GOPATH=$(GOBUILDDIR) go run $(ROOTDIR)/tools/manifests/manifest_builder.go \
192-
--output=$(MANIFESTPATH) \
194+
--output-suffix=$(MANIFESTSUFFIX) \
193195
--image=$(OPERATORIMAGE) \
194196
--image-sha256=$(IMAGESHA256) \
195197
--namespace=$(DEPLOYMENTNAMESPACE)
@@ -240,7 +242,8 @@ ifneq ($(DEPLOYMENTNAMESPACE), default)
240242
$(ROOTDIR)/scripts/kube_delete_namespace.sh $(DEPLOYMENTNAMESPACE)
241243
kubectl create namespace $(DEPLOYMENTNAMESPACE)
242244
endif
243-
kubectl apply -f $(MANIFESTPATH)
245+
kubectl apply -f $(MANIFESTPATHSTORAGE)
246+
kubectl apply -f $(MANIFESTPATHDEPLOYMENT)
244247
$(ROOTDIR)/scripts/kube_create_storage.sh $(DEPLOYMENTNAMESPACE)
245248
kubectl --namespace $(DEPLOYMENTNAMESPACE) \
246249
run arangodb-operator-test -i --rm --quiet --restart=Never \
@@ -308,9 +311,11 @@ minikube-start:
308311

309312
.PHONY: delete-operator
310313
delete-operator:
311-
kubectl delete -f $(MANIFESTPATH) --ignore-not-found
314+
kubectl delete -f $(MANIFESTPATHDEPLOYMENT) --ignore-not-found
315+
kubectl delete -f $(MANIFESTPATHSTORAGE) --ignore-not-found
312316

313317
.PHONY: redeploy-operator
314318
redeploy-operator: delete-operator manifests
315-
kubectl apply -f $(MANIFESTPATH)
319+
kubectl apply -f $(MANIFESTPATHSTORAGE)
320+
kubectl apply -f $(MANIFESTPATHDEPLOYMENT)
316321
kubectl get pods

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,7 @@ State: In heavy development. DO NOT USE FOR ANY PRODUCTION LIKE PURPOSE! THINGS
1111

1212
```bash
1313
DOCKERNAMESPACE=<your dockerhub account> make
14-
kubectl apply -f manifests/arango-operator-dev.yaml
14+
kubectl apply -f manifests/arango-deployment-dev.yaml
15+
# To use `ArangoLocalStorage`, also run
16+
kubectl apply -f manifests/arango-storage-dev.yaml
1517
```

docs/user/usage.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ The ArangoDB operator needs to be installed in your Kubernetes
66
cluster first. To do so, clone this repository and run:
77

88
```bash
9-
kubectl apply -f manifests/arango-operator.yaml
9+
kubectl apply -f manifests/arango-deployment.yaml
10+
```
11+
12+
To use `ArangoLocalStorage`, also run:
13+
14+
```bash
15+
kubectl apply -f manifests/arango-storage.yaml
1016
```
1117

1218
## Cluster creation
@@ -37,5 +43,7 @@ To remove the entire ArangoDB operator, remove all
3743
clusters first and then remove the operator by running:
3844

3945
```bash
40-
kubectl delete -f manifests/arango-operator.yaml
46+
kubectl delete -f manifests/arango-deployment.yaml
47+
# If `ArangoLocalStorage` is installed
48+
kubectl delete -f manifests/arango-storage.yaml
4149
```

main.go

Lines changed: 29 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ import (
4141
"k8s.io/client-go/kubernetes"
4242
"k8s.io/client-go/kubernetes/scheme"
4343
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
44-
"k8s.io/client-go/tools/leaderelection"
45-
"k8s.io/client-go/tools/leaderelection/resourcelock"
4644
"k8s.io/client-go/tools/record"
4745

4846
"github.com/arangodb/kube-arangodb/pkg/client"
@@ -77,15 +75,21 @@ var (
7775
host string
7876
port int
7977
}
80-
createCRD bool
78+
operatorOptions struct {
79+
enableDeployment bool // Run deployment operator
80+
enableStorage bool // Run deployment operator
81+
createCRD bool
82+
}
8183
)
8284

8385
func init() {
8486
f := cmdMain.Flags()
8587
f.StringVar(&server.host, "server.host", defaultServerHost, "Host to listen on")
8688
f.IntVar(&server.port, "server.port", defaultServerPort, "Port to listen on")
8789
f.StringVar(&logLevel, "log.level", defaultLogLevel, "Set initial log level")
88-
f.BoolVar(&createCRD, "operator.create-crd", true, "Disable to avoid create the custom resource definition")
90+
f.BoolVar(&operatorOptions.enableDeployment, "operator.deployment", false, "Enable to run the ArangoDeployment operator")
91+
f.BoolVar(&operatorOptions.enableStorage, "operator.storage", false, "Enable to run the ArangoLocalStorage operator")
92+
f.BoolVar(&operatorOptions.createCRD, "operator.create-crd", true, "Disable to avoid create the custom resource definition")
8993
}
9094

9195
func main() {
@@ -107,6 +111,11 @@ func cmdMainRun(cmd *cobra.Command, args []string) {
107111
cliLog.Fatal().Err(err).Msg("Failed to initialize log service")
108112
}
109113

114+
// Check operating mode
115+
if !operatorOptions.enableDeployment && !operatorOptions.enableStorage {
116+
cliLog.Fatal().Err(err).Msg("Turn on --operator.deployment or --operator.storage or both")
117+
}
118+
110119
// Log version
111120
cliLog.Info().Msgf("Starting arangodb-operator, version %s build %s", projectVersion, projectBuild)
112121

@@ -126,48 +135,12 @@ func cmdMainRun(cmd *cobra.Command, args []string) {
126135
cliLog.Fatal().Err(err).Msg("Failed to get hostname")
127136
}
128137

129-
// Create k8s client
130-
kubecli, err := k8sutil.NewKubeClient()
131-
if err != nil {
132-
cliLog.Fatal().Err(err).Msg("Failed to create kubernetes client")
133-
}
134-
135138
//http.HandleFunc(probe.HTTPReadyzEndpoint, probe.ReadyzHandler)
136139
http.Handle("/metrics", prometheus.Handler())
137140
listenAddr := net.JoinHostPort(server.host, strconv.Itoa(server.port))
138141
go http.ListenAndServe(listenAddr, nil)
139142

140-
rl, err := resourcelock.New(resourcelock.EndpointsResourceLock,
141-
namespace,
142-
"arangodb-operator",
143-
kubecli.CoreV1(),
144-
resourcelock.ResourceLockConfig{
145-
Identity: id,
146-
EventRecorder: createRecorder(cliLog, kubecli, name, namespace),
147-
})
148-
if err != nil {
149-
cliLog.Fatal().Err(err).Msg("Failed to create resource lock")
150-
}
151-
152-
leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{
153-
Lock: rl,
154-
LeaseDuration: 15 * time.Second,
155-
RenewDeadline: 10 * time.Second,
156-
RetryPeriod: 2 * time.Second,
157-
Callbacks: leaderelection.LeaderCallbacks{
158-
OnStartedLeading: func(stop <-chan struct{}) {
159-
run(stop, namespace, name)
160-
},
161-
OnStoppedLeading: func() {
162-
cliLog.Fatal().Msg("Leader election lost")
163-
},
164-
},
165-
})
166-
}
167-
168-
// run the operator
169-
func run(stop <-chan struct{}, namespace, name string) {
170-
cfg, deps, err := newOperatorConfigAndDeps(namespace, name)
143+
cfg, deps, err := newOperatorConfigAndDeps(id+"-"+name, namespace, name)
171144
if err != nil {
172145
cliLog.Fatal().Err(err).Msg("Failed to create operator config & deps")
173146
}
@@ -178,13 +151,11 @@ func run(stop <-chan struct{}, namespace, name string) {
178151
if err != nil {
179152
cliLog.Fatal().Err(err).Msg("Failed to create operator")
180153
}
181-
if err := o.Start(); err != nil {
182-
cliLog.Fatal().Err(err).Msg("Failed to start operator")
183-
}
154+
o.Run()
184155
}
185156

186157
// newOperatorConfigAndDeps creates operator config & dependencies.
187-
func newOperatorConfigAndDeps(namespace, name string) (operator.Config, operator.Dependencies, error) {
158+
func newOperatorConfigAndDeps(id, namespace, name string) (operator.Config, operator.Dependencies, error) {
188159
kubecli, err := k8sutil.NewKubeClient()
189160
if err != nil {
190161
return operator.Config{}, operator.Dependencies{}, maskAny(err)
@@ -203,18 +174,23 @@ func newOperatorConfigAndDeps(namespace, name string) (operator.Config, operator
203174
if err != nil {
204175
return operator.Config{}, operator.Dependencies{}, maskAny(fmt.Errorf("Failed to created versioned client: %s", err))
205176
}
177+
eventRecorder := createRecorder(cliLog, kubecli, name, namespace)
206178

207179
cfg := operator.Config{
208-
Namespace: namespace,
209-
PodName: name,
210-
ServiceAccount: serviceAccount,
211-
CreateCRD: createCRD,
180+
ID: id,
181+
Namespace: namespace,
182+
PodName: name,
183+
ServiceAccount: serviceAccount,
184+
EnableDeployment: operatorOptions.enableDeployment,
185+
EnableStorage: operatorOptions.enableStorage,
186+
CreateCRD: operatorOptions.createCRD,
212187
}
213188
deps := operator.Dependencies{
214-
Log: logService.MustGetLogger("operator"),
215-
KubeCli: kubecli,
216-
KubeExtCli: kubeExtCli,
217-
CRCli: crCli,
189+
Log: logService.MustGetLogger("operator"),
190+
KubeCli: kubecli,
191+
KubeExtCli: kubeExtCli,
192+
CRCli: crCli,
193+
EventRecorder: eventRecorder,
218194
}
219195

220196
return cfg, deps, nil

manifests/arango-operator.yaml renamed to manifests/arango-deployment-dev.yaml

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
## rbac.yaml
1+
## deployment/rbac.yaml
22
apiVersion: rbac.authorization.k8s.io/v1beta1
33
kind: ClusterRole
44
metadata:
5-
name: arango-operator
5+
name: arango-deployment-operator
66
rules:
77
- apiGroups:
88
- database.arangodb.com
99
resources:
1010
- arangodeployments
1111
verbs:
1212
- "*"
13-
- apiGroups:
14-
- storage.arangodb.com
15-
resources:
16-
- arangolocalstorages
17-
verbs:
18-
- "*"
1913
- apiGroups:
2014
- apiextensions.k8s.io
2115
resources:
@@ -28,7 +22,6 @@ rules:
2822
- pods
2923
- services
3024
- endpoints
31-
- persistentvolumes
3225
- persistentvolumeclaims
3326
- events
3427
- secrets
@@ -38,51 +31,53 @@ rules:
3831
- apps
3932
resources:
4033
- deployments
41-
- daemonsets
4234
verbs:
4335
- "*"
4436
- apiGroups:
4537
- storage.k8s.io
4638
resources:
4739
- storageclasses
4840
verbs:
49-
- "*"
41+
- get
42+
- list
5043

5144
---
5245

5346
apiVersion: rbac.authorization.k8s.io/v1beta1
5447
kind: ClusterRoleBinding
5548
metadata:
56-
name: arango-operator
49+
name: arango-deployment-operator
5750
roleRef:
5851
apiGroup: rbac.authorization.k8s.io
5952
kind: ClusterRole
60-
name: arango-operator
53+
name: arango-deployment-operator
6154
subjects:
6255
- kind: ServiceAccount
6356
name: default
6457
namespace: default
6558

6659
---
6760

68-
## deployment.yaml
61+
## deployment/deployment.yaml
6962

7063
apiVersion: extensions/v1beta1
7164
kind: Deployment
7265
metadata:
73-
name: arango-operator
66+
name: arango-deployment-operator
7467
namespace: default
7568
spec:
7669
replicas: 1
7770
template:
7871
metadata:
7972
labels:
80-
name: arango-operator
73+
name: arango-deployment-operator
8174
spec:
8275
containers:
83-
- name: arangodb-operator
76+
- name: operator
8477
imagePullPolicy: IfNotPresent
85-
image: arangodb/arangodb-operator@sha256:90663ccc4cc71562ec06b7e2ad189762aaa38e922e0c70b3cc12f2afa51bf50c
78+
image: ewoutp/arangodb-operator@sha256:51a122f8b36cb26f181dd1ffdddae6cb3fb5a4def4709c3ea123744a557cbe08
79+
args:
80+
- --operator.deployment
8681
env:
8782
- name: MY_POD_NAMESPACE
8883
valueFrom:

0 commit comments

Comments
 (0)