diff --git a/kevingeorge@mulearn/FinalProject/Dockerfile b/kevingeorge@mulearn/FinalProject/Dockerfile new file mode 100644 index 00000000..f18fb0d7 --- /dev/null +++ b/kevingeorge@mulearn/FinalProject/Dockerfile @@ -0,0 +1,5 @@ +# Use lightweight nginx image +FROM nginx:alpine + +# Copy index.html into nginx default path +COPY index.html /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/kevingeorge@mulearn/FinalProject/README.md b/kevingeorge@mulearn/FinalProject/README.md new file mode 100644 index 00000000..c3f55c7c --- /dev/null +++ b/kevingeorge@mulearn/FinalProject/README.md @@ -0,0 +1,43 @@ +# πŸš€ My First Scalable Web App + +## πŸ“Œ Overview +This project demonstrates deploying a containerized web application using Docker and Kubernetes (KIND), showcasing scalability and self-healing capabilities. + +## βš™οΈ Tech Stack +- Docker +- Kubernetes (KIND) +- Nginx + +## πŸš€ Features +- Containerized web app using Docker +- Kubernetes deployment with 3 replicas +- Service exposure using NodePort +- Environment variable injection (STUDENT_NAME) +- Self-healing (auto pod recreation) + +## πŸ“‚ Project Structure +FinalProject/ +β”œβ”€β”€ Dockerfile +β”œβ”€β”€ deployment.yaml +β”œβ”€β”€ service.yaml +β”œβ”€β”€ index.html +β”œβ”€β”€ screenshots/ + +## πŸ§ͺ Steps Performed +1. Built Docker image +2. Loaded image into KIND cluster +3. Deployed app with 3 replicas +4. Exposed service using NodePort +5. Verified scaling and self-healing + +## πŸ“Έ Screenshots +- Pods running +- Service details +- Application in browser +- Self-healing demonstration + +## 🧠 Key Learnings +- Kubernetes deployment & scaling +- Debugging image pull errors +- Service exposure in KIND +- Real-world DevOps workflow \ No newline at end of file diff --git a/kevingeorge@mulearn/FinalProject/deployment.yaml b/kevingeorge@mulearn/FinalProject/deployment.yaml new file mode 100644 index 00000000..2d172a01 --- /dev/null +++ b/kevingeorge@mulearn/FinalProject/deployment.yaml @@ -0,0 +1,23 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: finalproject-deployment +spec: + replicas: 3 + selector: + matchLabels: + app: final-app + template: + metadata: + labels: + app: final-app + spec: + containers: + - name: final-app + image: final-app + imagePullPolicy: Never + ports: + - containerPort: 80 + env: + - name: STUDENT_NAME + value: "Kevin George" \ No newline at end of file diff --git a/kevingeorge@mulearn/FinalProject/index.html b/kevingeorge@mulearn/FinalProject/index.html new file mode 100644 index 00000000..17f2d682 --- /dev/null +++ b/kevingeorge@mulearn/FinalProject/index.html @@ -0,0 +1,381 @@ + + + + + + Kevin George β€” DevOps Project + + + + + + + +
+ +
Live on Kubernetes
+ +

+ My First
Scalable Web App +

+ +

+ A containerised web application deployed to a local Kubernetes cluster using Docker + KIND β€” + demonstrating replicas, self-healing, and environment-variable injection. +

+ +
+
KG
+
+
Deployed by
+
Kevin George
+
+
+ +
+ +
+
Docker
+
Kubernetes
+
Nginx
+
KIND (K8s in Docker)
+
kubectl
+
+
+ +
+
+
Institution
+
AJCE, Kanjirappally
+
+
+
Replicas
+
3 Pods Running
+
+
+
Self-Healing
+
Enabled βœ“
+
+
+ + + +
+ + + + + + + \ No newline at end of file diff --git a/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.40.25 AM (1).jpeg b/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.40.25 AM (1).jpeg new file mode 100644 index 00000000..3d892a00 Binary files /dev/null and b/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.40.25 AM (1).jpeg differ diff --git a/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.40.25 AM.jpeg b/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.40.25 AM.jpeg new file mode 100644 index 00000000..e9c5b754 Binary files /dev/null and b/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.40.25 AM.jpeg differ diff --git a/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.44.11 AM.jpeg b/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.44.11 AM.jpeg new file mode 100644 index 00000000..04487a92 Binary files /dev/null and b/kevingeorge@mulearn/FinalProject/screenshots/WhatsApp Image 2026-04-08 at 11.44.11 AM.jpeg differ diff --git a/kevingeorge@mulearn/FinalProject/service.yaml b/kevingeorge@mulearn/FinalProject/service.yaml new file mode 100644 index 00000000..457f36da --- /dev/null +++ b/kevingeorge@mulearn/FinalProject/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: final-app-service +spec: + type: NodePort + selector: + app: final-app + ports: + - port: 80 + targetPort: 80 + nodePort: 30008 \ No newline at end of file diff --git a/kevingeorge@mulearn/README.md b/kevingeorge@mulearn/README.md new file mode 100644 index 00000000..cb7f2ce8 --- /dev/null +++ b/kevingeorge@mulearn/README.md @@ -0,0 +1,51 @@ +![Docker](https://img.shields.io/badge/Docker-Containerization-blue?logo=docker) +![Kubernetes](https://img.shields.io/badge/Kubernetes-Orchestration-blue?logo=kubernetes) +![GitHub Actions](https://img.shields.io/badge/GitHub_Actions-CI/CD-black?logo=githubactions) +![Status](https://img.shields.io/badge/Project-Active-success) + +# πŸš€ DevOps Learning Journey - Shipyard Foundations + +Hi, I'm Kevin George πŸ‘‹ +This repository contains my hands-on work while learning DevOps concepts. + +--- + +## πŸ“‚ Tasks Overview + +### 🐳 Task-2: Docker & Containers +- Created Dockerfile for Python app +- Built Docker image +- Ran container locally + +--- + +### βš™οΈ Task-3: CI/CD with GitHub Actions +- Created static website +- Configured GitHub Actions workflow +- Deployed using GitHub Pages + +--- + +### ☸️ Task-4: Kubernetes (KIND) +- Created Kubernetes cluster using KIND +- Deployed application using Deployment +- Exposed using NodePort Service +- Verified using browser + +--- + +## πŸ› οΈ Tech Stack +- Docker +- GitHub Actions (CI/CD) +- Kubernetes (KIND) +- Git & GitHub + +--- + +## πŸ“Œ Goal +To become a Cloud/DevOps Engineer by building real-world projects. + +--- + +## πŸ”— Connect with me +- GitHub: https://github.com/KevinGeorge100 diff --git a/kevingeorge@mulearn/Task-2/Dockerfile b/kevingeorge@mulearn/Task-2/Dockerfile new file mode 100644 index 00000000..eb0a94ef --- /dev/null +++ b/kevingeorge@mulearn/Task-2/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.9-slim + +WORKDIR /app + +COPY . . + +CMD ["python", "-u", "script.py"] diff --git a/kevingeorge@mulearn/Task-2/script.py b/kevingeorge@mulearn/Task-2/script.py new file mode 100644 index 00000000..e6d64ba0 --- /dev/null +++ b/kevingeorge@mulearn/Task-2/script.py @@ -0,0 +1,7 @@ +import time + +print("πŸš€ Container Started") + +while True: + print("Hello World") + time.sleep(5) diff --git a/kevingeorge@mulearn/Task-3/index.html b/kevingeorge@mulearn/Task-3/index.html new file mode 100644 index 00000000..f05190ad --- /dev/null +++ b/kevingeorge@mulearn/Task-3/index.html @@ -0,0 +1,620 @@ + + + + + + Kevin George Β· DevOps Portfolio + + + + + + + + +
+ + +
+
Assignment 3 Β· CI/CD Pipeline Basics
+

Kevin
George.

+

+ B.Tech CSE Β· AJCE Β· 2027
+ Learning DevOps β€” one pipeline at a time. This page is auto-deployed + via GitHub Actions to GitHub Pages + on every push to main. Zero manual uploads. Pure automation. +

+
+ + +
+
+
+
+
+ bash β€” shipyard-foundations +
+
+
+ + +
+ +
+
+
⬇️
βœ“
+
Checkout
+
actions/checkout@v4
+
2s
+
+
+
βš™οΈ
βœ“
+
Setup Pages
+
configure-pages@v4
+
1s
+
+
+
πŸ“¦
βœ“
+
Upload
+
upload-pages-artifact@v3
+
3s
+
+
+
πŸš€
βœ“
+
Deploy
+
deploy-pages@v4 Β· live
+
5s
+
+
+
+ + +
+ +
+
+
πŸ™
+
+
GitHub Actions
+
Workflow runner Β· YAML-based CI/CD automation on push events
+
+
+
+
πŸ“„
+
+
GitHub Pages
+
Static site hosting Β· served from Actions artifact, not a branch
+
+
+
+
πŸ”€
+
+
Git
+
Version control Β· push to main triggers the full pipeline
+
+
+
+
🌐
+
+
HTML / CSS
+
Single-file static site Β· the artifact being deployed
+
+
+
+
πŸ”
+
+
OIDC Permissions
+
id-token write + pages write Β· secure deploy without PATs
+
+
+
+
πŸŽ“
+
+
Shipyard Foundations
+
gtech-mulearn Β· DevOps learning track Β· Task 3/3
+
+
+
+
+ + +
+ + +
+ + + + +
+ + + + + diff --git a/kevingeorge@mulearn/Task-3/submission.md b/kevingeorge@mulearn/Task-3/submission.md new file mode 100644 index 00000000..9344320e --- /dev/null +++ b/kevingeorge@mulearn/Task-3/submission.md @@ -0,0 +1,11 @@ +Name: Kevin George +muid: kevingeorge@mulearn + +## πŸ”— Repository Link +https://github.com/KevinGeorge100/Shipyard-Foundations + +## 🌐 Live Website +https://kevingeorge100.github.io/Shipyard-Foundations/ + +## 🌐 Git Actions Link +https://github.com/KevinGeorge100/Shipyard-Foundations/actions diff --git a/kevingeorge@mulearn/Task-4/README.md b/kevingeorge@mulearn/Task-4/README.md new file mode 100644 index 00000000..128de984 --- /dev/null +++ b/kevingeorge@mulearn/Task-4/README.md @@ -0,0 +1,25 @@ +# πŸš€ Kubernetes Deployment (KIND) + +## πŸ“Œ Overview +This project demonstrates deploying a containerized application using Kubernetes locally with KIND. + +## βš™οΈ What I Did +- Set up Kubernetes cluster using KIND +- Created Deployment for Nginx +- Exposed application using NodePort Service +- Verified application via browser using port-forwarding + +## πŸ› οΈ Tech Stack +- Docker +- Kubernetes (KIND) +- kubectl + +## πŸ“Έ Output +- Pods running successfully +- Service exposed +- Nginx welcome page accessible + +## πŸ“š Learnings +- Kubernetes architecture basics +- Deployment & Service concepts +- Networking challenges in local clusters (KIND) diff --git a/kevingeorge@mulearn/Task-4/deployment.yaml b/kevingeorge@mulearn/Task-4/deployment.yaml new file mode 100644 index 00000000..03ff06be --- /dev/null +++ b/kevingeorge@mulearn/Task-4/deployment.yaml @@ -0,0 +1,19 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-deployment +spec: + replicas: 1 + selector: + matchLabels: + app: nginx + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx + ports: + - containerPort: 80 diff --git a/kevingeorge@mulearn/Task-4/service.yaml b/kevingeorge@mulearn/Task-4/service.yaml new file mode 100644 index 00000000..0e904cc0 --- /dev/null +++ b/kevingeorge@mulearn/Task-4/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: nginx-service +spec: + type: NodePort + selector: + app: nginx + ports: + - port: 80 + targetPort: 80 + nodePort: 30007