104 lines
3.2 KiB
Markdown
104 lines
3.2 KiB
Markdown
# Interactive Floor Plan Application with Kubernetes
|
|
|
|
## Application Description
|
|
|
|
This application is an interactive floor plan visualization tool that displays sensor data on different floors of a building. Users can navigate between floors using the buttons at the bottom of the page and click on sensors to view their current data.
|
|
|
|
## Container List
|
|
|
|
1. **floorplan-webapp**
|
|
- Web application container based on Python and Flask
|
|
- Serves the frontend HTML, CSS, and JavaScript files
|
|
- Provides an API endpoint for sensor data
|
|
|
|
2. **mysql-db**
|
|
- MySQL database container
|
|
- Stores sensor information including position, floor, location, and values
|
|
|
|
## Kubernetes Objects
|
|
|
|
1. **Namespace**
|
|
- `sensor-app`: Isolated environment for all application resources
|
|
|
|
2. **Deployment**
|
|
- `floorplan-webapp`: Manages the web application with 2 replicas for high availability
|
|
|
|
3. **StatefulSet**
|
|
- `mysql`: Manages the MySQL database instance with persistent storage
|
|
|
|
4. **Services**
|
|
- `floorplan-service`: NodePort service exposing the web application on port 30080
|
|
- `mysql-service`: Headless service for MySQL database access
|
|
|
|
5. **PersistentVolume**
|
|
- `mysql-pv`: 1GB volume for MySQL data storage
|
|
|
|
6. **PersistentVolumeClaim**
|
|
- `mysql-pvc`: Claims storage from the persistent volume for MySQL
|
|
|
|
## Network and Storage Configuration
|
|
|
|
### Networks
|
|
- The application uses Kubernetes' built-in networking
|
|
- Web application connects to MySQL using the `mysql-service` DNS name
|
|
- External access is provided through a NodePort service on port 8080
|
|
|
|
### Storage
|
|
- The MySQL database uses a persistent volume mounted at `/var/lib/mysql`
|
|
- The persistent volume is backed by a hostPath at `/mnt/data` on the host machine
|
|
|
|
## Container Configuration
|
|
|
|
### Web Application Container
|
|
- Based on Python 3.9 slim image
|
|
- Installed packages: Flask, mysql-connector-python
|
|
- Configured to connect to MySQL database using environment variables
|
|
- Exposes port 5000
|
|
|
|
### MySQL Container
|
|
- Based on MySQL 8.0 image
|
|
- Configured with empty root password for development purposes
|
|
- Initializes with the sensors_db database and sample data
|
|
- Exposes port 3306
|
|
|
|
## Application Management
|
|
|
|
### Preparation
|
|
1. Make all scripts executable:
|
|
```
|
|
chmod +x prepare-app.sh start-app.sh stop-app.sh
|
|
```
|
|
2. Run the preparation script:
|
|
```
|
|
./prepare-app.sh
|
|
```
|
|
This will:
|
|
- Create the required namespace
|
|
- Prepare the persistent volume directory
|
|
- Build the Docker images
|
|
|
|
### Starting the Application
|
|
1. Run the start script:
|
|
```
|
|
./start-app.sh
|
|
```
|
|
This will:
|
|
- Apply all Kubernetes configurations
|
|
- Wait for all components to be ready
|
|
- Display the URL to access the application
|
|
|
|
### Stopping the Application
|
|
1. Run the stop script:
|
|
```
|
|
./stop-app.sh
|
|
```
|
|
This will:
|
|
- Remove all Kubernetes objects created for the application
|
|
- The persistent volume data will remain intact
|
|
|
|
### Viewing the Application
|
|
1. Open your web browser
|
|
2. Navigate to the URL displayed after running the start script http://localhost:8080
|
|
3. You should see the interactive floor plan with sensors
|
|
4. Use the buttons at the bottom to switch between floors
|
|
5. Click on sensors to view their data in the right panel |