<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Learn DevOps with Ilayaraja Veerakalai]]></title><description><![CDATA[Learn DevOps with Ilayaraja Veerakalai]]></description><link>https://ilayaraja-veerakalai.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 22 Jun 2026 15:31:15 GMT</lastBuildDate><atom:link href="https://ilayaraja-veerakalai.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[GitLab | Simple CICD Pipeline Project to Deploy AWS Infrastructure using Terraform!]]></title><description><![CDATA[Project Overview
Goal
The primary objective of this project is to deploy a ec2 instance in a secure single-tier architecture using IAC code (Terraform) through Gitlab CI pipeline.
Pre-Requisites
Before starting the deployment, ensure you have the fol...]]></description><link>https://ilayaraja-veerakalai.hashnode.dev/gitlab-simple-cicd-pipeline-project-to-deploy-aws-infrastructure-using-terraform</link><guid isPermaLink="true">https://ilayaraja-veerakalai.hashnode.dev/gitlab-simple-cicd-pipeline-project-to-deploy-aws-infrastructure-using-terraform</guid><category><![CDATA[GitLab-CI]]></category><category><![CDATA[gitlab-cicd]]></category><category><![CDATA[cicd]]></category><category><![CDATA[GitLab]]></category><dc:creator><![CDATA[Ilayaraja Veerakalai]]></dc:creator><pubDate>Tue, 08 Jul 2025 10:33:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751971264818/d69500f9-fb7f-43a5-92e5-c7936b7516d1.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-project-overview"><strong>Project Overview</strong></h2>
<p><strong>Goal</strong></p>
<p>The primary objective of this project is to deploy a ec2 instance in a secure single-tier architecture using IAC code (Terraform) through Gitlab CI pipeline.</p>
<p><strong>Pre-Requisites</strong></p>
<p>Before starting the deployment, ensure you have the following:</p>
<ul>
<li><p>Sign up for an Amazon Web Services (AWS) Free Tier account.</p>
</li>
<li><p>Create IAM role with EC2 and s3 full admin role access</p>
</li>
<li><p>Get aws access key and secret key</p>
</li>
<li><p>Gitlab Account and Repository</p>
</li>
</ul>
<p><strong>Folder structure</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751970657907/dba0d020-65cd-4725-af39-33ade196027a.png" alt class="image--center mx-auto" /></p>
<p><strong>Deployment</strong></p>
<ul>
<li>Create new bucket in s3 and add bucket name in <a target="_blank" href="http://backend.tf">backend.tf</a> file</li>
</ul>
<pre><code class="lang-plaintext">terraform {
  backend "s3" {
   bucket = "aws-ec2-creation-tfstate"
   region="us-east-1"
   key="terrform.tfstate"
}
  }
</code></pre>
<ul>
<li><p>Add aws access key and secret key in GitLab repository environment variable <strong>setting&gt; CICD&gt; variable</strong></p>
</li>
<li><p>Create GitLab account token from below path and add in environment variable <strong>setting &gt; access tokens&gt; project access tokens&gt; add token</strong></p>
</li>
<li><p>Create <strong>.gitlab-ci.yml</strong> file and write pipeline code as mentioned in file</p>
</li>
<li><p>Commit the changes to main branch</p>
</li>
</ul>
<p><strong>Validation</strong></p>
<ul>
<li><p>check the aws account and verify <strong>ec2</strong> and <strong>s3</strong> created</p>
</li>
<li><p>Ensure ec2 accessible from outside of aws</p>
</li>
</ul>
<h3 id="heading-aws-single-tier-architecture-diagram">AWS Single Tier architecture Diagram</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751970532850/b72672a1-f834-4b98-9d27-0b2dd4955a2c.png" alt class="image--center mx-auto" /></p>
<p>The complete CICD pipeline code is available in <a target="_blank" href="https://gitlab.com/IlayaVeera/aws_ec2_creation">GitLab repo</a> .</p>
]]></content:encoded></item><item><title><![CDATA[Terraform | Simple 2-Tier AWS architecture]]></title><description><![CDATA[Project summary:
IAM Role:

create IAM role with access to s3 and ec2

Networking and security:

Create 1 VPC

Create 4 subnet

Create 1 public subnet (app-tier) in az1

Create 1 public subnet (app-tier) in az2

Create 1 private subnet (db-tier) in a...]]></description><link>https://ilayaraja-veerakalai.hashnode.dev/terraform-simple-2-tier-aws-architecture</link><guid isPermaLink="true">https://ilayaraja-veerakalai.hashnode.dev/terraform-simple-2-tier-aws-architecture</guid><category><![CDATA[Terraform]]></category><category><![CDATA[2 tier architecture in aws using terraform]]></category><category><![CDATA[#Terraform #AWS #InfrastructureAsCode #Provisioning #Automation #CloudComputing]]></category><category><![CDATA[#IaC]]></category><category><![CDATA[#Iac #terraform #devops #aws]]></category><dc:creator><![CDATA[Ilayaraja Veerakalai]]></dc:creator><pubDate>Tue, 08 Jul 2025 08:11:13 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751964091136/cd35acd1-d220-466f-a29a-f961997c85c3.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-project-summary">Project summary:</h2>
<h3 id="heading-iam-role">IAM Role:</h3>
<ol>
<li>create IAM role with access to s3 and ec2</li>
</ol>
<h3 id="heading-networking-and-security">Networking and security:</h3>
<ol>
<li><p>Create 1 VPC</p>
</li>
<li><p>Create 4 subnet</p>
<ul>
<li><p>Create 1 public subnet (app-tier) in az1</p>
</li>
<li><p>Create 1 public subnet (app-tier) in az2</p>
</li>
<li><p>Create 1 private subnet (db-tier) in az1</p>
</li>
<li><p>Create 1 private subnet (db-tier) in az2</p>
</li>
</ul>
</li>
<li><p>Create 1 Internet Gateway attach to VPC</p>
</li>
<li><p>Create 1 Route table in VPC</p>
<ul>
<li><p>Create 1 route table and attach to igw</p>
</li>
<li><p>Associate to app-tier public subnet (az1, az2)</p>
</li>
</ul>
</li>
<li><p>Create 3 security group in VPC</p>
<ul>
<li><p>sg-1 for load balancer with inbound rule http→80, my laptop IP</p>
</li>
<li><p>sg-2 in public subnet for app tier with inbound rule http→80, my laptop IP and http→80, sg-1</p>
</li>
<li><p>sg-3 in private subnet for db tier with inbound rule tcp→3306, sg-2</p>
</li>
</ul>
</li>
</ol>
<h3 id="heading-database-deployment">Database Deployment:</h3>
<ol>
<li><p>Create subnet group in RDS add 2 private subnet for db tier</p>
</li>
<li><p>Create aws RDS instance</p>
</li>
</ol>
<h3 id="heading-load-balancing-and-auto-scaling-deployment">Load Balancing and Auto scaling deployment:</h3>
<ol>
<li><p>Create AMI create AMI from running app tier instance</p>
</li>
<li><p>Create target group</p>
</li>
<li><p>Create LB</p>
</li>
<li><p>Create launch template</p>
</li>
<li><p>Create auto scaling</p>
</li>
</ol>
<p>The complete terraform code for this project is available in my <a target="_blank" href="https://github.com/IlayaVeera/terraform/tree/main/2TIER">GitHub repo</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Kubernetes | Pod Vs ReplicatSets Vs Deployment]]></title><description><![CDATA[Pod:

In Kubernetes, a Pod is the smallest and simplest deployable unit. It represents a single instance of a running process (or group of tightly coupled processes) in a cluster. Here’s a breakdown of Pods:
Key Concepts of Pods:
1. Atomic Unit of De...]]></description><link>https://ilayaraja-veerakalai.hashnode.dev/kubernetes-pod-vs-replicatsets-vs-deployment</link><guid isPermaLink="true">https://ilayaraja-veerakalai.hashnode.dev/kubernetes-pod-vs-replicatsets-vs-deployment</guid><category><![CDATA[#Pods ]]></category><category><![CDATA[Kubernetes]]></category><category><![CDATA[replicaset]]></category><category><![CDATA[Kubernetes deployments]]></category><category><![CDATA[#DeploymentManagement #ReplicaSet #RollingUpdates #Rollback #Kubernetes #Scaling #DeploymentErrors #ApplicationConfiguration #ResourceManagement #ImagePullError #InsufficientPermission #LimitRanges #Quota]]></category><category><![CDATA[kubernetes-pods]]></category><dc:creator><![CDATA[Ilayaraja Veerakalai]]></dc:creator><pubDate>Sun, 06 Jul 2025 13:42:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751963511587/57c931d0-4a89-433a-9d1f-c959b868fde0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-pod"><strong>Pod:</strong></h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751800850248/5262afd7-9e94-4758-a44a-4422641bdc6a.png" alt class="image--center mx-auto" /></p>
<p>In Kubernetes, a Pod is the smallest and simplest deployable unit. It represents a single instance of a running process (or group of tightly coupled processes) in a cluster. Here’s a breakdown of Pods:</p>
<h3 id="heading-key-concepts-of-pods">Key Concepts of Pods:</h3>
<p><strong>1. Atomic Unit of Deployment</strong></p>
<ul>
<li><p>A Pod is the smallest deployable unit in Kubernetes.</p>
</li>
<li><p>It can contain one or more tightly coupled containers (usually one main container + optional sidecar containers).</p>
</li>
</ul>
<p><strong>2. Shared Resources</strong></p>
<p>Containers in a Pod share:</p>
<ul>
<li><p>The same network namespace (same IP &amp; port space).</p>
</li>
<li><p>The same storage volumes (can access the same files).</p>
</li>
<li><p>The same Linux namespace (PID, UTS, IPC).</p>
</li>
</ul>
<p><strong>3. Lifecycle</strong></p>
<ul>
<li><p>Pods are ephemeral—they can be created, destroyed, and recreated dynamically.</p>
</li>
<li><p>If a Pod dies, Kubernetes can restart it (if configured) or replace it.</p>
</li>
</ul>
<p><strong>4. Managed by Controllers</strong></p>
<ul>
<li><p>Pods are typically managed by higher-level controllers like:</p>
<ul>
<li><p>Deployments (for stateless apps)</p>
</li>
<li><p>StatefulSets (for stateful apps)</p>
</li>
<li><p>DaemonSets (for node-level agents)</p>
</li>
<li><p>Jobs/CronJobs (for batch processing)</p>
</li>
</ul>
</li>
</ul>
<p><strong>5. Networking</strong></p>
<ul>
<li><p>Each Pod gets a unique cluster-internal IP.</p>
</li>
<li><p>Containers in a Pod communicate via <code>localhost</code> (since they share a network stack).</p>
</li>
</ul>
<p><strong>6. Storage</strong></p>
<ul>
<li>Pods can have Volumes (e.g., <code>emptyDir</code>, <code>configMap</code>, <code>PersistentVolumeClaim</code>) that are shared among containers.</li>
</ul>
<h3 id="heading-key-commands">Key Commands:</h3>
<p><strong>Imperative Method:</strong></p>
<ol>
<li><p><strong>Create Pod</strong></p>
<p> <code>Kubectl run podname --image imagename</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751803061607/934d7b82-3251-47a0-b8d6-1ce1df31bcd4.png" alt /></p>
</li>
<li><p><strong>List pod</strong></p>
<p> <code>Kubectl get pods</code></p>
<p> <code>Kubectl get po</code></p>
<p> <code>Kubectl get pods -o wide</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751803142923/4f8f3c06-606e-4d91-9a8d-d8e600432e94.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Login into pod</strong></p>
<p> <code>kubectl exec -it podname - sh</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751803554764/6aa8b5f0-6247-4431-b2f9-9b3c16284604.png" alt /></p>
</li>
<li><p><strong>Delete Pod</strong></p>
<p> <code>Kubectl delete pod podname</code></p>
<p> <code>kubectl delete pod pod1 pod2</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751807811701/5b928842-e960-46e9-9cb4-175656b423f9.png" alt /></p>
</li>
<li><p><strong>Describe Pod</strong></p>
<p> <code>Kubectl describe pod podname</code></p>
</li>
<li><p><strong>Update Pod</strong></p>
<p> <code>Kubectl edit pod podname</code></p>
</li>
<li><p><strong>Dry run command</strong></p>
<p> <code>kubectl run --image=nginx --dry-run=client</code></p>
<p> <code>kubectl run --image=nginx --dry-run=client -o yaml</code></p>
<p> <code>kubectl run --image=nginx --dry-run=client -o yaml  &gt; podnew.yml</code></p>
</li>
<li><p><strong>Troubleshoot pod</strong></p>
<p> <code>Kubectl logs podname</code></p>
<p> <code>Kubectl events podname</code></p>
</li>
</ol>
<p><strong>Declarative Method:</strong></p>
<ol>
<li><p>Create pod manifest file in <code>yaml</code> format</p>
<p> <code>pod-manifest.yaml</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751799293628/7bbfb95e-2830-4e2b-b2ec-8a8eb1b95fe0.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p><code>Kubectl create -f pod-manifest.yml</code> or</p>
<p><code>Kubectl apply -f pod-manifest.yml</code></p>
<h2 id="heading-replicasets">ReplicaSets:</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751804224975/4e4c8407-3e87-4080-ab6d-0f5dfb24c9e7.png" alt class="image--center mx-auto" /></p>
<p>In Kubernetes, a ReplicaSet is a workload controller that ensures a specified number of identical Pod replicas are running at all times. It is a replacement for the older ReplicationController, with added support for set-based label selectors.</p>
<h3 id="heading-key-features-of-a-replicaset">Key Features of a ReplicaSet</h3>
<p><strong>1. Ensures High Availability</strong></p>
<ul>
<li><p>Maintains a stable set of Pods (e.g., always keeps 3 replicas running).</p>
</li>
<li><p>If a Pod crashes, the ReplicaSet creates a new one.</p>
</li>
</ul>
<p><strong>2. Load balancing &amp;Scaling</strong></p>
<ul>
<li><p>You can manually scale up/down the number of replicas.</p>
</li>
<li><p>Pod can be deployed in multiple worker node for one replica</p>
</li>
</ul>
<p><strong>3. Self-Healing</strong></p>
<ul>
<li>If a node fails, the ReplicaSet reschedules Pods on healthy nodes.</li>
</ul>
<p><strong>4. Label-Based Selection</strong></p>
<ul>
<li><p>Uses selectors to identify which Pods it manages.</p>
</li>
<li><p>Supports both equality-based (`=, !=`) and set-based (`in, notin, exists`) selectors.</p>
</li>
</ul>
<p><strong>5. Not Meant for Direct Use</strong></p>
<ul>
<li>Typically managed by higher-level controllers like Deployments (which create and manage ReplicaSets for rolling updates).</li>
</ul>
<h3 id="heading-key-commands-1">Key Commands:</h3>
<ol>
<li><p><strong>Create replicaset</strong></p>
<p> <code>replicaset-manifest.yaml</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751805628407/e828206e-276a-4040-8729-d07dbf6f900b.png" alt class="image--center mx-auto" /></p>
</li>
</ol>
<p><code>kubectl apply -f replicaset-manifest.yaml</code></p>
<ol start="2">
<li><p><strong>List Replicaset</strong></p>
<p> <code>kubectl get replicaset</code></p>
<p> <code>kubectl get rs</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751807954933/9c965311-6817-4e19-8695-501e0b68a6a0.png" alt /></p>
</li>
<li><p><strong>Describe replicaset</strong></p>
<p> <code>kubectl describe replicaset nginx-rs</code></p>
</li>
<li><p><strong>Update replicaset</strong></p>
<p> <code>kubectl replace-f replicaset-manifest.yaml</code></p>
</li>
<li><p><strong>Delete Replicaset</strong></p>
<p> <code>kubectl delete replicaset nginx-rs</code></p>
</li>
<li><p><strong>Scale replicas: 3 ways</strong></p>
<p> <code>Kubectl scale rs/nginx-rs --replicas=5</code></p>
<p> <code>kubectl scale replicas=5 -f replicaset-manifest.yaml</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751808308284/7222a7ed-77d0-4264-9d94-d12656151bb7.png" alt /></p>
<p> Edit the yaml file and save</p>
<p> <code>Kubectl edit rs/nginx-rs</code></p>
<p> <code>Kubectl apply -f relicaset.yaml</code></p>
<p> <code>Kubectl replace -f replicaset.yaml</code></p>
</li>
</ol>
<h2 id="heading-deployment">Deployment:</h2>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751806473110/2725eb3c-9d3c-4fc5-8f69-b14eccf959d6.png" alt class="image--center mx-auto" /></p>
<p>A Deployment is a high-level Kubernetes controller that manages ReplicaSets and provides declarative updates to Pods. It is the most common way to deploy and manage stateless applications in Kubernetes, offering features like rolling updates, rollbacks, and scaling.</p>
<h3 id="heading-key-features-of-deployments">Key Features of Deployments</h3>
<p><strong>1. Manages ReplicaSets</strong></p>
<ul>
<li><p>Creates and controls ReplicaSets, which in turn manage Pods.</p>
</li>
<li><p>Ensures the desired number of Pods are running (`replicas`).</p>
</li>
</ul>
<p><strong>2. Rolling Updates &amp; Rollbacks</strong></p>
<ul>
<li><p>Updates Pods incrementally (zero downtime).</p>
</li>
<li><p>Can roll back to a previous version if something goes wrong.</p>
</li>
</ul>
<p><strong>3. Self-Healing &amp; Scalability</strong></p>
<ul>
<li><p>Automatically replaces failed Pods.</p>
</li>
<li><p>Supports manual and automatic scaling (e.g., with HPA).</p>
</li>
</ul>
<p><strong>4. Declarative Updates</strong></p>
<ul>
<li>You define the desired state, and Kubernetes handles the rest.</li>
</ul>
<h3 id="heading-key-commands-2">Key Commands:</h3>
<ol>
<li><p><strong>Create Deployment</strong></p>
<p> <code>deployment-manifest.yaml</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751807058516/2533b065-6545-49fb-893d-249992409273.png" alt class="image--center mx-auto" /></p>
<p> <code>kubectl apply -f deployment-manifest.yaml</code></p>
</li>
<li><p><strong>List deployment</strong></p>
<p> <code>kubectl get deployment</code></p>
<p> <code>kubectl get all</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751812525296/dbdaee6d-b999-4f4f-815e-be3a1d00e48c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Delete deployment</strong></p>
<p> <code>kubectl delete deployment</code></p>
</li>
<li><p><strong>Describe deployment</strong></p>
<p> <code>kubectl describe deployment nginx-deploy</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751812764241/c9e5557f-0e9f-4837-acf6-8862e9adaf5c.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Update image:</strong></p>
<p> <code>kubectl set image deploy/nginx-deploy nginx=nginx:1.20</code></p>
</li>
<li><p><strong>View rollout status</strong></p>
<p> <code>kubectl rollout status deployment/nginx-deploy</code></p>
</li>
<li><p><strong>View rollout history</strong></p>
<p> <code>kubectl rollout history deployment/nginx-deploy</code></p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751812878068/e1fa2841-03e2-4372-aba8-793400e4a62b.png" alt class="image--center mx-auto" /></p>
</li>
<li><p><strong>Rollback to previous version</strong></p>
<p> <code>kubectl rollout undo deployment/nginx-deploy</code></p>
<p> <code>kubectl rollout undo deployment/nginx-deploy --record</code></p>
</li>
<li><p><strong>Rollback to specific revision</strong></p>
<p> <code>kubectl rollout undo deployment/nginx-deploy    # to previous version</code></p>
<p> <code>kubectl rollout undo deployment/nginx-deploy --to-revision=2</code></p>
</li>
<li><p><strong>Scaling:</strong></p>
<p><strong># Manual scaling</strong></p>
<p><code>kubectl scale deployment nginx-deploy --replicas=5</code></p>
<p><strong># Auto-scaling (requires metrics server)</strong></p>
<p><code>kubectl autoscale deployment nginx-deploy --min=2 --max=10 --cpu-percent=80</code></p>
</li>
</ol>
<h3 id="heading-comparison">Comparison:</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Pod</strong></td><td><strong>ReplicaSet</strong></td><td><strong>Deployment</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Purpose</strong></td><td>Smallest deployable unit (1+ containers)</td><td>Ensures a fixed number of Pod replicas are running</td><td>Manages ReplicaSets for declarative updates and rollbacks</td></tr>
<tr>
<td><strong>Managed by</strong></td><td>Directly or by controllers (e.g., ReplicaSet, Deployment)</td><td>Directly or by Deployments</td><td>Directly by users (highest-level abstraction)</td></tr>
<tr>
<td><strong>Scaling</strong></td><td>❌ No native scaling</td><td>✅ Manual scaling (`kubectl scale`)</td><td>✅ Manual + Auto-scaling (HPA)</td></tr>
<tr>
<td><strong>Self-healing</strong></td><td>❌ No (unless restarted manually)</td><td>✅ Replaces failed Pods automatically</td><td>✅ Replaces failed Pods + manages rollbacks</td></tr>
<tr>
<td><strong>Rolling Updates</strong></td><td>❌ No</td><td>❌ No</td><td>✅ Yes (zero-downtime updates)</td></tr>
<tr>
<td><strong>Rollback</strong></td><td>❌ No</td><td>❌ No</td><td>✅ Yes (`kubectl rollout undo`)</td></tr>
<tr>
<td><strong>Use Case</strong></td><td>Debugging, testing, or single-task containers</td><td>Legacy apps (rarely used directly)</td><td>Production stateless apps (e.g., web servers, APIs)</td></tr>
</tbody>
</table>
</div>]]></content:encoded></item><item><title><![CDATA[Kubernetes | Why Kubernetes has upper hand when compared to other Orchestration tools?]]></title><description><![CDATA[Kubernetes (K8s) is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. Here’s why it’s essential in modern software development and operations:
1. Container Orchestrat...]]></description><link>https://ilayaraja-veerakalai.hashnode.dev/kubernetes-why-kubernetes-has-upper-hand-when-compared-to-other-orchestration-tools</link><guid isPermaLink="true">https://ilayaraja-veerakalai.hashnode.dev/kubernetes-why-kubernetes-has-upper-hand-when-compared-to-other-orchestration-tools</guid><category><![CDATA[Kubernetes]]></category><category><![CDATA[k8s]]></category><category><![CDATA[#kubernetes #container ]]></category><category><![CDATA[Orchestration]]></category><category><![CDATA[containers]]></category><category><![CDATA[containerization]]></category><category><![CDATA[container orchestration]]></category><category><![CDATA[openshift]]></category><category><![CDATA[docker swarm]]></category><category><![CDATA[nomad]]></category><category><![CDATA[container]]></category><dc:creator><![CDATA[Ilayaraja Veerakalai]]></dc:creator><pubDate>Tue, 01 Jul 2025 04:54:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751962726798/5fa5ccda-666d-476a-92f5-384b68e941e6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p> Kubernetes (K8s) is an open-source container orchestration platform that automates the deployment, scaling, and management of containerized applications. Here’s why it’s essential in modern software development and operations:</p>
<h3 id="heading-1-container-orchestration-amp-management">1. Container Orchestration &amp; Management</h3>
<ul>
<li><p>Manages the lifecycle of containers (Docker, containerd, etc.) at scale.</p>
</li>
<li><p>Automates deployment, scaling, and failover of applications.</p>
</li>
</ul>
<h3 id="heading-2-scalability-amp-high-availability">2. Scalability &amp; High Availability</h3>
<ul>
<li><p><strong>Horizontal Scaling</strong>: Easily scale applications up or down based on demand.</p>
</li>
<li><p><strong>Self-Healing</strong>: Automatically restarts or replaces failed containers.</p>
</li>
<li><p><strong>Load Balancing</strong>: Distributes traffic efficiently across containers.</p>
</li>
</ul>
<h3 id="heading-3-portability-amp-multi-cloud-support">3. Portability &amp; Multi-Cloud Support</h3>
<ul>
<li><p>Runs on any cloud (<strong>AWS, GCP, Azure</strong>) or <strong>on-premises</strong>.</p>
</li>
<li><p>Avoids vendor lock-in by providing a consistent environment.</p>
</li>
</ul>
<h3 id="heading-4-declarative-configuration-infrastructure-as-code">4. Declarative Configuration (Infrastructure as Code)</h3>
<ul>
<li><p>Uses YAML/JSON manifests to define desired state.</p>
</li>
<li><p>Kubernetes ensures the actual state matches the declared state.</p>
</li>
</ul>
<h3 id="heading-5-service-discovery-amp-networking">5. Service Discovery &amp; Networking</h3>
<ul>
<li><p>Automatically assigns IPs/DNS names to containers.</p>
</li>
<li><p>Supports internal and external networking (Ingress, Services).</p>
</li>
</ul>
<h3 id="heading-6-storage-orchestration">6. Storage Orchestration</h3>
<ul>
<li><p>Manages persistent storage (local, cloud, or network-attached).</p>
</li>
<li><p>Supports dynamic volume provisioning.</p>
</li>
</ul>
<h3 id="heading-7-automated-rollouts-amp-rollbacks">7. Automated Rollouts &amp; Rollbacks</h3>
<ul>
<li><p>Supports Canary Deployments, Blue-Green Deployments, and Rolling Updates.</p>
</li>
<li><p>If an update fails, Kubernetes rolls back to the previous stable version.</p>
</li>
</ul>
<h3 id="heading-8-resource-optimization">8. Resource Optimization</h3>
<ul>
<li><p>Efficiently allocates CPU, memory, and storage to applications.</p>
</li>
<li><p>Prevents resource starvation and improves cluster utilization.</p>
</li>
</ul>
<h3 id="heading-9-extensibility-amp-ecosystem">9. Extensibility &amp; Ecosystem</h3>
<ul>
<li><p>Custom Resource Definitions (CRDs) allow extending Kubernetes for custom workloads.</p>
</li>
<li><p>A vast ecosystem of tools (Helm, Istio, Prometheus, ArgoCD) integrates seamlessly.</p>
</li>
</ul>
<h3 id="heading-10-security-amp-compliance">10. Security &amp; Compliance</h3>
<ul>
<li><p>Role-Based Access Control (RBAC) for fine-grained permissions.</p>
</li>
<li><p>Secrets management for sensitive data.</p>
</li>
<li><p>Network policies to control pod-to-pod communication.</p>
</li>
</ul>
<h2 id="heading-kubernetes-vs-other-orchestration-tools"><strong>Kubernetes vs. Other Orchestration Tools</strong></h2>
<p> Kubernetes is the most widely adopted container orchestration platform, but alternatives like Docker Swarm, Apache Mesos, and HashiCorp Nomad exist. Below is a detailed comparison: </p>
<p> <strong>1. Kubernetes vs. Docker Swarm</strong> </p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Kubernetes (K8s)</strong></td><td><strong>Docker Swarm</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Complexity</strong></td><td>High (steep learning curve)</td><td>Low (simple setup)</td></tr>
<tr>
<td><strong>Scalability</strong></td><td>Highly scalable (1000s of nodes)</td><td>Limited scalability (~100s of nodes)</td></tr>
<tr>
<td><strong>Auto-Scaling</strong></td><td>Yes (HPA, Cluster Autoscaler)</td><td>Manual scaling only</td></tr>
<tr>
<td><strong>Self-Healing</strong></td><td>Yes (auto-restarts, rescheduling)</td><td>Basic (restarts containers)</td></tr>
<tr>
<td><strong>Load Balancing</strong></td><td>Advanced (Ingress, Service Mesh support)</td><td>Basic (internal DNS-based)</td></tr>
<tr>
<td><strong>Rolling Updates</strong></td><td>Yes (with rollback)</td><td>Yes (but limited control)</td></tr>
<tr>
<td><strong>Multi-Cloud</strong></td><td>Excellent (runs anywhere)</td><td>Limited (best on Docker environments)</td></tr>
<tr>
<td><strong>Ecosystem</strong></td><td>Vast (Helm, Istio, Prometheus, Operators)</td><td>Minimal (relies on Docker tools)</td></tr>
<tr>
<td><strong>Best For</strong></td><td>Large-scale, complex microservices</td><td>Small teams, simple container deployments</td></tr>
</tbody>
</table>
</div><p>  <strong>2. Kubernetes vs. Apache Mesos</strong> </p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Kubernetes</strong></td><td><strong>Apache Mesos</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Primary Use Case</strong></td><td>Container orchestration</td><td>General-purpose cluster management</td></tr>
<tr>
<td><strong>Workloads</strong></td><td>Optimized for containers (Docker, containerd)</td><td>Supports containers + VMs, big data (Hadoop, Spark)</td></tr>
<tr>
<td><strong>Scheduling</strong></td><td>Pod-based scheduling</td><td>Two-level scheduling (Mesos + Frameworks)</td></tr>
<tr>
<td><strong>Scalability</strong></td><td>1000s of nodes</td><td>10,000s of nodes (better for massive clusters)</td></tr>
<tr>
<td><strong>Ecosystem</strong></td><td>Rich (CNCF tools)</td><td>Declining (less adoption post-Kubernetes)</td></tr>
<tr>
<td><strong>Complexity</strong></td><td>High</td><td>Very high (requires Marathon or DC/OS)</td></tr>
<tr>
<td><strong>Best For</strong></td><td>Cloud-native microservices</td><td>Mixed workloads (VMs + containers + big data)</td></tr>
</tbody>
</table>
</div><p>  <strong>3. Kubernetes vs. HashiCorp Nomad</strong> </p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Kubernetes</strong></td><td><strong>HashiCorp Nomad</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Scope</strong></td><td>Full container orchestration</td><td>Simple scheduler (containers, VMs, binaries)</td></tr>
<tr>
<td><strong>Complexity</strong></td><td>High (many components)</td><td>Low (lightweight, easy to learn)</td></tr>
<tr>
<td><strong>Multi-Cloud</strong></td><td>Yes</td><td>Yes</td></tr>
<tr>
<td><strong>Auto-Scaling</strong></td><td>Yes (HPA)</td><td>Limited (requires external tools)</td></tr>
<tr>
<td><strong>Service Discovery</strong></td><td>Built-in (DNS, Services)</td><td>Integrates with Consul</td></tr>
<tr>
<td><strong>Ecosystem</strong></td><td>Large (Helm, Operators, CRDs)</td><td>Minimal (works with Terraform, Vault)</td></tr>
<tr>
<td><strong>Best For</strong></td><td>Complex microservices, CI/CD pipelines</td><td>Simple batch jobs, mixed workloads</td></tr>
</tbody>
</table>
</div><p>  <strong>4. Kubernetes vs. OpenShift (Red Hat)</strong> </p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Kubernetes</strong></td><td><strong>OpenShift</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Base Technology</strong></td><td>Open-source K8s</td><td>Kubernetes + proprietary enhancements</td></tr>
<tr>
<td><strong>Ease of Use</strong></td><td>Complex (requires manual setup)</td><td>Simplified (GUI, built-in CI/CD)</td></tr>
<tr>
<td><strong>Security</strong></td><td>Manual RBAC, network policies</td><td>Enhanced security (SELinux, SCCs)</td></tr>
<tr>
<td><strong>Cost</strong></td><td>Free (self-managed)</td><td>Paid (enterprise support)</td></tr>
<tr>
<td><strong>Best For</strong></td><td>Customizable, multi-cloud deployments</td><td>Enterprises needing support &amp; compliance</td></tr>
</tbody>
</table>
</div><p> <strong>Summary: Which Orchestration Tool Should You Use?</strong> </p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Tool</strong></td><td>Best For</td><td>Not Ideal For</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Kubernetes</strong></td><td>Large-scale, cloud-native microservices</td><td>Small projects, simple apps</td></tr>
<tr>
<td><strong>Docker Swarm</strong></td><td>Quick, small-scale Docker deployments</td><td>High scalability, multi-cloud</td></tr>
<tr>
<td><strong>Apache Mesos</strong></td><td>Mixed workloads (VMs + containers + big data)</td><td>Pure container orchestration</td></tr>
<tr>
<td><strong>HashiCorp Nomad</strong></td><td>Lightweight, simple batch jobs</td><td>Complex microservices</td></tr>
<tr>
<td><strong>OpenShift</strong></td><td>Enterprises needing supported Kubernetes</td><td>Budget-conscious teams</td></tr>
</tbody>
</table>
</div><p>Hope this info is useful for you. Will come up with more interesting concepts soon!</p>
<p>Thanks !</p>
]]></content:encoded></item><item><title><![CDATA[Kubernetes | Architecture Overview]]></title><description><![CDATA[Kubernetes (K8s) is an open-source container orchestration platform that automates deployment, scaling, and management of containerized applications.
Kubernetes follows a client-server architecture with a control plane (master nodes) that manages wor...]]></description><link>https://ilayaraja-veerakalai.hashnode.dev/kubernetes-architecture-overview</link><guid isPermaLink="true">https://ilayaraja-veerakalai.hashnode.dev/kubernetes-architecture-overview</guid><category><![CDATA[Kubernetes]]></category><category><![CDATA[kubernetes architecture]]></category><dc:creator><![CDATA[Ilayaraja Veerakalai]]></dc:creator><pubDate>Wed, 25 Jun 2025 16:51:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1751964290933/9348b670-fd30-43f3-bbaa-c82857700d94.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Kubernetes (K8s) is an open-source container orchestration platform that automates deployment, scaling, and management of containerized applications.</p>
<p>Kubernetes follows a client-server architecture with a control plane (master nodes) that manages worker nodes where containers are deployed. Here's a detailed breakdown:</p>
<p><strong>Control Plane Components (Master Nodes)</strong></p>
<p><strong><em>1. API Server (kube-apiserver)</em></strong></p>
<ul>
<li><p>Central management entity</p>
</li>
<li><p>Exposes the Kubernetes API (REST interface)</p>
</li>
<li><p>Validates and processes and executes all API requests</p>
</li>
<li><p>Only component that directly interacts with etcd</p>
</li>
<li><p>Enforces security policies</p>
</li>
<li><p>Facilitates interaction between all components</p>
</li>
</ul>
<p><strong><em>2. etcd</em></strong></p>
<ul>
<li><p>Distributed, Consistent and highly-available key-value store</p>
</li>
<li><p>Stores all cluster data (configuration, state, metadata)</p>
</li>
<li><p>Implements watches for change notifications</p>
</li>
<li><p>Single source of truth for all k8s components</p>
</li>
<li><p>Only API server talks to etcd and other components interact via api server</p>
</li>
</ul>
<p><strong><em>3. Scheduler (kube-scheduler)</em></strong></p>
<ul>
<li><p>Watches for newly created Pods with no assigned node</p>
</li>
<li><p>Selects a node for Pods to run on based on:</p>
<ol>
<li><p>Resource requirements</p>
</li>
<li><p>Affinity/anti-affinity specifications</p>
</li>
<li><p>Taints and tolerations</p>
</li>
<li><p>Data locality</p>
</li>
<li><p>Volume restrictions</p>
</li>
<li><p>Distributes workloads across cluster</p>
</li>
</ol>
</li>
</ul>
<p><strong><em>4. Controller Manager (kube-controller-manager)</em></strong></p>
<ul>
<li><p>Core components of K8s. Runs controller processes that regulate cluster state to ensure the cluster’s actual state matches the desired state declared in api server</p>
<ol>
<li><p>Node Controller</p>
<ul>
<li><p>Monitors node status (ready/not ready)</p>
</li>
<li><p>Handles node failure</p>
</li>
<li><p>Sync node information from cloud providers</p>
</li>
</ul>
</li>
<li><p>Replication Controller</p>
<ul>
<li><p>Maintain correct number of pods for replicaSets/Deployments</p>
</li>
<li><p>Creates. deletes Pods to match spec.replicas</p>
</li>
</ul>
</li>
<li><p>Endpoints Controller</p>
<ul>
<li>Populates Endpoints objects (links Servces to Pods)</li>
</ul>
</li>
<li><p>Service Account &amp; Token Controllers</p>
<ul>
<li>Manages service accounts tokens for API server</li>
</ul>
</li>
<li><p>Namespace Controller</p>
<ul>
<li><p>Handles namespace lifecycle (creation/deletion)</p>
</li>
<li><p>Cascades deletion of resources in a namespace</p>
</li>
</ul>
</li>
<li><p>Persistent Volume Controller</p>
<ul>
<li><p>Binds PersistentVolumeClaims to PersistentVolumes</p>
</li>
<li><p>Handles dynamic provisioning</p>
</li>
</ul>
</li>
</ol>
</li>
</ul>
<p><strong><em>5. Cloud Controller Manager (optional)</em></strong></p>
<ul>
<li><p>Integrates with cloud provider APIs</p>
</li>
<li><p>Manages cloud-specific controllers:</p>
<ol>
<li><p>Node Controller (for cloud instances)</p>
<ul>
<li><p>Auto discovers new VM</p>
</li>
<li><p>Handles node labeling/tainting</p>
</li>
<li><p>Implements cloud provider health checks</p>
</li>
</ul>
</li>
<li><p>Route Controller (for networking)</p>
<ul>
<li>Configure cloud networking routes between pods</li>
</ul>
</li>
<li><p>Service Controller (for load balancers)</p>
<ul>
<li><p>Implements service type</p>
<ul>
<li><p>LoadBalncer (cloud-native LB)</p>
</li>
<li><p>NodePort with cloud integration</p>
</li>
</ul>
</li>
</ul>
</li>
</ol>
</li>
</ul>
<p><strong>Worker Node Components</strong></p>
<p><strong><em>1. kubelet</em></strong></p>
<ul>
<li><p>Primary "node agent" that runs on each worker</p>
</li>
<li><p>Creates, modifies and deletes containers based on Pod specs from API server and ensures containers are running healthy</p>
</li>
<li><p>Ensures containers are running in a Pod</p>
</li>
<li><p>Handles container restarts(crash loop backoff)</p>
</li>
<li><p>Reports node and Pod status back to control plane</p>
</li>
<li><p>Communicates with container runtimes via CRI</p>
</li>
<li><p>Enforces Pod security standards</p>
</li>
<li><p>Mounts Volume</p>
</li>
<li><p>Configures Pod networking</p>
</li>
<li><p>Manages container DNS</p>
</li>
</ul>
<p><strong><em>2. kube-proxy</em></strong></p>
<ul>
<li><p>Network proxy that maintains network rules</p>
</li>
<li><p>Service abstraction Implementation</p>
<ol>
<li>Translates service definitions (ClusterIP, NodePort, LoadBalancer) into actual network rules</li>
</ol>
</li>
<li><p>Performs connection forwarding or load balancing</p>
</li>
<li><p>Implements Service IPs using iptables/IPVS</p>
</li>
</ul>
<p><strong><em>3. Container Runtime</em></strong></p>
<ul>
<li><p>Software that runs containers. such as</p>
<ol>
<li><p>Docker(deprecated)</p>
</li>
<li><p>Containerd(default)</p>
</li>
<li><p>CRI-O(from linux)</p>
</li>
</ol>
</li>
<li><p>Responsible for pulling images, starting/stopping containers</p>
</li>
<li><p>Kubernetes communicates with container runtime through Container Runtime Interface (CRI)</p>
</li>
</ul>
<p><strong>Addons (Optional Components)</strong></p>
<p><strong><em>1. DNS (CoreDNS)</em></strong></p>
<ul>
<li><p>Default Cluster DNS server</p>
</li>
<li><p>Provides name resolution for Services and Pods and other cluster resources</p>
</li>
<li><p>Replaces kube-dns in k8s v1.13+</p>
</li>
</ul>
<p><strong><em>2. Dashboard</em></strong></p>
<ul>
<li>Web-based Kubernetes UI</li>
</ul>
<p><strong><em>3. Ingress Controller</em></strong></p>
<ul>
<li><p>Provides external access to Services</p>
</li>
<li><p>Implements ingress rules (Nginx, Traefik, etc.)</p>
</li>
</ul>
<p><strong><em>4. Container Network Interface (CNI) Plugins</em></strong></p>
<ul>
<li><p>Implements pod networking</p>
</li>
<li><p>Enabling communication between containers, Pods and external services</p>
</li>
<li><p>Examples: Calico, Flannel, Weave Net</p>
</li>
</ul>
<p><strong>Data Flow</strong></p>
<p>1. User submits manifest via <code>kubectl</code> to API Server</p>
<p>2. API Server validates and stores state in etcd</p>
<p>3. Scheduler assigns Pods to nodes</p>
<p>4. kubelet on assigned node pulls Pod spec</p>
<p>5. kubelet instructs container runtime to launch containers</p>
<p>6. kube-proxy sets up networking rules</p>
<p>7. Controllers continuously monitor and reconcile state</p>
]]></content:encoded></item></channel></rss>