mirror of
https://ak-git.vectorsigma.ru/terghalin/metalcheck.git
synced 2025-10-26 07:25:55 +09:00
update(app): add examples and README file
This commit is contained in:
@@ -1 +1,2 @@
|
||||
app/resources.db
|
||||
.env
|
||||
|
||||
93
README.md
93
README.md
@@ -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 |
|
||||
|
||||
39
examples/k8s/deployment.yaml
Normal file
39
examples/k8s/deployment.yaml
Normal 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
29
examples/k8s/rbac.yaml
Normal 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
|
||||
Reference in New Issue
Block a user