# MetalCheck Backend MetalCheck is a backend service that provides insights into virtual machines, physical nodes, and Kubernetes clusters. It supports deployment in an EKS environment and offers features like data aggregation and export. --- ## Features - **Metal Nodes**: Track hardware details like CPU, memory, and storage for physical nodes. Import node data from JSON file. - **Virtual Machines**: Track virtual machine details like CPU, memory, and storage. Import VM data from an API or JSON file. - **Kubernetes Clusters**: Query Kubernetes clusters to gather node and namespace data. - **Data Export**: Export collected data in JSON or YAML format. --- ## Project Structure ```plaintext metalcheck-backend/ ├── app/ │ ├── __init__.py # Initialization │ ├── main.py # FastAPI entry point │ ├── database.py # SQLite DB setup and operations │ ├── routes/ │ │ ├── __init__.py # Initialization for routes │ │ ├── metal.py # Routes for metal nodes │ │ ├── vm.py # Routes for virtual machines │ │ ├── k8s.py # Routes for Kubernetes clusters │ | ├── think.py # Routes for AI summary │ │ ├── export.py # Data export routes │ ├── example/k8s/ │ │ ├── rbac.yaml # RBAC configuration for Kubernetes │ │ ├── deployment.yaml # Deployment configuration for EKS | | ├── configmap.yaml # ConfigMap for EKS ├── Dockerfile # Docker container configuration ├── requirements.txt # Python dependencies ├── .dockerignore # Files to ignore during image build └── README.md # Project documentation ``` # Setup and Deployment ## Prerequisites - Python 3.10+ - Docker and kubectl installed - Access to an EKS cluster - AWS CLI configured with appropriate permissions ## Build and Deploy ### Build and Push Docker Image ```bash docker build -t metalcheck-backend . docker tag metalcheck-backend:latest :latest docker push :latest ``` ### Deploy to EKS Apply RBAC and deployment configurations: ```bash kubectl apply -f examples/k8s/rbac.yaml kubectl apply -f examples/k8s/configmap.yaml kubectl apply -f examples/k8s/deployment.yaml ``` ### Access the Service Retrieve the LoadBalancer IP: ```bash kubectl get svc -n metalcheck ``` Test the API: ```bash curl http:///k8s/data ``` ## Kubernetes Integration The `/k8s/data` endpoint retrieves information about: - Nodes: CPU, memory, and allocatable pods. - Namespaces: List of all namespaces in the cluster. ## Endpoints | Method | Endpoint | Description | | --- | --- | --- | | GET | /metal/data | Get all physical node data | | POST | /metal/data | Add a new physical node | | GET | /vm/data | Get all virtual machine data | | GET | /vm/import_hetzner | Import VM data from Hetzner API | | POST | /vm/data | Add a new virtual machine | | GET | /k8s/data | Get Kubernetes cluster information | | GET | /think/k8s | Get AI summary for Kubernetes cluster | | GET | /export | Export data in JSON or YAML format |