Task 2 - Kubernetes projet
Go to file
2025-04-16 14:42:22 +00:00
public Téléverser les fichiers vers "public" 2025-04-15 20:12:35 +00:00
deployment.yaml Add 2025-04-15 20:11:51 +00:00
Dockerfile Add 2025-04-15 20:11:51 +00:00
namespace.yaml Add 2025-04-15 20:11:51 +00:00
package-lock.json Add 2025-04-15 20:11:51 +00:00
package.json Add 2025-04-15 20:11:51 +00:00
prepare-app.sh Add 2025-04-15 20:11:51 +00:00
README.md Actualiser README.md 2025-04-16 14:42:22 +00:00
server.js Add 2025-04-15 20:11:51 +00:00
service.yaml Add 2025-04-15 20:11:51 +00:00
start-app.sh Add 2025-04-15 20:11:51 +00:00
statefulset.yaml Actualiser statefulset.yaml 2025-04-16 09:17:44 +00:00
stop-app.sh Add 2025-04-15 20:11:51 +00:00

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!