diff --git a/Kubernetes-Management.md b/Kubernetes-Management.md new file mode 100644 index 0000000..5fe0681 --- /dev/null +++ b/Kubernetes-Management.md @@ -0,0 +1,234 @@ +# Kubernetes Management + +This document describes the Kubernetes Management UI implementation in Troubleshooting and RCA Assistant. + +## Overview + +The application includes a complete Kubernetes Management UI with feature parity to Lens Desktop v5.x, implemented in two phases: + +- **Phase 1 (v1.0.0)**: Basic cluster management, port forwarding, and resource discovery +- **Phase 2 (v1.1.0)**: Advanced features, enhanced workloads, and real-time updates + +## Features + +### Phase 1: Basic Management + +- **Cluster Management**: Add, remove, list clusters with kubeconfig support +- **Port Forwarding**: Start, stop, list, and delete port forwards +- **Resource Discovery**: View pods, services, deployments, statefulsets, daemonsets, namespaces +- **Resource Management**: Scale, restart, delete, exec into resources +- **Context Switching**: Switch between clusters and namespaces + +### Phase 2: Advanced Features + +- **26 Resource Types**: All major Kubernetes resource types with table views +- **Detail Views**: Tabs for overview, logs, yaml, events for each resource +- **Terminal**: Multi-tab terminal with session management +- **YAML Editor**: Create and edit resources with YAML +- **Metrics Charts**: CPU, memory, and network usage visualization +- **Search & Filter**: Search by name, labels, annotations +- **Context Switcher**: Quick cluster and context switching +- **RBAC Management**: Viewer and editor for roles, clusterroles, bindings +- **Real-time Updates**: Event bus and Kubernetes API watchers + +## Architecture + +### Frontend + +- **State Management**: Zustand `kubernetesStore` for clusters, namespaces, resources, terminals, search, bulk selection +- **Components**: 26 resource list components, 8 detail views, 8 advanced components, 6 UX components +- **Event System**: Simple event bus for frontend event handling + +### Backend + +- **Commands**: 43 kube-related commands in `src-tauri/src/commands/kube.rs` +- **Client**: Kubernetes client with kubeconfig support +- **Port Forwarding**: Complete port forward runtime with kubeconfig injection +- **Watchers**: Resource watchers with channel-based communication (placeholder implementation) + +## Resource Types + +### Workloads (11) +- Pod +- Deployment +- Service +- StatefulSet +- DaemonSet +- ReplicaSet +- Job +- CronJob +- Ingress +- HPA + +### Infrastructure (5) +- Node +- Namespace +- PVC +- PV +- ServiceAccount + +### Configuration (2) +- ConfigMap +- Secret + +### RBAC (4) +- Role +- ClusterRole +- RoleBinding +- ClusterRoleBinding + +### Events (1) +- Event + +## API Commands + +### Cluster Management +- `list_clusters()` - List all clusters +- `add_cluster()` - Add cluster with kubeconfig +- `remove_cluster()` - Remove cluster +- `set_active_cluster()` - Set active cluster + +### Port Forwarding +- `list_port_forwards()` - List active port forwards +- `start_port_forward()` - Start port forward +- `stop_port_forward()` - Stop port forward +- `delete_port_forward()` - Delete port forward +- `shutdown_port_forwards()` - Shutdown all port forwards + +### Resource Discovery +- `list_pods()` - List pods +- `list_services()` - List services +- `list_deployments()` - List deployments +- `list_statefulsets()` - List statefulsets +- `list_daemonsets()` - List daemonsets +- `list_namespaces()` - List namespaces +- `list_nodes()` - List nodes +- `list_events()` - List events +- `list_configmaps()` - List configmaps +- `list_secrets()` - List secrets +- `list_replicasets()` - List replicasets +- `list_jobs()` - List jobs +- `list_cronjobs()` - List cronjobs +- `list_ingresses()` - List ingresses +- `list_pvcs()` - List PVCs +- `list_pvs()` - List PVs +- `list_serviceaccounts()` - List service accounts +- `list_roles()` - List roles +- `list_clusterroles()` - List cluster roles +- `list_rolebindings()` - List role bindings +- `list_clusterrolebindings()` - List cluster role bindings +- `list_hpas()` - List HPAs + +### Resource Management +- `get_pod_detail()` - Get pod details +- `get_deployment_detail()` - Get deployment details +- `get_service_detail()` - Get service details +- `get_configmap_detail()` - Get configmap details +- `get_secret_detail()` - Get secret details +- `get_node_detail()` - Get node details +- `get_namespace_detail()` - Get namespace details +- `get_pvc_detail()` - Get PVC details +- `get_pv_detail()` - Get PV details +- `get_serviceaccount_detail()` - Get service account details +- `get_role_detail()` - Get role details +- `get_clusterrole_detail()` - Get cluster role details +- `get_rolebinding_detail()` - Get role binding details +- `get_clusterrolebinding_detail()` - Get cluster role binding details +- `get_hpa_detail()` - Get HPA details +- `get_event_detail()` - Get event details +- `get_replicaset_detail()` - Get replica set details +- `get_job_detail()` - Get job details +- `get_cronjob_detail()` - Get cronjob details +- `get_ingress_detail()` - Get ingress details +- `scale_deployment()` - Scale deployment +- `restart_deployment()` - Restart deployment +- `delete_resource()` - Delete resource +- `exec_into_pod()` - Execute command in pod +- `get_pod_logs()` - Get pod logs +- `get_resource_yaml()` - Get resource YAML + +### Advanced +- `subscribe_to_k8s_events()` - Subscribe to K8s events +- `subscribe_to_all_k8s_events()` - Subscribe to all K8s events +- `unsubscribe_from_k8s_events()` - Unsubscribe from events + +## State Management + +### Kubernetes Store (`src/stores/kubernetesStore.ts`) + +```typescript +interface KubernetesState { + clusters: Cluster[]; + activeClusterId: string | null; + namespaces: Namespace[]; + activeNamespace: string | null; + resources: Record; + resourceLoading: Record; + terminals: TerminalSession[]; + searchQuery: string; + searchResults: Resource[]; + bulkSelection: Set; +} +``` + +## Event System + +### Event Bus (`src/lib/eventBus.ts`) + +```typescript +// Subscribe to events +const unsubscribe = eventBus.on('k8s:resource:updated', (data) => { + console.log('Resource updated:', data); +}); + +// Unsubscribe +unsubscribe(); + +// Emit events +eventBus.emit('k8s:resource:updated', { + clusterId: 'cluster-1', + namespace: 'default', + resourceType: 'pod', + resource: podData +}); +``` + +## Future Enhancements + +- **Helm Support**: Chart management and release tracking +- **Extension System**: Plugin architecture for custom features +- **Advanced Metrics**: Custom metrics and dashboards +- **Bulk Actions**: Batch operations on resources +- **Resource Creation**: Form-based resource creation +- **Health Monitoring**: Cluster and resource health status + +## Dependencies + +### Frontend +- `xterm` - Terminal rendering +- `xterm-addon-fit` - Terminal resizing +- `xterm-addon-web-links` - Web link detection +- `@monaco-editor/react` - YAML editor +- `react-chartjs-2` - Metrics charts +- `chart.js` - Chart rendering + +### Backend +- `k8s-openapi` with `watch` feature - Kubernetes API watchers +- `tokio-stream` - Async streams for watchers + +## Testing + +### Frontend Tests +- 114 tests passing +- Unit tests for stores, components, and utilities + +### Backend Tests +- 331 tests passing +- Tests for kube commands, port forwarding, and resource management + +## Documentation + +- [Kubernetes Management Implementation Plan](../KUBERNETES-MANAGEMENT-IMPLEMENTATION-PLAN.md) +- [Lens Desktop v5.x Features](../lens-desktop-v5x-features.md) +- [Architecture Documentation](../architecture/README.md) +- [ADR-010: Kubernetes Management UI](../architecture/adrs/ADR-010-kubernetes-management-ui.md)