From 5a6375152fdedd7083ab5415d96caf0a4fc1ae7a Mon Sep 17 00:00:00 2001 From: Ewout Prangsma Date: Fri, 16 Feb 2018 13:18:38 +0100 Subject: [PATCH] Extended storage docs wrt local storage --- docs/user/storage.md | 57 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/docs/user/storage.md b/docs/user/storage.md index a08248b86..ba2c4a3fb 100644 --- a/docs/user/storage.md +++ b/docs/user/storage.md @@ -16,3 +16,60 @@ The amount of storage needed is configured using the Note that configuring storage is done per group of servers. It is not possible to configure storage per individual server. + +## Local storage + +For optimal performance, ArangoDB should be configured with locally attached +SSD storage. + +To accomplish this, you must create `PersistentVolumes` for all servers that +need persistent storage (single, agents & dbservers). +E.g. for a `cluster` with 3 agents and 5 dbservers, you must create 8 volumes. + +Note that each volume must have a capacity that is equal to of higher than the +capacity needed for each server. + +To select the correct node, add a required node-affinity annotation as shown +in the example below. + +```yaml +apiVersion: v1 +kind: PersistentVolume +metadata: + name: volume-agent-1 + annotations: + "volume.alpha.kubernetes.io/node-affinity": '{ + "requiredDuringSchedulingIgnoredDuringExecution": { + "nodeSelectorTerms": [ + { "matchExpressions": [ + { "key": "kubernetes.io/hostname", + "operator": "In", + "values": ["node-1"] + } + ]} + ]} + }' +spec: + capacity: + storage: 100Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Delete + storageClassName: local-ssd + local: + path: /mnt/disks/ssd1 +``` + +For Kubernetes 1.9 and up, you should create a `StorageClass` which is configured +to bind volumes on their first use as shown in the example below. +This ensures that the Kubernetes scheduler takes all constraints on a `Pod` +that into consideration before binding the volume to a claim. + +```yaml +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: local-ssd +provisioner: kubernetes.io/no-provisioner +volumeBindingMode: WaitForFirstConsumer +```