zkt25/sk1
2025-05-07 14:46:35 +02:00
..
k8s new exam files 2025-05-07 13:02:50 +02:00
src new exam files 2025-05-07 13:02:50 +02:00
.gitignore new exam files 2025-05-07 13:02:50 +02:00
Dockerfile new exam files 2025-05-07 13:02:50 +02:00
package.json new exam files 2025-05-07 13:02:50 +02:00
prepare-app.sh new exam files 2025-05-07 13:02:50 +02:00
README.md new 2025-05-07 14:46:35 +02:00
remove-app.sh new exam files 2025-05-07 13:02:50 +02:00

Contact List Application

A simple web-based contact list application deployed on Google Kubernetes Engine (GKE) with automated HTTPS certificate provisioning.

Description

This application allows users to create, view, update, and delete contacts in a persistent MongoDB database. It features a clean, responsive interface and is deployed as a containerized application on Google Cloud Platform using Kubernetes.

Technologies Used

  • Frontend: HTML, CSS, JavaScript
  • Backend: Node.js with Express
  • Database: MongoDB
  • Containerization: Docker
  • Orchestration: Google Kubernetes Engine (GKE)
  • Load Balancing & HTTPS: GKE Ingress with Google-managed certificates
  • Domain: Dynamic domain using nip.io DNS service

Architecture

The application consists of multiple containers:

  1. Contact App: Node.js application serving the web interface and API
  2. MongoDB: NoSQL database for storing contact information
  3. Ingress Controller: Manages external access to the services
  4. Load Balancer: Distributes incoming traffic

Key Features

  • Responsive web interface
  • RESTful API for contact management
  • Persistent data storage using MongoDB with PersistentVolumeClaims
  • Automatic HTTPS certificate provisioning
  • Automatic application restart on failure
  • Scalable architecture

Deployment Files

The application includes the following configuration files:

  • Dockerfile: Containerizes the Node.js application
  • k8s/: Kubernetes configuration directory
    • app-deployment.yaml: Deployment for the Node.js application
    • app-service.yaml: Service for the Node.js application
    • contact-app-lb.yaml: LoadBalancer service for obtaining external IP
    • ingress.yaml: Template for Ingress configuration
    • mongo-deployment.yaml: Deployment for MongoDB
    • mongo-service.yaml: Service for MongoDB
    • mongo-pvc.yaml: PersistentVolumeClaim for MongoDB data
    • namespace.yaml: Namespace for application resources

Deployment Scripts

prepare-app.sh

This script handles the entire deployment process:

  1. Builds and pushes the Docker image to Google Container Registry
  2. Creates a GKE cluster if one doesn't exist
  3. Deploys MongoDB with persistent storage
  4. Deploys the Contact App application
  5. Creates a LoadBalancer service to obtain an external IP
  6. Configures Ingress with a dynamic domain using nip.io
  7. Sets up HTTPS with Google-managed certificates

remove-app.sh

This script removes all resources created by the application:

  1. Deletes Ingress and certificates
  2. Deletes application deployments and services
  3. Deletes MongoDB deployment, service, and PVC
  4. Removes the Kubernetes namespace

Usage Instructions

you can access the website here: https://34.54.83.94.nip.io

Prerequisites

  1. Google Cloud Platform account with billing enabled
  2. Google Cloud SDK installed and configured
  3. kubectl installed
  4. Docker installed

Deployment

  1. Clone the repository
  2. Navigate to the project directory
  3. Make the scripts executable:
    chmod +x prepare-app.sh remove-app.sh