<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Babji-Sheik</title>
    <description>The latest articles on DEV Community by Babji-Sheik (@babjisheik).</description>
    <link>https://dev.to/babjisheik</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3069705%2F7024bf82-249e-42f9-91e6-ce3c0396b536.png</url>
      <title>DEV Community: Babji-Sheik</title>
      <link>https://dev.to/babjisheik</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/babjisheik"/>
    <language>en</language>
    <item>
      <title>What happens when your cluster runs out of CPU? — The unsolved DevOps paradox</title>
      <dc:creator>Babji-Sheik</dc:creator>
      <pubDate>Tue, 11 Nov 2025 19:18:29 +0000</pubDate>
      <link>https://dev.to/babjisheik/what-happens-when-your-cluster-runs-out-of-cpu-the-unsolved-devops-paradox-1jid</link>
      <guid>https://dev.to/babjisheik/what-happens-when-your-cluster-runs-out-of-cpu-the-unsolved-devops-paradox-1jid</guid>
      <description>&lt;h1&gt;
  
  
  🧩 What happens when your cluster runs out of CPU? — The unsolved DevOps paradox
&lt;/h1&gt;

&lt;p&gt;We often define our &lt;strong&gt;Kubernetes pods&lt;/strong&gt; with CPU requests, limits, and autoscaling policies.&lt;br&gt;&lt;br&gt;
The cluster scales pods up and down automatically — until one day, the &lt;strong&gt;cluster itself runs out of capacity&lt;/strong&gt;. 😅  &lt;/p&gt;

&lt;p&gt;That’s when I started wondering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💭 If the cluster’s total CPU resources hit the ceiling — what’s &lt;em&gt;really&lt;/em&gt; the right move?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Should we just &lt;strong&gt;offload the pain&lt;/strong&gt; to a managed cloud provider like AWS EKS or GKE and “dust our hands off”?
&lt;/li&gt;
&lt;li&gt;Or should we design our own &lt;strong&gt;autoscaling layer for the nodes&lt;/strong&gt; and manage scale at the infrastructure level manually?
&lt;/li&gt;
&lt;li&gt;Is there a better middle ground where we balance &lt;strong&gt;cost, control, and elasticity&lt;/strong&gt;?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s easy to autoscale &lt;em&gt;pods&lt;/em&gt;, but not so easy to autoscale &lt;em&gt;infrastructure&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
And at large scale, this becomes a real DevOps riddle — one that teams still debate every day.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 The Thought Behind It
&lt;/h3&gt;

&lt;p&gt;Kubernetes gives us &lt;em&gt;Horizontal Pod Autoscalers&lt;/em&gt; (HPA), and cloud providers give us &lt;em&gt;Cluster Autoscalers&lt;/em&gt; — but how do we decide which strategy wins in the long run?&lt;/p&gt;

&lt;p&gt;When CPU usage spikes across all nodes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pods start pending 💤&lt;/li&gt;
&lt;li&gt;Scheduler runs out of available CPU slots&lt;/li&gt;
&lt;li&gt;Costs skyrocket if we naïvely scale nodes&lt;/li&gt;
&lt;li&gt;And custom workloads might need preemption or priority rules&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🔍 The Question
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If your cluster maxes out its CPU, what’s the smartest and most sustainable scaling strategy — and why?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Rely on &lt;strong&gt;cloud-managed autoscaling&lt;/strong&gt; (e.g. GKE, EKS, AKS)?&lt;/li&gt;
&lt;li&gt;Build your own &lt;strong&gt;cluster-level autoscaler&lt;/strong&gt;?&lt;/li&gt;
&lt;li&gt;Or do something totally new (like hybrid bursting, edge + cloud orchestration)?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🧩 My Take
&lt;/h3&gt;

&lt;p&gt;There’s no single right answer — that’s why I’m calling it a &lt;em&gt;DevOps Millennium Problem&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
It’s where &lt;strong&gt;operations meets mathematics&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
balancing &lt;strong&gt;resources, latency, and cost&lt;/strong&gt; in an infinite scaling loop.&lt;/p&gt;

&lt;p&gt;So what do you think?&lt;br&gt;&lt;br&gt;
If you hit 100% CPU cluster-wide — what’s your next move?&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deploying a Node.js App on Kubernetes with Minikube</title>
      <dc:creator>Babji-Sheik</dc:creator>
      <pubDate>Tue, 11 Nov 2025 19:13:32 +0000</pubDate>
      <link>https://dev.to/babjisheik/deploying-a-nodejs-app-on-kubernetes-with-minikube-52f</link>
      <guid>https://dev.to/babjisheik/deploying-a-nodejs-app-on-kubernetes-with-minikube-52f</guid>
      <description>&lt;p&gt;published: true&lt;br&gt;
description: "From Docker to Kubernetes — how I built, deployed, debugged, and verified a Node.js app locally using Minikube on Windows. A full hands-on DevOps learning experience."&lt;br&gt;
tags: ["devops", "kubernetes", "docker", "node", "git", "minikube", "windows"]&lt;/p&gt;
&lt;h2&gt;
  
  
  cover_image: "&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fq4x1xx7y9p8vyt3z8im.png" rel="noopener noreferrer"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fq4x1xx7y9p8vyt3z8im.png&lt;/a&gt;"
&lt;/h2&gt;
&lt;h1&gt;
  
  
  🚀 My DevOps Journey: Node.js + Kubernetes (Minikube) on Windows
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A personal hands-on walkthrough of Docker, Kubernetes, and Git — how I containerized and deployed a Node.js app locally using Minikube, explored versioning, debugging, and real DevOps workflows.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🌱 Why I Did This
&lt;/h2&gt;

&lt;p&gt;I wanted to move beyond tutorials and &lt;strong&gt;actually build and debug&lt;/strong&gt; something real with Kubernetes.&lt;br&gt;&lt;br&gt;
So I set up &lt;strong&gt;Minikube on Windows&lt;/strong&gt;, deployed a &lt;strong&gt;Node.js web app&lt;/strong&gt;, managed Docker containers, and learned how everything connects — from YAML to running pods.  &lt;/p&gt;

&lt;p&gt;This project became a deep dive into how DevOps engineers really work.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Project Overview
&lt;/h2&gt;

&lt;p&gt;Here’s what I built and tested:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🐳 Containerized a Node.js app using &lt;strong&gt;Docker&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;☸️ Deployed it inside &lt;strong&gt;Kubernetes (Minikube)&lt;/strong&gt; cluster&lt;/li&gt;
&lt;li&gt;🔗 Exposed the app externally using &lt;strong&gt;NodePort&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;🧪 Verified version metadata (&lt;code&gt;version.json&lt;/code&gt;) like in real CI pipelines&lt;/li&gt;
&lt;li&gt;🧰 Managed everything using &lt;strong&gt;Git + PowerShell&lt;/strong&gt; on &lt;strong&gt;Windows 11 Home&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ⚙️ Tools I Used
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Tools &amp;amp; Versions&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OS&lt;/td&gt;
&lt;td&gt;Windows 11 Home&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Runtime&lt;/td&gt;
&lt;td&gt;Node.js (LTS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Containers&lt;/td&gt;
&lt;td&gt;Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cluster&lt;/td&gt;
&lt;td&gt;Kubernetes (Minikube v1.37.0)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Base Image&lt;/td&gt;
&lt;td&gt;kicbase:v0.0.48&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Version Control&lt;/td&gt;
&lt;td&gt;Git + GitHub&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Go (iso_test.go concept)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🧱 Step 1: Setting up Minikube
&lt;/h2&gt;

&lt;p&gt;I started my cluster using Docker as a driver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;minikube start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Minikube downloaded the base image (&lt;code&gt;kicbase:v0.0.48&lt;/code&gt;) and booted a control-plane node.&lt;br&gt;&lt;br&gt;
Everything ran on Windows Home — no Hyper-V needed.&lt;/p&gt;


&lt;h2&gt;
  
  
  🐳 Step 2: Dockerize the Node.js App
&lt;/h2&gt;

&lt;p&gt;I wrote a simple Node.js server (&lt;code&gt;app.js&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;end&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello from Node.js running inside Kubernetes!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="nx"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server running on port &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, I created a &lt;code&gt;Dockerfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:18-alpine&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /usr/src/app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["node", "app.js"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Built the image:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; node-k8s-demo &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ☸️ Step 3: Deploy on Kubernetes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Deployment YAML
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s-deployment&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s-demo&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Service YAML
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s-service&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NodePort&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;node-k8s&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
    &lt;span class="na"&gt;targetPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3000&lt;/span&gt;
    &lt;span class="na"&gt;nodePort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Applied configs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; service.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🌐 Step 4: Expose and Access the App
&lt;/h2&gt;

&lt;p&gt;Used Minikube to expose it externally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;minikube service node-k8s-service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✅ Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NAMESPACE │       NAME       │ TARGET PORT │            URL            
default   │ node-k8s-service │ 3000        │ http://192.168.49.2:30080 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, visiting &lt;code&gt;http://192.168.49.2:30080&lt;/code&gt; opened my app 🎉&lt;/p&gt;




&lt;h2&gt;
  
  
  🧪 Step 5: Version Verification (ISO Test Concept)
&lt;/h2&gt;

&lt;p&gt;From a real Minikube test example (&lt;code&gt;iso_test.go&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"iso_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v1.37.0-1758198818-20370"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kicbase_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v0.0.48"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minikube_version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"v1.37.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"commit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"a4f96d0469d67330691be52a99ff1f91e31ba77f"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I learned how build metadata (ISO version, commit IDs) ensures &lt;strong&gt;consistency in CI/CD&lt;/strong&gt; — just like in real production releases.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Step 6: Debugging, Logs &amp;amp; Restarts
&lt;/h2&gt;

&lt;p&gt;Things didn’t always go perfectly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sometimes the tunnel didn’t start → fixed by restarting Minikube
&lt;/li&gt;
&lt;li&gt;Verified pods using &lt;code&gt;kubectl get pods&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Checked logs with &lt;code&gt;kubectl logs &amp;lt;pod&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Cleaned up with &lt;code&gt;kubectl delete -f &amp;lt;file&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This taught me real DevOps problem-solving, not just running commands.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧾 Step 7: Git &amp;amp; Documentation
&lt;/h2&gt;

&lt;p&gt;I documented everything in Git and GitHub:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Node.js Kubernetes demo setup"&lt;/span&gt;
git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
git remote add origin https://github.com/&amp;lt;your-username&amp;gt;/&amp;lt;repo&amp;gt;.git
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also added &lt;code&gt;.gitignore&lt;/code&gt; and this detailed &lt;code&gt;README.md&lt;/code&gt; (you’re reading the same content now 😉).&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes architecture &amp;amp; Minikube internals
&lt;/li&gt;
&lt;li&gt;Docker image creation &amp;amp; reusability
&lt;/li&gt;
&lt;li&gt;YAML configuration &amp;amp; rolling updates
&lt;/li&gt;
&lt;li&gt;Exposing services via NodePort
&lt;/li&gt;
&lt;li&gt;Debugging tunnels and IP routing
&lt;/li&gt;
&lt;li&gt;CI version validation (&lt;code&gt;version.json&lt;/code&gt; check)
&lt;/li&gt;
&lt;li&gt;Proper Git commits and repo structuring
&lt;/li&gt;
&lt;li&gt;Documenting DevOps work cleanly
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📚 Full Stack of What I Explored
&lt;/h2&gt;

&lt;p&gt;✅ Minikube lifecycle&lt;br&gt;&lt;br&gt;
✅ Docker build, run, inspect&lt;br&gt;&lt;br&gt;
✅ Kubernetes Deployments &amp;amp; Services&lt;br&gt;&lt;br&gt;
✅ NodePort &amp;amp; local networking&lt;br&gt;&lt;br&gt;
✅ ISO versioning and metadata validation&lt;br&gt;&lt;br&gt;
✅ Windows compatibility handling&lt;br&gt;&lt;br&gt;
✅ Git workflows&lt;br&gt;&lt;br&gt;
✅ Debugging tunnels and pods&lt;br&gt;&lt;br&gt;
✅ CI/CD thinking &amp;amp; test verification  &lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This wasn’t just a “Minikube tutorial.”&lt;br&gt;&lt;br&gt;
It was my &lt;strong&gt;complete DevOps learning journey&lt;/strong&gt; — from writing code to deploying and validating it inside a Kubernetes cluster, &lt;strong&gt;all on Windows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I learned that real DevOps is not about memorizing commands — it’s about understanding how every piece connects.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧑‍💻 Author
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Sheik&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
💡 DevOps | Kubernetes | Docker | Git | Cloud Automation&lt;br&gt;&lt;br&gt;
📦 Hands-on with containers, clusters, and CI/CD pipelines&lt;br&gt;&lt;br&gt;
📬 Connect: &lt;a href="https://github.com/&amp;lt;your-username" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://linkedin.com/in/&amp;lt;your-link" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this post helpful, drop a ❤️ or comment your Minikube experience!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why Secure Messaging Matters: From Packets to Private Keys</title>
      <dc:creator>Babji-Sheik</dc:creator>
      <pubDate>Sun, 13 Jul 2025 21:54:58 +0000</pubDate>
      <link>https://dev.to/babjisheik/why-secure-messaging-matters-from-packets-to-private-keys-14nk</link>
      <guid>https://dev.to/babjisheik/why-secure-messaging-matters-from-packets-to-private-keys-14nk</guid>
      <description>&lt;p&gt;In an age where every thought, plan, and joke we share zips through countless routers and servers, it’s critical to understand why end-to-end encryption isn’t just “nice to have” — it’s a necessity.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Messaging and Its Importance&lt;br&gt;
Whether you’re coordinating a product launch, sharing family photos, or trading secrets, messaging underpins all modern collaboration. It’s the lifeblood of teams, communities, and relationships.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Inevitability of Connecting to the Internet&lt;br&gt;
Today, everyone and everything is online: smartphones, IoT sensors, laptops, even fridges. Our global appetite for connectivity means messaging systems must be robust, reliable, and—most importantly—secure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TCP/IP, Packet Exchanges, and the Internet Path&lt;br&gt;
Every message you send is chopped into packets that traverse TCP/IP networks, hop between Internet Exchange Points (IXPs), and finally reach your recipient’s ISP.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Packets can be routed through dozens of autonomous networks.&lt;/p&gt;

&lt;p&gt;Every hop is a potential eavesdrop point if data isn’t encrypted.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Secure System with WebSockets
We use WebSockets to maintain a persistent, bidirectional channel between client and server. This lets us:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Push messages instantly&lt;/p&gt;

&lt;p&gt;Detect lost connections and re-establish them&lt;/p&gt;

&lt;p&gt;Layer encryption directly on the socket without extra HTTP overhead&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lightweight, Customized Code
Bloat kills performance and widens the attack surface. Our entire stack is:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Slim—just the essentials for messaging&lt;/p&gt;

&lt;p&gt;Tailored—no generic libraries, only custom-audited crypto&lt;/p&gt;

&lt;p&gt;Fast—low latency even on mobile networks&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Secure Communication from End to End&lt;br&gt;
With zero-knowledge servers, your plaintext never touches our infrastructure. We only see ciphertext—garbage without the keys.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why Elliptic Curve Ed25519?&lt;br&gt;
Performance: Extremely fast signing and verification&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Security: 128-bit security level, resistant to known attacks&lt;/p&gt;

&lt;p&gt;Key Size: Small public/private keys make mobile sync trivial&lt;br&gt;
Ed25519 is the gold standard for modern public-key crypto.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lessons from Alan Turing’s Enigma
Turing broke the Enigma by exploiting implementation flaws. We learned:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;“A cipher is only as strong as its weakest link.”&lt;br&gt;
That’s why our key generation, exchange, and management follow battle-tested best practices—no manual rotors here.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Not Even “God” Can Decode Without Your Private Key&lt;br&gt;
Without your private key, decryption is mathematically impossible. There are no backdoors, no “master keys,” and no secret exemptions—only your device holds the power to read your messages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Case for Personal Communication Platforms&lt;br&gt;
Companies owe it to their users—and themselves—to own their communication stack:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Privacy by design instead of retrofitted security&lt;/p&gt;

&lt;p&gt;Full control over data flows and retention policies&lt;/p&gt;

&lt;p&gt;Trust that no third party can intercept or monetize your chats&lt;/p&gt;

&lt;p&gt;Bottom line: In a world wired end-to-end, your messages deserve bulletproof protection. That’s why our chat system embraces WebSockets, Ed25519, zero-knowledge servers, and a lightweight custom codebase. Because real privacy isn’t an option—it’s the only standard that matters.&lt;/p&gt;

&lt;p&gt;Just a food for thought.&lt;/p&gt;

</description>
      <category>securemessaging</category>
    </item>
    <item>
      <title>🧨 Tailwind CSS Install Nightmare: “npx error could not determine executable to run”</title>
      <dc:creator>Babji-Sheik</dc:creator>
      <pubDate>Tue, 22 Apr 2025 05:58:17 +0000</pubDate>
      <link>https://dev.to/babjisheik/tailwind-css-install-nightmare-npx-error-could-not-determine-executable-to-run-1b7a</link>
      <guid>https://dev.to/babjisheik/tailwind-css-install-nightmare-npx-error-could-not-determine-executable-to-run-1b7a</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdm6zobsuazvgpywqgod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdm6zobsuazvgpywqgod.png" alt=" " width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Going through this, I will let you know when I have the fix &lt;br&gt;
;-)&lt;/p&gt;

</description>
      <category>tailwindcss</category>
      <category>webdev</category>
      <category>css</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
