157 lines
3.4 KiB
Markdown
157 lines
3.4 KiB
Markdown
|
|
# Kagent Kubernetes Integration
|
||
|
|
|
||
|
|
Kubernetes manifests for deploying Google Kagent with VAPORA A2A protocol integration.
|
||
|
|
|
||
|
|
## Directory Structure
|
||
|
|
|
||
|
|
```
|
||
|
|
kagent/
|
||
|
|
├── base/ # Base configuration (environment-agnostic)
|
||
|
|
│ ├── namespace.yaml # Kagent namespace
|
||
|
|
│ ├── rbac.yaml # ServiceAccount, ClusterRole, ResourceQuota
|
||
|
|
│ ├── configmap.yaml # Kagent configuration
|
||
|
|
│ ├── statefulset.yaml # Kagent StatefulSet (3 replicas)
|
||
|
|
│ ├── service.yaml # Kubernetes services
|
||
|
|
│ └── kustomization.yaml
|
||
|
|
├── overlays/
|
||
|
|
│ ├── dev/ # Development environment
|
||
|
|
│ │ ├── kustomization.yaml
|
||
|
|
│ │ └── statefulset-patch.yaml
|
||
|
|
│ └── prod/ # Production environment
|
||
|
|
│ ├── kustomization.yaml
|
||
|
|
│ └── statefulset-patch.yaml
|
||
|
|
└── README.md
|
||
|
|
```
|
||
|
|
|
||
|
|
## Deployment
|
||
|
|
|
||
|
|
### Prerequisites
|
||
|
|
|
||
|
|
- Kubernetes 1.24+
|
||
|
|
- kubectl configured
|
||
|
|
- Kustomize 4.0+
|
||
|
|
- VAPORA A2A server running
|
||
|
|
|
||
|
|
### Deploy to Development
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kubectl apply -k kubernetes/kagent/overlays/dev
|
||
|
|
```
|
||
|
|
|
||
|
|
### Deploy to Production
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kubectl apply -k kubernetes/kagent/overlays/prod
|
||
|
|
```
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
### StatefulSet Configuration
|
||
|
|
|
||
|
|
- **Replicas**: 3 (base), 1 (dev), 5 (prod)
|
||
|
|
- **Image**: `google-kagent:latest`
|
||
|
|
- **Service Type**: ClusterIP (Headless)
|
||
|
|
- **Pod Anti-Affinity**: Distributed across nodes
|
||
|
|
|
||
|
|
### A2A Integration
|
||
|
|
|
||
|
|
Kagent is configured to discover and integrate with VAPORA A2A server:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
a2a:
|
||
|
|
enabled: true
|
||
|
|
vapora_server: "http://vapora-a2a:8003"
|
||
|
|
discover_interval: 30s (dev), 60s (prod)
|
||
|
|
timeout: 30s
|
||
|
|
```
|
||
|
|
|
||
|
|
### Ports
|
||
|
|
|
||
|
|
- **8080/http** - REST API
|
||
|
|
- **50051/grpc** - gRPC endpoint
|
||
|
|
- **9090/metrics** - Prometheus metrics
|
||
|
|
|
||
|
|
### Resource Limits
|
||
|
|
|
||
|
|
**Development:**
|
||
|
|
- CPU: 100m req, 500m limit
|
||
|
|
- Memory: 128Mi req, 512Mi limit
|
||
|
|
|
||
|
|
**Production:**
|
||
|
|
- CPU: 1000m req, 4000m limit
|
||
|
|
- Memory: 1Gi req, 4Gi limit
|
||
|
|
|
||
|
|
## RBAC
|
||
|
|
|
||
|
|
Kagent service account has permissions to:
|
||
|
|
- List/watch pods, services
|
||
|
|
- Read configmaps
|
||
|
|
- Create/delete batch jobs
|
||
|
|
- Create events
|
||
|
|
|
||
|
|
## Health Checks
|
||
|
|
|
||
|
|
- **Liveness Probe**: `/health` on port 8080 (30s initial, 10s interval)
|
||
|
|
- **Readiness Probe**: `/ready` on port 8080 (10s initial, 5s interval)
|
||
|
|
|
||
|
|
## Environment Variables
|
||
|
|
|
||
|
|
- `KAGENT_CONFIG` - Config file path
|
||
|
|
- `KAGENT_POD_NAME` - Pod name (auto-filled)
|
||
|
|
- `KAGENT_NAMESPACE` - Pod namespace (auto-filled)
|
||
|
|
- `A2A_SERVER_URL` - VAPORA A2A server URL
|
||
|
|
- `LOG_LEVEL` - Logging level (debug/info/warn/error)
|
||
|
|
|
||
|
|
## Storage
|
||
|
|
|
||
|
|
- **ConfigMap Volume** - Kagent configuration
|
||
|
|
- **EmptyDir** - Cache (1Gi) and tmp (500Mi)
|
||
|
|
- **PersistentVolume** - Data (10Gi per pod)
|
||
|
|
|
||
|
|
## Networking
|
||
|
|
|
||
|
|
All services use internal cluster DNS:
|
||
|
|
- `kagent.kagent.svc.cluster.local` - Headless service
|
||
|
|
- `kagent-api.kagent.svc.cluster.local` - REST API
|
||
|
|
- `kagent-grpc.kagent.svc.cluster.local` - gRPC
|
||
|
|
|
||
|
|
## Monitoring
|
||
|
|
|
||
|
|
Prometheus metrics exposed at `/metrics:9090`
|
||
|
|
|
||
|
|
Enable scraping with annotation:
|
||
|
|
```yaml
|
||
|
|
prometheus.io/scrape: "true"
|
||
|
|
prometheus.io/port: "9090"
|
||
|
|
```
|
||
|
|
|
||
|
|
## Troubleshooting
|
||
|
|
|
||
|
|
### Check pod status
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kubectl get pods -n kagent
|
||
|
|
kubectl describe pod -n kagent <pod-name>
|
||
|
|
kubectl logs -n kagent <pod-name>
|
||
|
|
```
|
||
|
|
|
||
|
|
### Test A2A connectivity
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kubectl exec -it -n kagent kagent-0 -- /bin/sh
|
||
|
|
curl http://vapora-a2a:8003/health
|
||
|
|
```
|
||
|
|
|
||
|
|
### View events
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kubectl get events -n kagent --sort-by='.lastTimestamp'
|
||
|
|
```
|
||
|
|
|
||
|
|
## Cleanup
|
||
|
|
|
||
|
|
```bash
|
||
|
|
kubectl delete -k kubernetes/kagent/overlays/dev
|
||
|
|
kubectl delete -k kubernetes/kagent/overlays/prod
|
||
|
|
```
|