public | ||
deployment.yaml | ||
Dockerfile | ||
namespace.yaml | ||
package-lock.json | ||
package.json | ||
prepare-app.sh | ||
README.md | ||
server.js | ||
service.yaml | ||
start-app.sh | ||
statefulset.yaml | ||
stop-app.sh |
Todo App Kubernetes Deployment
This repository contains the Kubernetes configuration files to deploy my Todo App.
Description
The Todo App is a web application for creating, reading, updating, and deleting tasks. It is built using Node.js and is containerized using Docker. The application uses a PostgreSQL database to store task data.
Containers Used
- elineen/todo-app:latest: The main application container that runs the Todo App.
- postgres:latest: The container that runs the PostgreSQL database.
Kubernetes Objects
- Namespace:
namespace.yaml
- The namespace in which all other objects are created. - Deployment:
deployment.yaml
- Defines the deployment configuration for the Todo App. - StatefulSet:
statefulset.yaml
- Defines the stateful set configuration for the Todo App, including PersistentVolume and PersistentVolumeClaim objects. - Service:
service.yaml
- Exposes the Todo App to the network. - Database Deployment:
db-deployment.yaml
- Defines the deployment configuration for the PostgreSQL database. - Database Service:
db-service.yaml
- Exposes the PostgreSQL database to the network within the cluster.
Virtual Networks and Named Volumes
- PersistentVolume: Defines a persistent volume for storing application data.
- PersistentVolumeClaim: Claims the persistent volume for use by the StatefulSet.
- Database PersistentVolume: Defines a persistent volume for storing database data.
- Database PersistentVolumeClaim: Claims the persistent volume for use by the PostgreSQL database.
Container Configuration
The container configuration includes the following:
- Application Image:
elineen/todo-app:latest
- Database Image:
postgres:latest
- Ports: The application listens on port 8080. The PostgreSQL database listens on port 5432.
- Volume Mounts: The application container mounts the persistent volume at
/data
. The PostgreSQL container mounts the persistent volume at the default data directory.
Database Configuration
The application uses a PostgreSQL database to store task data. The database is configured with the following environment variables:
- POSTGRES_DB: mydatabase
- POSTGRES_USER: myuser
- POSTGRES_PASSWORD: mypassword
Instructions
Prerequisites
- Kubernetes cluster (e.g., Minikube, Docker Desktop, or a cloud provider like GKE, EKS, AKS)
kubectl
command-line tool installed and configured to interact with your Kubernetes cluster- Docker installed and configured to pull images from Docker Hub
Prepare the Application
Run the following script to prepare the application, build the Docker image, and create the persistent volumes:
./prepare-app.sh
Start the Application
Run the following script to create all Kubernetes objects and start the application:
./start-app.sh
View the Application
If you are using a LoadBalancer service, you can access the application using the external IP address provided by the service. Run the following command to get the service details:
kubectl get services -n my-namespace
Open a web browser, enter this sentence and replace with the external IP address obtained from the previous step.
http://<external-ip>
Another way can also be by using Minikube:
minikube service web-app-service -n my-namespace
Stop the Application
Run the following script to delete all created Kubernetes objects and stop the application:
./stop-app.sh
This is it, your Todo-List is working, enjoy!