diff --git a/sk1/README.md b/sk1/README.md new file mode 100644 index 0000000..da96e13 --- /dev/null +++ b/sk1/README.md @@ -0,0 +1,90 @@ +# 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 + +### 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: + ```bash + chmod +x prepare-app.sh remove-app.sh \ No newline at end of file