k8s_mcp_server_prod

samcolon/k8s_mcp_server_prod

3.3

If you are the rightful owner of k8s_mcp_server_prod and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

This project sets up an AI-powered Kubernetes MCP server using Minikube, Google Gemini, and kubectl-ai on an EC2 instance, enabling natural-language interaction with Kubernetes.

Tools
  1. kubectl-ai

    Google's CLI for AI-driven Kubernetes commands.

  2. Gemini API

    Natural language LLM for interpreting user inputs.

🧠 AI-Powered Kubernetes MCP Server (Minikube + Gemini + kubectl-ai)

This project deploys an AI-connected Kubernetes MCP (Model-Controller-Prompt) server on an EC2 instance using Minikube, Google Gemini, and kubectl-ai. The MCP server allows natural-language interaction with Kubernetes β€” powered by a custom schema and FastAPI backend.


πŸ“– Full Guide Available

πŸ“ Check out the full Medium article walkthrough here:
πŸ‘‰ Read on Medium


🧱 Architecture Overview

  • EC2 Ubuntu Instance (T2.Medium, 30 GiB EBS)
  • Minikube (Docker driver)
  • kubectl-ai – Google’s CLI for AI-driven Kubernetes commands
  • Gemini API (1.5 Flash) – Natural language LLM
  • FastAPI MCP Server – Hosts custom mcp-schema.json for command interpretation
  • NodePort Service – Exposes MCP server endpoint
  • Demo App – my-website-app deployed for live testing

πŸ“¦ Prerequisites

ToolRequired
Ubuntu 22.04 EC2βœ…
Docker (non-root)βœ…
Minikubeβœ…
Go 1.22+βœ…
kubectlβœ…
Gemini API Keyβœ…

βš™οΈ Setup Steps

πŸ” 1. Create Security Group

  • Allow SSH (22)
  • Allow NodePort range: 30000–32767 (TCP)
  • Allow HTTP (80)

☁️ 2. Launch EC2 Instance

  • AMI: Ubuntu 22.04+
  • Type: t2.medium or higher
  • Disk: 30 GiB
  • User-data:
    #!/bin/bash
    

set -e

Update system and install essentials

apt-get update -y && apt-get upgrade -y apt-get install -y curl wget git ca-certificates gnupg lsb-release apt-transport-https software-properties-common

---- Python ----

apt-get install -y python3 python3-pip update-alternatives --install /usr/bin/python python /usr/bin/python3 1 update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

---- Docker ----

apt-get install -y docker.io systemctl enable docker systemctl start dockeru


---

### πŸ§‘β€πŸ’» 3. Initial Setup After SSH

```bash
sudo usermod -aG docker ubuntu
sudo reboot

πŸ“¦ 4. Install Requirements

# kubectl

# Go

Follow official Minikube install guide:
πŸ‘‰ https://minikube.sigs.k8s.io/docs/start/


πŸ“ 5. Clone Repos

git clone https://github.com/your-username/k8s-mcp-server-prod.git
cd k8s-mcp-server-prod

git clone https://github.com/GoogleCloudPlatform/kubectl-ai.git
cd kubectl-ai
go build -o kubectl-ai ./cmd/kubectl-ai
sudo mv kubectl-ai /usr/local/bin/

☸️ 6. Start Minikube

minikube start --driver=docker

πŸ”Œ 7. Deploy MCP + App

kubectl apply -f rbac.yaml
kubectl apply -f my-website-app.yaml
kubectl apply -f mcp-deployment.yaml
kubectl apply -f mcp-service.yaml

πŸ” 8. Test MCP Server

minikube ip  # e.g. 192.168.49.2
kubectl get svc mcp-service  # Note NodePort, e.g. 31390

curl http://192.168.49.2:31390/mcp-schema.json

βœ… Should return your schema in JSON.


πŸ“˜ 9. Configure kubectl-ai

mkdir -p ~/.kube/kubectl-ai
nano ~/.kube/kubectl-ai/config.yaml

Paste:

mcp:
  endpoint: http://192.168.49.2:31390/mcp-schema.json
  name: mcp-server

llm:
  provider: gemini
  model: gemini-1.5-flash

πŸ”‘ 10. Create Gemini Secret

kubectl create secret generic gemini-api-key   --from-literal=GEMINI_API_KEY=your-key

export GEMINI_API_KEY=your-key
echo 'export GEMINI_API_KEY=your-key' >> ~/.bashrc
source ~/.bashrc

🧠 11. Use kubectl ai

kubectl ai --model gemini-1.5-flash

πŸ’¬ Demo Prompts

You can now ask kubectl ai things like:

PromptAction
List all pods in the default namespacelist_pods
Restart the my-website-app deploymentrestart_deployment
Scale the my-website-app to 5 replicasscale_deployment
Delete pod my-website-app-xyzdelete_pod
Get logs from pod in default namespaceget_pod_logs
List all nodesget_nodes
Get cluster namespacesget_namespaces
Get events in default namespaceget_events

🧹 Cleanup

kubectl delete -f mcp-service.yaml
kubectl delete -f mcp-deployment.yaml
kubectl delete -f my-website-app.yaml
kubectl delete -f rbac.yaml
kubectl delete secret gemini-api-key

πŸ™Œ Acknowledgements


πŸ“Œ Next Steps

  • Add HTTPS ingress controller with TLS
  • Package MCP as a Helm chart
  • Add multi-model support for OpenAI or Anthropic