Skip to main content
Glama

MCP Toolbox for Databases

by googleapis
Apache 2.0
11,039
  • Linux
deploy_gke.md6.88 kB
--- title: "Deploy to Kubernetes" type: docs weight: 4 description: > How to set up and configure Toolbox to deploy on Kubernetes with Google Kubernetes Engine (GKE). --- ## Before you begin 1. Set the PROJECT_ID environment variable: ```bash export PROJECT_ID="my-project-id" ``` 1. [Install the `gcloud` CLI](https://cloud.google.com/sdk/docs/install). 1. Initialize gcloud CLI: ```bash gcloud init gcloud config set project $PROJECT_ID ``` 1. You must have the following APIs enabled: ```bash gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ container.googleapis.com \ iam.googleapis.com ``` 1. `kubectl` is used to manage Kubernetes, the cluster orchestration system used by GKE. Verify if you have `kubectl` installed: ```bash kubectl version --client ``` 1. If needed, install `kubectl` component using the Google Cloud CLI: ```bash gcloud components install kubectl ``` ## Create a service account 1. Specify a name for your service account with an environment variable: ```bash export SA_NAME=toolbox ``` 1. Create a backend service account: ```bash gcloud iam service-accounts create $SA_NAME ``` 1. Grant any IAM roles necessary to the IAM service account. Each source has a list of necessary IAM permissions listed on its page. The example below is for cloud sql postgres source: ```bash gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --role roles/cloudsql.client ``` - [AlloyDB IAM Identity](../resources/sources/alloydb-pg.md#iam-permissions) - [CloudSQL IAM Identity](../resources/sources/cloud-sql-pg.md#iam-permissions) - [Spanner IAM Identity](../resources/sources/spanner.md#iam-permissions) ## Deploy to Kubernetes 1. Set environment variables: ```bash export CLUSTER_NAME=toolbox-cluster export DEPLOYMENT_NAME=toolbox export SERVICE_NAME=toolbox-service export REGION=us-central1 export NAMESPACE=toolbox-namespace export SECRET_NAME=toolbox-config export KSA_NAME=toolbox-service-account ``` 1. Create a [GKE cluster](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-architecture). ```bash gcloud container clusters create-auto $CLUSTER_NAME \ --location=us-central1 ``` 1. Get authentication credentials to interact with the cluster. This also configures `kubectl` to use the cluster. ```bash gcloud container clusters get-credentials $CLUSTER_NAME \ --region=$REGION \ --project=$PROJECT_ID ``` 1. View the current context for `kubectl`. ```bash kubectl config current-context ``` 1. Create namespace for the deployment. ```bash kubectl create namespace $NAMESPACE ``` 1. Create a Kubernetes Service Account (KSA). ```bash kubectl create serviceaccount $KSA_NAME --namespace $NAMESPACE ``` 1. Enable the IAM binding between Google Service Account (GSA) and Kubernetes Service Account (KSA). ```bash gcloud iam service-accounts add-iam-policy-binding \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $SA_NAME@$PROJECT_ID.iam.gserviceaccount.com ``` 1. Add annotation to KSA to complete binding: ```bash kubectl annotate serviceaccount \ $KSA_NAME \ iam.gke.io/gcp-service-account=$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --namespace $NAMESPACE ``` 1. Prepare the Kubernetes secret for your `tools.yaml` file. ```bash kubectl create secret generic $SECRET_NAME \ --from-file=./tools.yaml \ --namespace=$NAMESPACE ``` 1. Create a Kubernetes manifest file (`k8s_deployment.yaml`) to build deployment. ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: toolbox namespace: toolbox-namespace spec: selector: matchLabels: app: toolbox template: metadata: labels: app: toolbox spec: serviceAccountName: toolbox-service-account containers: - name: toolbox # Recommend to use the latest version of toolbox image: us-central1-docker.pkg.dev/database-toolbox/toolbox/toolbox:latest args: ["--address", "0.0.0.0"] ports: - containerPort: 5000 volumeMounts: - name: toolbox-config mountPath: "/app/tools.yaml" subPath: tools.yaml readOnly: true volumes: - name: toolbox-config secret: secretName: toolbox-config items: - key: tools.yaml path: tools.yaml ``` 1. Create the deployment. ```bash kubectl apply -f k8s_deployment.yaml --namespace $NAMESPACE ``` 1. Check the status of deployment. ```bash kubectl get deployments --namespace $NAMESPACE ``` 1. Create a Kubernetes manifest file (`k8s_service.yaml`) to build service. ```yaml apiVersion: v1 kind: Service metadata: name: toolbox-service namespace: toolbox-namespace annotations: cloud.google.com/l4-rbs: "enabled" spec: selector: app: toolbox ports: - port: 5000 targetPort: 5000 type: LoadBalancer ``` 1. Create the service. ```bash kubectl apply -f k8s_service.yaml --namespace $NAMESPACE ``` 1. You can find your IP address created for your service by getting the service information through the following. ```bash kubectl describe services $SERVICE_NAME --namespace $NAMESPACE ``` 1. To look at logs, run the following. ```bash kubectl logs -f deploy/$DEPLOYMENT_NAME --namespace $NAMESPACE ``` 1. You might have to wait a couple of minutes. It is ready when you can see `EXTERNAL-IP` with the following command: ```bash kubectl get svc -n $NAMESPACE ``` 1. Access toolbox locally. ```bash curl <EXTERNAL-IP>:5000 ``` ## Clean up resources 1. Delete secret. ```bash kubectl delete secret $SECRET_NAME --namespace $NAMESPACE ``` 1. Delete deployment. ```bash kubectl delete deployment $DEPLOYMENT_NAME --namespace $NAMESPACE ``` 1. Delete the application's service. ```bash kubectl delete service $SERVICE_NAME --namespace $NAMESPACE ``` 1. Delete the Kubernetes cluster. ```bash gcloud container clusters delete $CLUSTER_NAME \ --location=$REGION ```

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/googleapis/genai-toolbox'

If you have feedback or need assistance with the MCP directory API, please join our Discord server