Minikube downloaded the base image (kicbase:v0.0.48) and booted a control-plane node.
Everything ran on Windows Home β no Hyper-V needed.
π³ Step 2: Dockerize the Node.js App
I wrote a simple Node.js server (app.js):
const http = require("http");
const PORT = 3000;
const server = http.createServer((req, res) => {
res.end("Hello from Node.js running inside Kubernetes!");
});
server.listen(PORT, () => console.log(`Server running on port ${PORT}`));
Then, I created a Dockerfile:
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Built the image:
docker build -t node-k8s-demo .
βΈοΈ Step 3: Deploy on Kubernetes
Deployment YAML
apiVersion: apps/v1
k...
Minikube downloaded the base image (kicbase:v0.0.48) and booted a control-plane node.
Everything ran on Windows Home β no Hyper-V needed.
π³ Step 2: Dockerize the Node.js App
I wrote a simple Node.js server (app.js):
const http = require("http");
const PORT = 3000;
const server = http.createServer((req, res) => {
res.end("Hello from Node.js running inside Kubernetes!");
});
server.listen(PORT, () => console.log(`Server running on port ${PORT}`));
Then, I created a Dockerfile:
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Built the image:
docker build -t node-k8s-demo .
βΈοΈ Step 3: Deploy on Kubernetes
Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: node-k8s-deployment
spec:
replicas: 1
selector:
matchLabels:
app: node-k8s
template:
metadata:
labels:
app: node-k8s
spec:
containers:
- name: node-k8s
image: node-k8s-demo
ports:
- containerPort: 3000
Service YAML
apiVersion: v1
kind: Service
metadata:
name: node-k8s-service
spec:
type: NodePort
selector:
app: node-k8s
ports:
- port: 3000
targetPort: 3000
nodePort: 30080
Applied configs:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
π Step 4: Expose and Access the App
Used Minikube to expose it externally:
minikube service node-k8s-service
β Output:
NAMESPACE β NAME β TARGET PORT β URL
default β node-k8s-service β 3000 β http://192.168.49.2:30080
Then, visiting http://192.168.49.2:30080 opened my app π
π§ͺ Step 5: Version Verification (ISO Test Concept)
From a real Minikube test example (iso_test.go):
{
"iso_version": "v1.37.0-1758198818-20370",
"kicbase_version": "v0.0.48",
"minikube_version": "v1.37.0",
"commit": "a4f96d0469d67330691be52a99ff1f91e31ba77f"
}
I learned how build metadata (ISO version, commit IDs) ensures consistency in CI/CD β just like in real production releases.
π§ Step 6: Debugging, Logs & Restarts
Things didnβt always go perfectly.
- Sometimes the tunnel didnβt start β fixed by restarting Minikube
- Verified pods using
kubectl get pods - Checked logs with
kubectl logs <pod> - Cleaned up with
kubectl delete -f <file>
This taught me real DevOps problem-solving, not just running commands.
π§Ύ Step 7: Git & Documentation
I documented everything in Git and GitHub:
git init
git add .
git commit -m "Node.js Kubernetes demo setup"
git branch -M main
git remote add origin https://github.com/<your-username>/<repo>.git
git push -u origin main
Also added .gitignore and this detailed README.md (youβre reading the same content now π).
π‘ What I Learned
- Kubernetes architecture & Minikube internals
- Docker image creation & reusability
- YAML configuration & rolling updates
- Exposing services via NodePort
- Debugging tunnels and IP routing
- CI version validation (
version.jsoncheck) - Proper Git commits and repo structuring
- Documenting DevOps work cleanly
π Full Stack of What I Explored
β Minikube lifecycle
β Docker build, run, inspect
β Kubernetes Deployments & Services
β NodePort & local networking
β ISO versioning and metadata validation
β Windows compatibility handling
β Git workflows
β Debugging tunnels and pods
β CI/CD thinking & test verification
π§ Final Thoughts
This wasnβt just a βMinikube tutorial.β
It was my complete DevOps learning journey β from writing code to deploying and validating it inside a Kubernetes cluster, all on Windows.
I learned that real DevOps is not about memorizing commands β itβs about understanding how every piece connects.
π§βπ» Author
Sheik
π‘ DevOps | Kubernetes | Docker | Git | Cloud Automation
π¦ Hands-on with containers, clusters, and CI/CD pipelines
π¬ Connect: GitHub | LinkedIn
If you found this post helpful, drop a β€οΈ or comment your Minikube experience!