This guide covers deploying Karpenter Optimizer in various environments.
kubectl configured with cluster access# Add Helm repository (when published)
helm repo add karpenter-optimizer https://charts.karpenter-optimizer.io
helm repo update
# Install
helm install karpenter-optimizer karpenter-optimizer/karpenter-optimizer \
--namespace karpenter-optimizer \
--create-namespace
# Install from local chart
helm install karpenter-optimizer ./charts/karpenter-optimizer \
--namespace karpenter-optimizer \
--create-namespace
See values.yaml for all configuration options.
Key Configuration Options:
config:
# Kubernetes configuration (leave empty for in-cluster)
kubeconfigPath: ""
kubeContext: ""
# API server port
port: "8080"
# Ollama configuration (optional)
ollamaURL: "http://localhost:11434"
ollamaModel: "gemma2:2b"
frontend:
enabled: true # Deploy frontend as sidecar
nginxConfig: true # Enable Nginx proxy for /api/*
ingress:
enabled: true
className: "nginx"
hosts:
- host: karpenter-optimizer.example.com
paths:
- path: /
pathType: Prefix
# Install with custom values
helm install karpenter-optimizer ./charts/karpenter-optimizer \
--namespace karpenter-optimizer \
--create-namespace \
--set config.ollamaURL=http://ollama:11434 \
--set ingress.enabled=true \
--set ingress.hosts[0].host=optimizer.example.com
helm upgrade karpenter-optimizer ./charts/karpenter-optimizer \
--namespace karpenter-optimizer
helm uninstall karpenter-optimizer --namespace karpenter-optimizer
docker run -d \
--name karpenter-optimizer-api \
-p 8080:8080 \
-v ~/.kube/config:/root/.kube/config:ro \
-e KUBECONFIG=/root/.kube/config \
ghcr.io/kaskol10/karpenter-optimizer:latest
# Use docker-compose.yml
docker-compose up -d
KUBECONFIG: Path to kubeconfig file (default: ~/.kube/config)KUBE_CONTEXT: Kubernetes context name (optional)PORT: API server port (default: 8080)OLLAMA_URL: Ollama instance URL (optional)OLLAMA_MODEL: Ollama model name (default: granite4:latest)# Install dependencies
go mod download
# Run API server
go run ./cmd/api
# Or use Makefile
make run-backend
cd frontend
# Install dependencies
npm install
# Start development server
npm start
# Or use Makefile
make run-frontend
http://localhost:8080http://localhost:3000http://localhost:8080/api/swagger/index.htmlWhen running inside Kubernetes, the application automatically uses:
Leave these empty in values.yaml:
config:
kubeconfigPath: ""
kubeContext: ""
For local development or external deployment:
config:
kubeconfigPath: "/path/to/kubeconfig"
kubeContext: "my-context"
The application needs read access to:
See charts/karpenter-optimizer/templates/rbac.yaml for the default RBAC configuration.
The application uses AWS Pricing API for cost calculations. The pricing API uses a public endpoint and doesn’t require authentication, but IRSA (IAM Roles for Service Accounts) is recommended for EKS clusters to follow AWS security best practices.
For EKS clusters (Recommended):
serviceAccount:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::ACCOUNT_ID:role/karpenter-optimizer-role
For non-EKS clusters or local development:
Ollama is optional but enhances recommendations with AI explanations.
To enable Ollama:
config.ollamaURL in values.yaml# Check pod logs
kubectl logs -n karpenter-optimizer deployment/karpenter-optimizer
# Check pod status
kubectl describe pod -n karpenter-optimizer -l app=karpenter-optimizer
# Verify kubeconfig
kubectl get nodes
# Check RBAC permissions
kubectl auth can-i get nodepools --all-namespaces
kubectl auth can-i get nodes --all-namespaces
kubectl auth can-i get pods --all-namespaces
# Check frontend container logs
kubectl logs -n karpenter-optimizer deployment/karpenter-optimizer -c frontend
# Verify ingress configuration
kubectl describe ingress -n karpenter-optimizer
# Check backend logs
kubectl logs -n karpenter-optimizer deployment/karpenter-optimizer -c karpenter-optimizer
# Test health endpoint
curl http://localhost:8080/api/v1/health
For more troubleshooting, see TROUBLESHOOTING.md.
Configure appropriate resource limits:
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128Mi