Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This highly available config creates 3 Dgraph Zeros and 3 Dgraph Alphas with 3
- # replicas. The Dgraph cluster will still be available to service requests even
- # when one Zero and/or one Alpha are down.
- #
- # There are 3 services can can be used to expose outside the cluster as needed:
- # dgraph-zero-public - To load data using Live & Bulk Loaders
- # dgraph-alpha-public - To connect clients and for HTTP APIs
- apiVersion: v1
- kind: Service
- metadata:
- name: dgraph-zero-public
- labels:
- app: dgraph-zero
- monitor: zero-dgraph-io
- spec:
- type: LoadBalancer
- ports:
- - port: 5080
- targetPort: 5080
- name: grpc-zero
- - port: 6080
- targetPort: 6080
- name: http-zero
- selector:
- app: dgraph-zero
- ---
- apiVersion: v1
- kind: Service
- metadata:
- name: dgraph-alpha-public
- labels:
- app: dgraph-alpha
- monitor: alpha-dgraph-io
- spec:
- type: LoadBalancer
- ports:
- - port: 8080
- targetPort: 8080
- name: http-alpha
- - port: 9080
- targetPort: 9080
- name: grpc-alpha
- selector:
- app: dgraph-alpha
- ---
- # This is a headless service which is necessary for discovery for a dgraph-zero StatefulSet.
- # https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#creating-a-statefulset
- apiVersion: v1
- kind: Service
- metadata:
- name: dgraph-zero
- labels:
- app: dgraph-zero
- spec:
- ports:
- - port: 5080
- targetPort: 5080
- name: grpc-zero
- clusterIP: None
- # We want all pods in the StatefulSet to have their addresses published for
- # the sake of the other Dgraph Zero pods even before they're ready, since they
- # have to be able to talk to each other in order to become ready.
- publishNotReadyAddresses: true
- selector:
- app: dgraph-zero
- ---
- # This is a headless service which is necessary for discovery for a dgraph-alpha StatefulSet.
- # https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#creating-a-statefulset
- apiVersion: v1
- kind: Service
- metadata:
- name: dgraph-alpha
- labels:
- app: dgraph-alpha
- spec:
- ports:
- - port: 7080
- targetPort: 7080
- name: grpc-alpha-int
- clusterIP: None
- # We want all pods in the StatefulSet to have their addresses published for
- # the sake of the other Dgraph alpha pods even before they're ready, since they
- # have to be able to talk to each other in order to become ready.
- publishNotReadyAddresses: true
- selector:
- app: dgraph-alpha
- ---
- # This StatefulSet runs 3 Dgraph Zero.
- apiVersion: apps/v1
- kind: StatefulSet
- metadata:
- name: dgraph-zero
- spec:
- serviceName: "dgraph-zero"
- replicas: 3
- selector:
- matchLabels:
- app: dgraph-zero
- template:
- metadata:
- labels:
- app: dgraph-zero
- spec:
- affinity:
- podAntiAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 100
- podAffinityTerm:
- labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - dgraph-zero
- topologyKey: kubernetes.io/hostname
- containers:
- - name: zero
- image: dgraph/dgraph:latest
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 5080
- name: grpc-zero
- - containerPort: 6080
- name: http-zero
- volumeMounts:
- - name: datadir
- mountPath: /dgraph
- env:
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- command:
- - bash
- - "-c"
- - |
- set -ex
- [[ `hostname` =~ -([0-9]+)$ ]] || exit 1
- ordinal=${BASH_REMATCH[1]}
- idx=$(($ordinal + 1))
- if [[ $ordinal -eq 0 ]]; then
- exec dgraph zero --my=$(hostname -f):5080 --raft="idx=$idx" --replicas 3
- else
- exec dgraph zero --my=$(hostname -f):5080 --peer dgraph-zero-0.dgraph-zero.${POD_NAMESPACE}.svc.cluster.local:5080 --raft="idx=$idx" --replicas 3
- fi
- livenessProbe:
- httpGet:
- path: /health
- port: 6080
- initialDelaySeconds: 15
- periodSeconds: 10
- timeoutSeconds: 5
- failureThreshold: 6
- successThreshold: 1
- readinessProbe:
- httpGet:
- path: /health
- port: 6080
- initialDelaySeconds: 15
- periodSeconds: 10
- timeoutSeconds: 5
- failureThreshold: 6
- successThreshold: 1
- terminationGracePeriodSeconds: 60
- volumes:
- - name: datadir
- persistentVolumeClaim:
- claimName: datadir
- updateStrategy:
- type: RollingUpdate
- volumeClaimTemplates:
- - metadata:
- name: datadir
- annotations:
- volume.alpha.kubernetes.io/storage-class: anything
- spec:
- accessModes:
- - "ReadWriteOnce"
- resources:
- requests:
- storage: 5Gi
- ---
- # This StatefulSet runs 3 replicas of Dgraph Alpha.
- apiVersion: apps/v1
- kind: StatefulSet
- metadata:
- name: dgraph-alpha
- spec:
- serviceName: "dgraph-alpha"
- replicas: 3
- selector:
- matchLabels:
- app: dgraph-alpha
- template:
- metadata:
- labels:
- app: dgraph-alpha
- spec:
- affinity:
- podAntiAffinity:
- preferredDuringSchedulingIgnoredDuringExecution:
- - weight: 100
- podAffinityTerm:
- labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - dgraph-alpha
- topologyKey: kubernetes.io/hostname
- # Initializing the Alphas:
- #
- # You may want to initialize the Alphas with data before starting, e.g.
- # with data from the Dgraph Bulk Loader: https://dgraph.io/docs/deploy/#bulk-loader.
- # You can accomplish by uncommenting this initContainers config. This
- # starts a container with the same /dgraph volume used by Alpha and runs
- # before Alpha starts.
- #
- # You can copy your local p directory to the pod's /dgraph/p directory
- # with this command:
- #
- # kubectl cp path/to/p dgraph-alpha-0:/dgraph/ -c init-alpha
- # (repeat for each alpha pod)
- #
- # When you're finished initializing each Alpha data directory, you can signal
- # it to terminate successfully by creating a /dgraph/doneinit file:
- #
- # kubectl exec dgraph-alpha-0 -c init-alpha touch /dgraph/doneinit
- #
- # Note that pod restarts cause re-execution of Init Containers. Since
- # /dgraph is persisted across pod restarts, the Init Container will exit
- # automatically when /dgraph/doneinit is present and proceed with starting
- # the Alpha process.
- #
- # Tip: StatefulSet pods can start in parallel by configuring
- # .spec.podManagementPolicy to Parallel:
- #
- # https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees
- #
- # initContainers:
- # - name: init-alpha
- # image: dgraph/dgraph:latest
- # command:
- # - bash
- # - "-c"
- # - |
- # trap "exit" SIGINT SIGTERM
- # echo "Write to /dgraph/doneinit when ready."
- # until [ -f /dgraph/doneinit ]; do sleep 2; done
- # volumeMounts:
- # - name: datadir
- # mountPath: /dgraph
- containers:
- - name: alpha
- image: dgraph/dgraph:latest
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 7080
- name: grpc-alpha-int
- - containerPort: 8080
- name: http-alpha
- - containerPort: 9080
- name: grpc-alpha
- volumeMounts:
- - name: datadir
- mountPath: /dgraph
- env:
- # This should be the same namespace as the dgraph-zero
- # StatefulSet to resolve a Dgraph Zero's DNS name for
- # Alpha's --zero flag.
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- # dgraph versions earlier than v1.2.3 and v20.03.0 can only support one zero:
- # `dgraph alpha --zero dgraph-zero-0.dgraph-zero.${POD_NAMESPACE}.svc.cluster.local:5080`
- # dgraph-alpha versions greater than or equal to v1.2.3 or v20.03.1 can support
- # a comma-separated list of zeros. The value below supports 3 zeros
- # (set according to number of replicas)
- command:
- - bash
- - "-c"
- - |
- set -ex
- dgraph alpha --my=$(hostname -f):7080 --zero dgraph-zero-0.dgraph-zero.${POD_NAMESPACE}.svc.cluster.local:5080,dgraph-zero-1.dgraph-zero.${POD_NAMESPACE}.svc.cluster.local:5080,dgraph-zero-2.dgraph-zero.${POD_NAMESPACE}.svc.cluster.local:5080
- livenessProbe:
- httpGet:
- path: /health?live=1
- port: 8080
- initialDelaySeconds: 15
- periodSeconds: 10
- timeoutSeconds: 5
- failureThreshold: 6
- successThreshold: 1
- readinessProbe:
- httpGet:
- path: /health
- port: 8080
- initialDelaySeconds: 15
- periodSeconds: 10
- timeoutSeconds: 5
- failureThreshold: 6
- successThreshold: 1
- terminationGracePeriodSeconds: 600
- volumes:
- - name: datadir
- persistentVolumeClaim:
- claimName: datadir
- updateStrategy:
- type: RollingUpdate
- volumeClaimTemplates:
- - metadata:
- name: datadir
- annotations:
- volume.alpha.kubernetes.io/storage-class: anything
- spec:
- accessModes:
- - "ReadWriteOnce"
- resources:
- requests:
- storage: 5Gi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement