update(app): add examples and README file

This commit is contained in:
Aleksandr Tcitlionok
2024-12-05 03:06:01 +00:00
parent e2076c1b54
commit aa17c7a2dc
4 changed files with 160 additions and 2 deletions

View File

@@ -1 +1,2 @@
app/resources.db
.env

View File

@@ -1,3 +1,92 @@
# Metal Check
# MetalCheck Backend
Metal Check - Get tips and information about your Kubernetes and on-premise servers.
MetalCheck is a backend service that provides real-time insights into virtual machines, physical nodes, and Kubernetes clusters.
It supports deployment in an EKS environment and offers features like data aggregation, export, and pseudographics visualization.
---
## Features
- **Metal Nodes**: Track hardware details like CPU, memory, and storage for physical nodes.
- **Virtual Machines**: Monitor VMs from cloud providers like Hetzner.
- **Kubernetes Clusters**: Query Kubernetes clusters to gather node and namespace data.
- **Data Export**: Export collected data in JSON or YAML format.
- **Pseudographics**: Terminal-based data visualization (optional).
---
## Project Structure
## Project Structure
```plaintext
metal-check-backend/
├── app/
│ ├── __init__.py # Initialization
│ ├── main.py # FastAPI entry point
│ ├── database.py # SQLite DB setup and operations
│ ├── extras/
│ │ ├── pseudographics.py # CLI visualization tools
│ ├── routes/
│ │ ├── __init__.py # Initialization for routes
│ │ ├── metal.py # Routes for metal nodes
│ │ ├── vm.py # Routes for virtual machines
│ │ ├── k8s.py # Routes for Kubernetes clusters
│ │ ├── export.py # Data export routes
│ ├── example/k8s/
│ │ ├── rbac.yaml # RBAC configuration for Kubernetes
│ │ ├── deployment.yaml # Deployment configuration 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 <your-ecr-repo>:latest
docker push <your-ecr-repo>:latest
```
### Deploy to EKS
Apply RBAC and deployment configurations:
```bash
kubectl apply -f app/example/k8s/rbac.yaml
kubectl apply -f app/example/k8s/deployment.yaml
```
### Access the Service
Retrieve the LoadBalancer IP:
```bash
kubectl get svc -n metalcheck
```
Test the API:
```bash
curl http://<EXTERNAL-IP>/k8s/data
```
## 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 |
| POST | /vm/data | Add a new virtual machine |
| GET | /k8s/data | Get Kubernetes cluster information |
| GET | /export | Export data in JSON or YAML format |

View File

@@ -0,0 +1,39 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: metalcheck-backend
labels:
app: metalcheck
spec:
replicas: 1
selector:
matchLabels:
app: metalcheck
template:
metadata:
labels:
app: metalcheck
spec:
containers:
- name: backend
image: <your-ecr-repo>:latest
ports:
- containerPort: 8000
env:
- name: KUBERNETES_SERVICE_HOST
value: "kubernetes.default"
- name: KUBERNETES_SERVICE_PORT
value: "443"
---
apiVersion: v1
kind: Service
metadata:
name: metalcheck-backend
spec:
selector:
app: metalcheck
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer

29
examples/k8s/rbac.yaml Normal file
View File

@@ -0,0 +1,29 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: metalcheck-sa
namespace: metalcheck
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: metalcheck
name: metalcheck-role
rules:
- apiGroups: [""]
resources: ["pods", "nodes", "namespaces"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: metalcheck-rolebinding
namespace: metalcheck
subjects:
- kind: ServiceAccount
name: metalcheck-sa
namespace: metalcheck
roleRef:
kind: Role
name: metalcheck-role
apiGroup: rbac.authorization.k8s.io