<?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: Akilesh Js</title>
    <description>The latest articles on DEV Community by Akilesh Js (@akilesh_js).</description>
    <link>https://dev.to/akilesh_js</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4133137%2Fa31ad10e-6269-470f-8365-d1db1f8cfedc.png</url>
      <title>DEV Community: Akilesh Js</title>
      <link>https://dev.to/akilesh_js</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akilesh_js"/>
    <language>en</language>
    <item>
      <title>VMware Admin's Guide to Kubernetes</title>
      <dc:creator>Akilesh Js</dc:creator>
      <pubDate>Sat, 19 Sep 2026 16:32:26 +0000</pubDate>
      <link>https://dev.to/akilesh_js/vmware-admins-guide-to-kubernetes-2of5</link>
      <guid>https://dev.to/akilesh_js/vmware-admins-guide-to-kubernetes-2of5</guid>
      <description>&lt;p&gt;The Problem Nobody Talks About&lt;br&gt;
When I first approached Kubernetes, every tutorial assumed I was a developer coming from Docker. Nobody wrote for someone who knew vSphere inside-out — who understood DRS, vMotion, VSAN, NSX, and had opinions about datastore sizing.&lt;/p&gt;

&lt;p&gt;The Mental Model Map&lt;br&gt;
| VMware vSphere | Kubernetes Equivalent | Key Difference |&lt;br&gt;
|---|---|---|&lt;br&gt;
| ESXi Host | Node | Nodes run containers, not VMs |&lt;br&gt;
| vCenter Server | Control Plane (API Server) | API-driven, not GUI-first |&lt;br&gt;
| VM | Pod | Pods are ephemeral — embrace this |&lt;br&gt;
| VM Template | Container Image | Stored in a registry, not a datastore |&lt;br&gt;
| vSwitch / DVS | CNI Plugin (Calico, Cilium) | Defined in YAML, not GUI clicks |&lt;br&gt;
| NSX Microsegmentation | NetworkPolicy | Written as code, version-controlled |&lt;br&gt;
| Snapshot | — (no direct equivalent) | etcd backup + Velero for cluster backup |&lt;br&gt;
| vMotion | Pod Rescheduling | Automatic, not manual |&lt;br&gt;
| DRS | Scheduler + HPA | Fully automated and policy-driven |&lt;br&gt;
| Resource Pool | Namespace + LimitRange | Enforced via YAML, not right-click |&lt;br&gt;
| Datastore | PersistentVolume (PV) | Claimed by workloads, not assigned to VMs |&lt;br&gt;
| NFS/VMFS | StorageClass | Dynamically provisioned on-demand |&lt;br&gt;
| vSAN | Rook-Ceph / Longhorn | Software-defined storage for K8s |&lt;br&gt;
| HA Cluster | ReplicaSet | App-level HA, not host-level |&lt;br&gt;
| OVF/OVA Template | Helm Chart | Package format for deploying applications |&lt;br&gt;
| vSphere Tags | Kubernetes Labels | Used for selection and automation |&lt;br&gt;
| VM Notes | Annotations | Metadata on any K8s object |&lt;/p&gt;

&lt;p&gt;✅ What VMware Experience Transfers Perfectly&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Networking fundamentals You already understand VLANs, trunking, MTU, and routing. Kubernetes networking (overlay networks, pod CIDRs, service CIDRs) will make more sense to you faster than it does to developers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storage thinking You understand IOPS, throughput, latency, and thin vs thick provisioning. PersistentVolumes, StorageClasses, and access modes (ReadWriteOnce vs ReadWriteMany) click immediately.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High availability design You've designed HA clusters before. Understanding why Kubernetes wants an odd number of control plane nodes (quorum) is natural if you've configured vSphere HA admission control.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resource planning You've right-sized VMs for years. Setting CPU requests/limits and memory requests/limits in Kubernetes pod specs is the same discipline — just in YAML instead of a properties dialog.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security thinking If you've worked with NSX, you already think in terms of microsegmentation. Kubernetes NetworkPolicy is just that — written as code.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;❌ What You Need to Unlearn&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;"The VM is the unit of work" In vSphere, the VM is everything. In Kubernetes, pods are ephemeral. They die and restart constantly. Your application must be designed to handle this. This is the biggest mindset shift.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"I'll fix it by SSHing in" In vSphere, you SSH into a VM to debug. In Kubernetes, kubectl exec is a code smell in production. Logs, metrics, and traces are how you debug — not SSH sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Storage is attached to a machine" VMDKs are attached to VMs. In Kubernetes, storage (PVCs) follows the pod wherever it schedules. This is powerful but requires rethinking how you design stateful apps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"I'll take a snapshot before this change" There's no VM snapshot in Kubernetes. Your safety net is GitOps (if it's in Git, you can revert), Helm rollbacks (helm rollback), and kubectl rollout undo.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"The GUI is the source of truth" vCenter's GUI is authoritative. In Kubernetes, Git is the source of truth. If you clicked something in the dashboard, it doesn't count — it needs to be in a YAML file, committed to a repo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your First Week Action Plan&lt;br&gt;
If you're a VMware admin starting with Kubernetes today:&lt;br&gt;
`# Day 1 — Spin a local cluster (no VMs needed)&lt;br&gt;
curl -Lo ./kind &lt;a href="https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64" rel="noopener noreferrer"&gt;https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64&lt;/a&gt;&lt;br&gt;
chmod +x ./kind&lt;br&gt;
./kind create cluster --name homelab&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 2 — Deploy something familiar (a web server like an nginx VM)
&lt;/h1&gt;

&lt;p&gt;kubectl create deployment nginx --image=nginx&lt;br&gt;
kubectl expose deployment nginx --port=80 --type=NodePort&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 3 — Add monitoring (like vCenter alarms, but better)
&lt;/h1&gt;

&lt;p&gt;helm repo add prometheus-community &lt;a href="https://prometheus-community.github.io/helm-charts" rel="noopener noreferrer"&gt;https://prometheus-community.github.io/helm-charts&lt;/a&gt;&lt;br&gt;
helm install prometheus prometheus-community/kube-prometheus-stack&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 4 — Add a NetworkPolicy (like NSX microsegmentation)
&lt;/h1&gt;

&lt;p&gt;kubectl apply -f &lt;a href="https://raw.githubusercontent.com/jsakilesh/k8s-security-hardening/main/network-policies/deny-all.yml" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/jsakilesh/k8s-security-hardening/main/network-policies/deny-all.yml&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Day 5 — Break something on purpose and fix it
&lt;/h1&gt;

&lt;p&gt;kubectl delete pod -l app=nginx&lt;/p&gt;

&lt;h1&gt;
  
  
  Watch it come back automatically — this is the magic
&lt;/h1&gt;

&lt;p&gt;kubectl get pods -w`&lt;/p&gt;

&lt;p&gt;Resources That Actually Helped Me&lt;br&gt;
Kubernetes the Hard Way — if you built ESXi clusters from scratch, you'll appreciate this&lt;br&gt;
CKS Exam Curriculum — if you passed VCAP, the CKS exam structure will feel familiar&lt;br&gt;
My DevOps Homelab — full Terraform + Ansible + K8s + GitOps setup you can clone and run&lt;/p&gt;

&lt;p&gt;Final Thought&lt;br&gt;
Your VMware experience is not baggage — it's a superpower. You understand infrastructure at a level most Kubernetes engineers don't. The concepts translate. The tools change. The thinking stays the same.&lt;/p&gt;

&lt;p&gt;The hardest part isn't learning Kubernetes. It's letting go of the GUI.&lt;/p&gt;

&lt;p&gt;If this helped, follow me here on Dev.to and check out my &lt;a href="//github.com/jsakilesh"&gt;github&lt;/a&gt;where I document everything I build in my homelab.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>vmware</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
