Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
MongoDB Controllers for Kubernetes Operator
/ /

GKE Clusters

Kubernetes is not vendor specific; however, for the sake of providing explicit and complete instructions for deploying all elements of a multi-cluster Kubernetes Operator implementation, this section walks you through the process of deploying multiple Kubernetes clusters on GCP specifically.

Before you begin, perform the following actions:

  • Create a GCP account.

  • Prepare a GCP project so that you can use it to create GKE (Google Kubernetes Engine) clusters.

  • Install the GCP CLI.

  • Authenticate with the gcloud auth login command.

  • Update as needed and set the environment variables defined in the following env_variables.sh file.

1# GCP project name - this is the only parameter that is mandatory to change here
2export MDB_GKE_PROJECT="${MDB_GKE_PROJECT:="### Set your GKE project name here ###"}"
3
4# Adjust the values for each Kubernetes cluster in your deployment.
5# The deployment script references the following variables to get values for each cluster.
6export K8S_CLUSTER_0="k8s-mdb-0${K8S_CLUSTER_SUFFIX:-""}"
7export K8S_CLUSTER_0_ZONE="europe-central2-a"
8export K8S_CLUSTER_0_NUMBER_OF_NODES=3
9export K8S_CLUSTER_0_MACHINE_TYPE="e2-standard-4"
10export K8S_CLUSTER_0_CONTEXT_NAME="gke_${MDB_GKE_PROJECT}_${K8S_CLUSTER_0_ZONE}_${K8S_CLUSTER_0}"
11
12export K8S_CLUSTER_1="k8s-mdb-1${K8S_CLUSTER_SUFFIX:-""}"
13export K8S_CLUSTER_1_ZONE="europe-central2-b"
14export K8S_CLUSTER_1_NUMBER_OF_NODES=3
15export K8S_CLUSTER_1_MACHINE_TYPE="e2-standard-4"
16export K8S_CLUSTER_1_CONTEXT_NAME="gke_${MDB_GKE_PROJECT}_${K8S_CLUSTER_1_ZONE}_${K8S_CLUSTER_1}"
17
18export K8S_CLUSTER_2="k8s-mdb-2${K8S_CLUSTER_SUFFIX:-""}"
19export K8S_CLUSTER_2_ZONE="europe-central2-c"
20export K8S_CLUSTER_2_NUMBER_OF_NODES=1
21export K8S_CLUSTER_2_MACHINE_TYPE="e2-standard-4"
22export K8S_CLUSTER_2_CONTEXT_NAME="gke_${MDB_GKE_PROJECT}_${K8S_CLUSTER_2_ZONE}_${K8S_CLUSTER_2}"
23
24# Comment out the following line so that the script does not create preemptible nodes.
25# DO NOT USE preemptible nodes in production.
26export GKE_SPOT_INSTANCES_SWITCH="--preemptible"

You can find all included source code in the MongoDB Kubernetes Operator repository.

1
1gcloud config set project "${MDB_GKE_PROJECT}"
2

Create three GKE (Google Kubernetes Engine) clusters:

1gcloud container clusters create "${K8S_CLUSTER_0}" \
2 --zone="${K8S_CLUSTER_0_ZONE}" \
3 --num-nodes="${K8S_CLUSTER_0_NUMBER_OF_NODES}" \
4 --machine-type "${K8S_CLUSTER_0_MACHINE_TYPE}" \
5 --tags=mongodb \
6 "${GKE_SPOT_INSTANCES_SWITCH:-""}"
1gcloud container clusters create "${K8S_CLUSTER_1}" \
2 --zone="${K8S_CLUSTER_1_ZONE}" \
3 --num-nodes="${K8S_CLUSTER_1_NUMBER_OF_NODES}" \
4 --machine-type "${K8S_CLUSTER_1_MACHINE_TYPE}" \
5 --tags=mongodb \
6 "${GKE_SPOT_INSTANCES_SWITCH:-""}"
1gcloud container clusters create "${K8S_CLUSTER_2}" \
2 --zone="${K8S_CLUSTER_2_ZONE}" \
3 --num-nodes="${K8S_CLUSTER_2_NUMBER_OF_NODES}" \
4 --machine-type "${K8S_CLUSTER_2_MACHINE_TYPE}" \
5 --tags=mongodb \
6 "${GKE_SPOT_INSTANCES_SWITCH:-""}"
3

Obtain credentials and save contexts to the current kubeconfig file. By default, this file is located in the ~/.kube/config directory and referenced by the $KUBECONFIG environment variable.

1gcloud container clusters get-credentials "${K8S_CLUSTER_0}" --zone="${K8S_CLUSTER_0_ZONE}"
2gcloud container clusters get-credentials "${K8S_CLUSTER_1}" --zone="${K8S_CLUSTER_1_ZONE}"
3gcloud container clusters get-credentials "${K8S_CLUSTER_2}" --zone="${K8S_CLUSTER_2_ZONE}"

All kubectl commands reference these contexts using the following variables:

  • $K8S_CLUSTER_0_CONTEXT_NAME

  • $K8S_CLUSTER_1_CONTEXT_NAME

  • $K8S_CLUSTER_2_CONTEXT_NAME

4
1echo "Nodes in cluster ${K8S_CLUSTER_0_CONTEXT_NAME}"
2kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" get nodes
3echo; echo "Nodes in cluster ${K8S_CLUSTER_1_CONTEXT_NAME}"
4kubectl --context "${K8S_CLUSTER_1_CONTEXT_NAME}" get nodes
5echo; echo "Nodes in cluster ${K8S_CLUSTER_2_CONTEXT_NAME}"
6kubectl --context "${K8S_CLUSTER_2_CONTEXT_NAME}" get nodes
1Nodes in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-682f2df6e1745e000788a1d5-19985
2NAME STATUS ROLES AGE VERSION
3gke-k8s-mdb-0-682f2df6e1-default-pool-68d97b7f-fct9 Ready <none> 2m20s v1.32.3-gke.1785003
4gke-k8s-mdb-0-682f2df6e1-default-pool-68d97b7f-k9td Ready <none> 2m20s v1.32.3-gke.1785003
5gke-k8s-mdb-0-682f2df6e1-default-pool-68d97b7f-pwsw Ready <none> 2m19s v1.32.3-gke.1785003
6
7Nodes in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-682f2df6e1745e000788a1d5-19985
8NAME STATUS ROLES AGE VERSION
9gke-k8s-mdb-1-682f2df6e1-default-pool-0f84fbc8-1b4j Ready <none> 32s v1.32.3-gke.1785003
10gke-k8s-mdb-1-682f2df6e1-default-pool-0f84fbc8-fn7x Ready <none> 32s v1.32.3-gke.1785003
11gke-k8s-mdb-1-682f2df6e1-default-pool-0f84fbc8-k4hc Ready <none> 32s v1.32.3-gke.1785003
12
13Nodes in cluster gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-682f2df6e1745e000788a1d5-19985
14NAME STATUS ROLES AGE VERSION
15gke-k8s-mdb-2-682f2df6e1-default-pool-ff13f41c-m4f9 Ready <none> 4m6s v1.32.3-gke.1785003

Back

Multi-Cluster Architecture

On this page