<?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: Tejas KP</title>
    <description>The latest articles on DEV Community by Tejas KP (@tejas_kp).</description>
    <link>https://dev.to/tejas_kp</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%2F3997837%2Fa88aab95-a6ba-4e90-a230-5ba5ecdc47be.jpeg</url>
      <title>DEV Community: Tejas KP</title>
      <link>https://dev.to/tejas_kp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tejas_kp"/>
    <language>en</language>
    <item>
      <title>Kubernetes Demystified: YAML Tutorial for DevOps</title>
      <dc:creator>Tejas KP</dc:creator>
      <pubDate>Sat, 29 Aug 2026 14:05:12 +0000</pubDate>
      <link>https://dev.to/tejas_kp/kubernetes-demystified-yaml-tutorial-for-devops-3hlj</link>
      <guid>https://dev.to/tejas_kp/kubernetes-demystified-yaml-tutorial-for-devops-3hlj</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is YAML?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;YAML is a data serialization language, like XML and JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a serialization language?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Applications written with different technologies and languages, which have different data structures, can transfer data to each other on a common grid or standard format.&lt;/p&gt;

&lt;p&gt;Ex: JSON, YAML, XML.&lt;/p&gt;

&lt;p&gt;YAML is not — yet another markup language.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Human friendly" data serialization standard for all programming languages&lt;/li&gt;
&lt;li&gt;Syntax: strict indentation&lt;/li&gt;
&lt;li&gt;Store the config file with your code, or in its own git repo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;File extension: .yaml and .yml&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YAML Format Compared to Others:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human readable and intuitive&lt;/li&gt;
&lt;li&gt;Line separation &amp;amp; indentation&lt;/li&gt;
&lt;li&gt;YAML use cases: Docker Compose files, Docker, Kubernetes, Ansible, Prometheus — a great fit for writing configuration files for all these recent DevOps tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;YAML identification:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Line separation&lt;/li&gt;
&lt;li&gt;Indentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;YAML vs XML vs JSON&lt;/strong&gt;&lt;br&gt;
YAML is a superset of JSON — any valid JSON file is also a valid YAML file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic Syntax of YAML:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Value Pairs:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Comment use&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;user-authentication&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;9000&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Objects:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By indenting the key value pair and indenting by objects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;microservice&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;user-authentication&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;9000&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Lists:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;microservice&lt;/span&gt;&lt;span class="pi"&gt;:&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;user-authentication&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;9000&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Boolean Values:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;microservice&lt;/span&gt;&lt;span class="pi"&gt;:&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;user-authentication&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;9000&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.7&lt;/span&gt;
  &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes, no, on, off, &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;More Lists:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;microservice&lt;/span&gt;&lt;span class="pi"&gt;:&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;user-authentication&lt;/span&gt;
    &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;1.7&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;2.1&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;8.1&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;   &lt;span class="c1"&gt;# → string&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;9000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Kubernetes YAML Files:&lt;/strong&gt;&lt;br&gt;
&lt;/p&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;Pod&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;nginx&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;nginx&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;nginx-container&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;nginx&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;80&lt;/span&gt;
      &lt;span class="na"&gt;volumeMounts&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;nginx-vol&lt;/span&gt;
          &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/usr/nginx/html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key value pairs breakdown:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;metadata = object&lt;/li&gt;
&lt;li&gt;labels = object&lt;/li&gt;
&lt;li&gt;spec = object&lt;/li&gt;
&lt;li&gt;containers = list of objects&lt;/li&gt;
&lt;li&gt;port = list&lt;/li&gt;
&lt;li&gt;volumeMounts = list of objects&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Kubernetes Demystified: Kubectl &amp; YAML Configuration</title>
      <dc:creator>Tejas KP</dc:creator>
      <pubDate>Tue, 25 Aug 2026 14:35:39 +0000</pubDate>
      <link>https://dev.to/tejas_kp/kubernetes-demystified-kubectl-yaml-configuration-427k</link>
      <guid>https://dev.to/tejas_kp/kubernetes-demystified-kubectl-yaml-configuration-427k</guid>
      <description>&lt;p&gt;Part 2, we covered the architecture - Control Plane and Worker Nodes. Now let's look at how you actually manage Kubernetes components: through &lt;strong&gt;kubectl **and **YAML configuration files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Manage K8s Components:&lt;/strong&gt;&lt;br&gt;
There are two ways to interact with your cluster's components.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;kubectl — the Kubernetes CLI(Imperative):&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A very powerful tool that enables direct interaction with the cluster.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl create deployment mydepl
kubectl create statefulset myst
kubectl create service mysvc
kubectl create &amp;lt;objecttype&amp;gt; &amp;lt;instancename&amp;gt;
kubectl delete &amp;lt;objecttype&amp;gt; &amp;lt;instancename&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A very powerful tool that enables direct interaction with the cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get        &lt;span class="o"&gt;(&lt;/span&gt;basic information&lt;span class="o"&gt;)&lt;/span&gt;
kubectl describe    &lt;span class="o"&gt;(&lt;/span&gt;aggregated detail info&lt;span class="o"&gt;)&lt;/span&gt;
kubectl logs         &lt;span class="o"&gt;(&lt;/span&gt;logs of containers&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Limitation&lt;/strong&gt;: &lt;br&gt;
These commands get unwieldy while creating multiple Pods or components at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Kubernetes Manifests (Configuration Files-Declarative):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For anything more complex, Kubernetes component files — also called &lt;strong&gt;Kubernetes manifests&lt;/strong&gt; are the better option.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write the component configuration in a file&lt;/li&gt;
&lt;li&gt;Apply the configuration file with kubectl apply&lt;/li&gt;
&lt;li&gt;Multiple K8s components can go in one file and be applied with a single apply command&lt;/li&gt;
&lt;li&gt;To update: edit the config file and apply again&lt;/li&gt;
&lt;li&gt;To delete: delete using the config file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes Configuration File: YAML&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes configuration files are written in YAML, and every one of them has three parts:&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;metadata&lt;/li&gt;
&lt;li&gt;specifications (spec)&lt;/li&gt;
&lt;li&gt;status**&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A typical flow connects a &lt;strong&gt;Deployment → Service → Pod.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example: Deployment vs Service&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment:&lt;/strong&gt;&lt;br&gt;
&lt;/p&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;nginx-deployment&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&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;2&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Service:&lt;/strong&gt;&lt;br&gt;
&lt;/p&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;nginx-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;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Breaking Down the Three Parts:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declaration&lt;/strong&gt; — apiVersion and kind tell Kubernetes what type of object this is.&lt;br&gt;
&lt;strong&gt;metadata&lt;/strong&gt; — the object's name and other identifying info (e.g., labels).&lt;br&gt;
&lt;strong&gt;spec (specifications)&lt;/strong&gt; — the desired configuration; attributes here are specific to the kind (a Deployment's spec looks different from a Service's spec).&lt;br&gt;
&lt;strong&gt;status&lt;/strong&gt; — automatically generated and added by Kubernetes; you don't write this yourself&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How "status" Actually Works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where Kubernetes' self-healing nature comes from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If desired state = actual state → all good, pass.&lt;/li&gt;
&lt;li&gt;If desired state ≠ actual state → Kubernetes self-heals, working to bring actual state back in line with desired state.&lt;/li&gt;
&lt;li&gt;Kubernetes updates this state continuously.&lt;/li&gt;
&lt;li&gt;This status information is retrieved from etcd, which holds the current status of every K8s component.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recap&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use kubectl for quick, one-off, imperative changes.&lt;/li&gt;
&lt;li&gt;Use YAML manifests (declarative) for anything real, repeatable, and version-controlled.&lt;/li&gt;
&lt;li&gt;Every manifest has metadata, spec, and an auto-managed status.&lt;/li&gt;
&lt;li&gt;Kubernetes constantly compares desired vs actual state — that comparison is why self-healing works.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cli</category>
      <category>containers</category>
      <category>devops</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Kubernetes Architecture</title>
      <dc:creator>Tejas KP</dc:creator>
      <pubDate>Sun, 23 Aug 2026 03:10:08 +0000</pubDate>
      <link>https://dev.to/tejas_kp/kubernetes-architecture-32c9</link>
      <guid>https://dev.to/tejas_kp/kubernetes-architecture-32c9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Control Plane (Master) &amp;amp; Worker Nodes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Control Plane components:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Server&lt;/li&gt;
&lt;li&gt;Scheduler&lt;/li&gt;
&lt;li&gt;Control Manager&lt;/li&gt;
&lt;li&gt;etcd&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Worker Node components:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Container Runtime&lt;/li&gt;
&lt;li&gt;Kubelet&lt;/li&gt;
&lt;li&gt;Kube-proxy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Node Processes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each node has multiple Pods on it.&lt;/li&gt;
&lt;li&gt;3 processes must be installed on every node — used to schedule and manage those Pods.&lt;/li&gt;
&lt;li&gt;Nodes are cluster services that actually do the work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Container Runtime&lt;/strong&gt;&lt;br&gt;
Examples: Docker, containerd, CRI-O.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;containerd is used in worker nodes — it's lightweight in nature.&lt;/li&gt;
&lt;li&gt;This should be installed on every node because application Pods need to run containers inside the node.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kubelet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The process which schedules the Pods and containers underneath is Kubelet.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubelet interacts with both the container and the node.&lt;/li&gt;
&lt;li&gt;Kubelet starts the Pod with the container inside.&lt;/li&gt;
&lt;li&gt;Communication between two nodes is because of Services.&lt;/li&gt;
&lt;li&gt;Creation of Pod: Kubelet insures the Pod is always running — if not, it will inform etcd.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kube-proxy&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kube-proxy forwards the request from Pod to Service.&lt;/li&gt;
&lt;li&gt;Makes use of the communication, with load balancing.&lt;/li&gt;
&lt;li&gt;Provides networking (container ID, IP address).&lt;/li&gt;
&lt;li&gt;Load balancing — basically using IP tables.&lt;/li&gt;
&lt;li&gt;It makes sure to send the request to the same machine instead of sending it to others (from same node communications).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;So, how do you interact with this cluster?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schedule the Pod&lt;/li&gt;
&lt;li&gt;Monitor&lt;/li&gt;
&lt;li&gt;Re-schedule/restart the Pod&lt;/li&gt;
&lt;li&gt;Join a new node&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Managing processes are done by master nodes (the control plane).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API Server&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you, as a user, want to deploy a new application in a Kubernetes cluster, you interact with the API server using some client — could be UI or CLI.&lt;/li&gt;
&lt;li&gt;It's a cluster gateway — it gets the initial request of any update into the cluster, even the queries from the cluster.&lt;/li&gt;
&lt;li&gt;It also acts as gatekeeper for authentication.&lt;/li&gt;
&lt;li&gt;It means when you want to schedule new Pods, deploy new applications, create new services, or any other components — you have to talk to it first.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Flow: Some request → API server → Validates request → Other processes → Pods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Only one entry point to the cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scheduler&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you send an API request to schedule a new Pod, it validates the request and hands it over to the Scheduler to start the application Pod on one of the worker nodes.&lt;/li&gt;
&lt;li&gt;It's not randomly allocating — Scheduler has an intelligent way of deciding on which specific worker node the Pod will be scheduled.&lt;/li&gt;
&lt;li&gt;First it will analyze how much CPU it needs, then which node has the least storage among them — there it will be scheduled.&lt;/li&gt;
&lt;li&gt;Scheduler just decides on which node the Pod has to be assigned, but starting the scheduling with containers is done by Kubelet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Flow: Client → Schedule the Pod → API server → Scheduler → Where to put the Pod → Kubelet&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Controller Manager&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When Pods die on any node, there must be a way to detect that the node died, then reschedule those Pods as soon as possible.&lt;/li&gt;
&lt;li&gt;What Controller Manager does is detect cluster state changes (crashing of Pod) and tries to recover the cluster state as soon as possible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Flow: Controller manager → Scheduler → Kubelet → Pod recovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;etcd&lt;/strong&gt;&lt;br&gt;
Only cluster data storage — the cluster brain.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's a key-value store of a cluster state.&lt;/li&gt;
&lt;li&gt;etcd is a cluster brain.&lt;/li&gt;
&lt;li&gt;Cluster changes (Pod dies, restarted) get stored.&lt;/li&gt;
&lt;li&gt;What resources are available?&lt;/li&gt;
&lt;li&gt;Did the cluster state change — cluster health.&lt;/li&gt;
&lt;li&gt;Actual application data is not stored here.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example of Cluster Set-up&lt;/strong&gt;&lt;br&gt;
2 master nodes&lt;br&gt;
3 worker nodes&lt;/p&gt;

&lt;p&gt;Master: much more important, handful of master processes. Worker nodes: higher workload, more resources.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>Kubernetes Basics for DevOps Engineers</title>
      <dc:creator>Tejas KP</dc:creator>
      <pubDate>Sat, 22 Aug 2026 03:34:13 +0000</pubDate>
      <link>https://dev.to/tejas_kp/kubernetes-basics-for-devops-engineers-3ml9</link>
      <guid>https://dev.to/tejas_kp/kubernetes-basics-for-devops-engineers-3ml9</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;br&gt;
Kubernetes can feel overwhelming when you first hear terms like Pods, Services, and Deployments thrown around. In this first post of my Kubernetes series, I’ll break down the fundamentals — what Kubernetes actually solves, and the core building blocks you need to understand before going further.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Kubernetes?&lt;/strong&gt;&lt;br&gt;
Kubernetes is an &lt;strong&gt;open-source container orchestration tool&lt;/strong&gt;, originally developed by Google. It helps manage containerized applications across different environments — physical machines, virtual machines, and cloud environments — which makes it a great fit for hybrid deployment setups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Kubernetes? The Problem It Solves&lt;/strong&gt;&lt;br&gt;
To understand why Kubernetes exists, look at the trend that led to it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Applications moved from monolith to microservices.&lt;/li&gt;
&lt;li&gt;That shift drastically increased the number of containers teams had to   manage.&lt;/li&gt;
&lt;li&gt;Managing hundreds of containers by hand became unsustainable — teams needed a proper way to orchestrate them.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;High Availability — no downtime&lt;/li&gt;
&lt;li&gt;Scalability — scale up or down based on load and performance needs&lt;/li&gt;
&lt;li&gt;Disaster Recovery — backup and restore built into the ecosystem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Main Kubernetes Components&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pods: Abstraction over containers&lt;br&gt;
Services: Stable networking &amp;amp; communication&lt;br&gt;
Ingress: Routes external traffic into the cluster&lt;br&gt;
ConfigMaps &amp;amp; Secrets:  External configuration&lt;br&gt;
Volumes : Data persistence&lt;br&gt;
Deployments &amp;amp; StatefulSets: Replication (stateless vs. stateful)&lt;br&gt;
DaemonSets: One Pod per node, auto-scaled with the cluster&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Hey Dev Community — New Here!</title>
      <dc:creator>Tejas KP</dc:creator>
      <pubDate>Sat, 22 Aug 2026 02:51:40 +0000</pubDate>
      <link>https://dev.to/tejas_kp/hey-dev-community-new-here-34kj</link>
      <guid>https://dev.to/tejas_kp/hey-dev-community-new-here-34kj</guid>
      <description>&lt;p&gt;Hey Dev Community! 👋&lt;/p&gt;

&lt;p&gt;I’m Tejas, a DevOps Engineer from Bangalore, new to this platform. I work mostly with AWS, Kubernetes, Terraform, and Jenkins, and I’ll be sharing what I pick up along the way — CI/CD, Kubernetes in practice, IaC patterns, and the occasional “here’s what broke and how I fixed it.”&lt;/p&gt;

&lt;p&gt;Still learning every day, but happy to share whatever I know — and even happier to learn from you all. Feel free to connect or drop a comment! 🚀&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>terraform</category>
    </item>
  </channel>
</rss>
