Constraints
The ArangoDB operator tries to honor various constraints to support high availability of the ArangoDB cluster.
Run agents and dbservers on separate machines
It is essential for resilience and high availability that no two agents are running on the same node and no two dbservers are running running on the same node.
To ensure this, the agent and dbserver Pods are configured with pod-anti-affinity.
kind: Pod
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- arangodb
- key: arangodb_cluster_name
operator: In
values:
- <cluster-name>
- key: role
operator: In
values:
- agent (or dbserver)
The settings used for pod affinity are based on the spec.environment
setting.
For a development
environment we use preferredDuringSchedulingIgnoredDuringExecution
so deployments are still possible on tiny clusters like minikube
.
For production
environments we enforce (anti-)affinity using requiredDuringSchedulingIgnoredDuringExecution
.
Run coordinators on separate machines
It is preferred to run coordinators of separate machines.
To achieve this, the coordinator Pods are configured with pod-anti-affinity using the preferredDuringSchedulingIgnoredDuringExecution
setting.
Run syncworkers on same machine as dbserver
It is preferred to run syncworkers on the same machine as dbservers.
To achieve this, the syncworker Pods are configured with pod-affinity using the preferredDuringSchedulingIgnoredDuringExecution
setting.