<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on Sagar Panda | DevOps &amp; Cloud Infra Engineer</title><link>https://new.sagarpanda.com/blogs/</link><description>Recent content in Blogs on Sagar Panda | DevOps &amp; Cloud Infra Engineer</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 20 Jun 2026 07:45:10 +0530</lastBuildDate><atom:link href="https://new.sagarpanda.com/blogs/index.xml" rel="self" type="application/rss+xml"/><item><title>Seeing Inside Amazon EKS with OpenTelemetry 🔍</title><link>https://new.sagarpanda.com/blogs/monitoring/otel-on-eks/</link><pubDate>Sat, 20 Jun 2026 07:45:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/monitoring/otel-on-eks/</guid><description>&lt;h2 id="why-this-setup"&gt;Why This Setup?&lt;a href="#why-this-setup" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Before getting into the architecture, a few quick notes. Telemetry goes to both &lt;strong&gt;New Relic&lt;/strong&gt; and &lt;strong&gt;Honeycomb&lt;/strong&gt; to test OpenTelemetry&amp;rsquo;s backend-independence promise and compare the two. New Relic wins on day-to-day usability — dashboards, APM, and alerts work intuitively. Honeycomb takes more getting used to, but its MCP server is where it genuinely shines: connected to Claude, you can ask plain-English questions against live telemetry — no NRQL or PromQL required. That&amp;rsquo;s the part worth &lt;a
 href="#ask-claude"&gt;&lt;em&gt;&lt;strong&gt;jumping to&lt;/strong&gt;&lt;/em&gt; 👇&lt;/a&gt; first if you&amp;rsquo;re short on time.&lt;/p&gt;</description></item><item><title>Hands-On OpenTelemetry: Prometheus, Jaeger, Grafana and the OTel Demo</title><link>https://new.sagarpanda.com/blogs/monitoring/opentelemetry/</link><pubDate>Mon, 08 Jun 2026 09:10:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/monitoring/opentelemetry/</guid><description>&lt;h2 id="preface"&gt;Preface&lt;a href="#preface" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In the &lt;a
 href="https://new.sagarpanda.com/blogs/monitoring/observability/"&gt;&lt;strong&gt;&lt;em&gt;previous article&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;, we covered the core observability concepts theoretically. The next step is exploring them practically using the OpenTelemetry Demo application.&lt;/p&gt;
&lt;p&gt;The goal here is not to memorize PromQL syntax, but to understand how telemetry actually appears inside a real observability platform. So, let&amp;rsquo;s get started.&lt;/p&gt;</description></item><item><title>Observability 101: Understanding Metrics, Traces and Logs</title><link>https://new.sagarpanda.com/blogs/monitoring/observability/</link><pubDate>Tue, 02 Jun 2026 19:30:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/monitoring/observability/</guid><description>&lt;h1 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Most engineers encounter observability only after something breaks.&lt;/p&gt;
&lt;p&gt;You are deep in the zone on a new feature when an urgent incident gets escalated. The report from customer support is notoriously vague:&lt;/p&gt;
&lt;div
 class="code-block-container border-border bg-card my-6 overflow-hidden rounded-xl border shadow-sm transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 data-code-block
 data-code-id="code-0"
 data-collapsible="true"
 data-default-state="expanded"
 data-collapsed="false"
 data-auto-collapse-lines="30"
 data-auto-collapse-height="400"
 data-collapsed-height="120"
&gt;
 
 &lt;div
 class="code-block-header bg-muted/30 border-border flex items-center justify-between border-b px-4 py-3"
 &gt;
 
 &lt;div class="flex items-center gap-2"&gt;
 &lt;div class="text-muted-foreground shrink-0"&gt;
 &lt;svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" /&gt;
&lt;/svg&gt;
 &lt;/div&gt;
 &lt;span class="text-muted-foreground text-sm font-medium"&gt;
 TEXT
 &lt;/span&gt;
 &lt;/div&gt;

 
 &lt;div class="flex items-center gap-2"&gt;
 &lt;button
 class="collapse-code-btn text-muted-foreground hover:text-primary hover:bg-primary/10 focus:ring-primary/20 flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium transition-all duration-200 ease-out focus:ring-2 focus:outline-none"
 type="button"
 data-code-action="toggle-collapse"
 data-label-expand="Expand"
 data-label-collapse="Collapse"
 title="Collapse"
 aria-label="Collapse"
 aria-controls="code-0"
 aria-expanded="true"
 &gt;
 &lt;span class="collapse-chevron transition-transform duration-200 ease-out"&gt;
 &lt;svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /&gt;
&lt;/svg&gt;
 &lt;/span&gt;
 &lt;span class="collapse-text hidden sm:inline"&gt;Collapse&lt;/span&gt;
 &lt;/button&gt;
 &lt;button
 class="copy-code-btn text-muted-foreground hover:text-primary hover:bg-primary/10 focus:ring-primary/20 flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium transition-all duration-200 ease-out focus:ring-2 focus:outline-none"
 type="button"
 data-code-action="copy"
 data-label-copy="Copy"
 data-label-copied="Copied"
 title="Copy"
 aria-label="Copy"
 &gt;
 &lt;span class="copy-icon"&gt;
 &lt;svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" /&gt;
&lt;/svg&gt;
 &lt;/span&gt;
 &lt;span class="copy-text hidden sm:inline"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;

 
 &lt;div class="code-block-content relative" id="code-0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;The website is slow.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;Checkout is failing.&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;The API is timing out.&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;div hidden data-code-source&gt;&amp;#34;The website is slow.&amp;#34;
&amp;#34;Checkout is failing.&amp;#34;
&amp;#34;The API is timing out.&amp;#34;&lt;/div&gt;
 
 &lt;div
 class="collapse-overlay to-card/90 pointer-events-none absolute inset-0 bg-linear-to-b from-transparent via-transparent opacity-0 transition-opacity duration-300"
 hidden
 &gt;
 &lt;button
 class="collapse-overlay-btn text-muted-foreground bg-card/80 border-border/50 hover:bg-primary/10 hover:text-primary hover:border-primary/30 absolute bottom-4 left-1/2 flex -translate-x-1/2 items-center justify-center rounded-full border p-2 backdrop-blur-sm transition-all duration-200"
 type="button"
 data-code-action="expand"
 aria-label="Expand"
 title="Expand"
 &gt;
 &lt;svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /&gt;
&lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The challenge in modern systems is rarely fixing the bug once you find it. The real headache is finding where the problem lives in the first place.&lt;/p&gt;</description></item><item><title>Turn Your GitHub Repository into a Self-Managing Workflow</title><link>https://new.sagarpanda.com/blogs/github-automation/</link><pubDate>Sun, 24 May 2026 12:45:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/github-automation/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
 href="https://new.sagarpanda.com/blogs/github-actions/"&gt;In my previous article, I wrote the fundamentals of GitHub Actions and how they can simplify CI/CD pipelines&lt;/a&gt;. But modern repositories need much more than just automated builds and deployments.&lt;/p&gt;
&lt;p&gt;As projects grow, maintaining pull requests, managing issues, handling releases, updating dependencies, and reviewing security manually becomes repetitive and time-consuming.&lt;/p&gt;</description></item><item><title>Beyond Objects — Using Amazon S3 Files as a Native File System on EC2</title><link>https://new.sagarpanda.com/blogs/aws/s3files/</link><pubDate>Wed, 22 Apr 2026 12:30:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/aws/s3files/</guid><description>&lt;!-- 











&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="true"
 data-gallery-type="auto"
 data-image-width="1200"
 data-image-height="630"
 data-image-src="@image"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="@image"
 alt="AWS_S3Files Architecture"
 width="1200"
 height="630"
 loading="lazy"
 decoding="async"
 /&gt;
 &lt;/div&gt;

 
&lt;/figure&gt; --&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;For over a decade, we’ve been known S3 is not a file system. We used hacks like &lt;code&gt;s3fs-fuse&lt;/code&gt; or accepted the limited semantics of &lt;strong&gt;Mountpoint for S3&lt;/strong&gt;. That has changed on &lt;strong&gt;April 2026&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Cache Me If You Can - AWS CloudFront in Action 🌏</title><link>https://new.sagarpanda.com/blogs/aws/cloudfront/</link><pubDate>Sun, 19 Apr 2026 10:15:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/aws/cloudfront/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://i.ibb.co/cSvqh9kd/x.jpg"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://i.ibb.co/cSvqh9kd/x.jpg"
 alt="thumbnail"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://i.ibb.co/cSvqh9kd/x.jpg"
 data-gallery-alt="thumbnail"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;a href="#intro" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;AWS CloudFront&lt;/strong&gt; is a service that makes websites and apps load faster for users around the world. It stores copies of our application content (like images, videos, and web pages) in different data centers across the globe, called &lt;strong&gt;edge locations&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>GitLab Setup Unlocked: Your 10-Minute Fast-Track Guide</title><link>https://new.sagarpanda.com/blogs/gitlab/gitlab-setup/</link><pubDate>Sun, 12 Apr 2026 10:45:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/gitlab/gitlab-setup/</guid><description>&lt;h2 id="setup-host"&gt;Setup Host&lt;a href="#setup-host" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;First, set up an instance. I chose &lt;strong&gt;AWS EC2&lt;/strong&gt;, but you can use any cloud provider or your own physical server.&lt;/p&gt;
&lt;h3 id="hardware-requirements"&gt;Hardware Requirements&lt;a href="#hardware-requirements" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Do not try to use the &amp;ldquo;Free Tier&amp;rdquo; &lt;code&gt;t2.micro&lt;/code&gt; or &lt;code&gt;t3.micro&lt;/code&gt;. GitLab runs several background services (PostgreSQL, Redis, Sidekiq) that require significant memory.&lt;/p&gt;</description></item><item><title>Kubernetes StatefulSets Explained - When and Why to Use Them</title><link>https://new.sagarpanda.com/blogs/k8s/statefulset/</link><pubDate>Tue, 07 Apr 2026 10:30:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/statefulset/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jhtaeySqKrPpqKg8p3WRqA.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jhtaeySqKrPpqKg8p3WRqA.png"
 alt="Image Souce: KubeBlogs"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*jhtaeySqKrPpqKg8p3WRqA.png"
 data-gallery-alt="Image Souce: KubeBlogs"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="what-is-statefulset"&gt;What is StatefulSet&lt;a href="#what-is-statefulset" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;StatefulSets are used to manage stateful applications, such as databases or other applications that keep track of their state. By using StatefulSets, a set of pods can be deployed and scaled, ensuring that they are ordered and unique.&lt;/p&gt;</description></item><item><title>Kafka - The Calm Brain in the Middle of Chaotic Microservices.</title><link>https://new.sagarpanda.com/blogs/kafka/</link><pubDate>Wed, 18 Mar 2026 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/kafka/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*FtTi1Yxel568GbnO7l0_0Q.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*FtTi1Yxel568GbnO7l0_0Q.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*FtTi1Yxel568GbnO7l0_0Q.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="-what-it-is"&gt;💡 What it is:&lt;a href="#-what-it-is" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;At its core, &lt;strong&gt;Kafka is like a high-speed, super-durable logbook&lt;/strong&gt; for a company.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What:&lt;/strong&gt; Kafka is a &lt;em&gt;distributed event streaming platform&lt;/em&gt;. Think of it as a central nervous system for data. It takes in massive amounts of data (events) from many sources in real-time and makes that data available to many destinations&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why:&lt;/strong&gt; Its main superpowers are &lt;strong&gt;speed&lt;/strong&gt; and &lt;strong&gt;reliability&lt;/strong&gt;. It&amp;rsquo;s built to handle a massive volume of messages (like millions per second) very quickly. It&amp;rsquo;s also &amp;ldquo;fault-tolerant,&amp;rdquo; meaning if one part of the system fails, no data is lost, and the system keeps running.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How it works:&lt;/strong&gt; It uses a &amp;ldquo;publish-subscribe&amp;rdquo; model.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Producers&lt;/strong&gt; (like a microservice for Order in a e-com app) &lt;em&gt;write&lt;/em&gt; events into Kafka.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kafka&lt;/strong&gt; stores these events in an ordered log (like a notebook) for as long as you want (e.g., one day, one year, or forever).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consumers&lt;/strong&gt; (like a database, an analytics dashboard, or another app) &lt;em&gt;read&lt;/em&gt; the events from the log at their own pace. A single event can be read by many different consumers.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="-key-components--terms"&gt;🔑 Key Components &amp;amp; Terms&lt;a href="#-key-components--terms" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Event:&lt;/strong&gt; A single piece of data. This could be anything: an order, a website click, a financial transaction, a temperature reading, etc.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Producer:&lt;/strong&gt; An application that &lt;em&gt;writes&lt;/em&gt; (publishes) events to Kafka.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consumer:&lt;/strong&gt; An application that &lt;em&gt;reads&lt;/em&gt; (subscribes to) events from Kafka.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Broker:&lt;/strong&gt; A single Kafka server. Brokers are the heart of the system; they receive, store, and serve the data. A Kafka system is usually a &lt;strong&gt;Cluster&lt;/strong&gt; (group) of multiple brokers working together for reliability and scale.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Topic:&lt;/strong&gt; The category or &amp;ldquo;notebook&amp;rdquo; where events are stored. For example, you might have a&lt;code&gt;orders&lt;/code&gt; topic, a &lt;code&gt;payments&lt;/code&gt; topic, and an &lt;code&gt;inventory_updates&lt;/code&gt; topic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partition:&lt;/strong&gt; A topic is split into several logs called partitions. This is how Kafka achieves its high speed—it can read and write to multiple partitions at the same time (in parallel).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consumer Group:&lt;/strong&gt; A group of consumers working together to read from a topic. Kafka automatically balances the partitions among the consumers in a group so that each event is processed by only one consumer in that group.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aVVUQJl01_rFudUxO_ttSA.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aVVUQJl01_rFudUxO_ttSA.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aVVUQJl01_rFudUxO_ttSA.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Terraform Modules - Simplify, Organise and Reuse Your IAC</title><link>https://new.sagarpanda.com/blogs/terraform/tf-module/</link><pubDate>Sun, 22 Dec 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/terraform/tf-module/</guid><description>&lt;p&gt;A &lt;strong&gt;Terraform module&lt;/strong&gt; is a container/template for multiple resources that are used together. Modules are a way to organize and reuse code in Terraform, making infrastructure management more efficient and maintainable.&lt;/p&gt;
&lt;p&gt;We first define the resource templates, and then we call the templates from outside of the module structures and we can even modify them as per our needs.&lt;/p&gt;
&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*I_rBd_SMpsI8tXzk5mk3Zg.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*I_rBd_SMpsI8tXzk5mk3Zg.png"
 alt="Image credit: Linode"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*I_rBd_SMpsI8tXzk5mk3Zg.png"
 data-gallery-alt="Image credit: Linode"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Set Up mTLS in NGINX for Robust Web Security.</title><link>https://new.sagarpanda.com/blogs/nginx/nginx-mtls/</link><pubDate>Mon, 09 Dec 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/nginx/nginx-mtls/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ZhRTae65blWVYB0aXvHoJA.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ZhRTae65blWVYB0aXvHoJA.png"
 alt="Image bg credit; Nginx"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ZhRTae65blWVYB0aXvHoJA.png"
 data-gallery-alt="Image bg credit; Nginx"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="what-is-mtls"&gt;What is mTLS:&lt;a href="#what-is-mtls" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;mTLS, or &lt;strong&gt;mutual TLS&lt;/strong&gt;, is a security protocol that ensures &lt;strong&gt;both&lt;/strong&gt; the client and the server authenticate each other when they communicate over a network. It’s like a handshake where both sides check each other’s identity, making sure that both are who they say they are.&lt;/p&gt;</description></item><item><title>Kubernetes Health Checks with Probes</title><link>https://new.sagarpanda.com/blogs/k8s/k8s-probes/</link><pubDate>Mon, 11 Nov 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/k8s-probes/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*nbqglR7NZ7k96PykFRClQw.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*nbqglR7NZ7k96PykFRClQw.png"
 alt="Image Credit : mobilabsolutions.com"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*nbqglR7NZ7k96PykFRClQw.png"
 data-gallery-alt="Image Credit : mobilabsolutions.com"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="what-are-probes"&gt;What are probes&lt;a href="#what-are-probes" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The word &lt;strong&gt;“probe”&lt;/strong&gt; in a general sense means a &lt;strong&gt;detailed investigation&lt;/strong&gt; or &lt;strong&gt;inspection&lt;/strong&gt; to gather information or check the condition of something. It’s often used in contexts where you’re trying to assess the status or health of something.&lt;/p&gt;</description></item><item><title>Fortify Your Security with CrowdSec — A Quick Start Guide</title><link>https://new.sagarpanda.com/blogs/linux/crowdsec/</link><pubDate>Mon, 30 Sep 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/crowdsec/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*iV7RJZ44oOMYMJSi0V517g.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*iV7RJZ44oOMYMJSi0V517g.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*iV7RJZ44oOMYMJSi0V517g.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="what-is-crowdsec"&gt;What is CrowdSec:&lt;a href="#what-is-crowdsec" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;CrowdSec is an open-source security tool designed to help protect servers and applications from cyberattacks. It works by analyzing logs from your systems to detect suspicious activity, such as brute-force attempts, and then takes action to block or prevent those threats.&lt;/p&gt;</description></item><item><title>Automate AWS VPC Setup with Terraform</title><link>https://new.sagarpanda.com/blogs/terraform/terraform-aws-vpc/</link><pubDate>Fri, 20 Sep 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/terraform/terraform-aws-vpc/</guid><description>&lt;h3 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The VPC is a logical private network that allows us to control how our resources, like servers, are connected and protected.&lt;/p&gt;
&lt;p&gt;With the help of VPC, we decide the range of IP addresses for the network, how we can divide the network into smaller parts, data flow into &amp;amp; out and rules for securing our resource.&lt;/p&gt;</description></item><item><title>AWS Secrets Manager: A Secure Solution for Credential Management</title><link>https://new.sagarpanda.com/blogs/aws/aws-secretmanager/</link><pubDate>Sat, 14 Sep 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/aws/aws-secretmanager/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*6eDcfbngtrF1eiKzstWkKA.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*6eDcfbngtrF1eiKzstWkKA.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*6eDcfbngtrF1eiKzstWkKA.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;We generally store creds in diff ways such as using environment vars, storing them in a file and referring the file in the application (DB connection for example). However they are still stored in plaintext which we can easily peek thru. Also incase a bad actor gains access to the OS, can get all the sensitive information.&lt;/p&gt;</description></item><item><title>AWS WAF with Load Balancer - Beginner’s Guide</title><link>https://new.sagarpanda.com/blogs/aws/aws-waf/</link><pubDate>Tue, 20 Aug 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/aws/aws-waf/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*JJlzcHjGcywNPhgKk6a6ig.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*JJlzcHjGcywNPhgKk6a6ig.png"
 alt="Img bg: wallpaper cave"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*JJlzcHjGcywNPhgKk6a6ig.png"
 data-gallery-alt="Img bg: wallpaper cave"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="setup"&gt;Setup:&lt;a href="#setup" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;First we need to have the web app ready. You can have multiple instances of your app as we are going to use ALB.&lt;/p&gt;</description></item><item><title>The Essential Role of Exit Codes in Bash Scripting</title><link>https://new.sagarpanda.com/blogs/linux/shellscript4/</link><pubDate>Wed, 26 Jun 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/shellscript4/</guid><description>&lt;h2 id="what-are-exit-codes-in-linux"&gt;What are exit codes in linux&lt;a href="#what-are-exit-codes-in-linux" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In Linux and Unix-like systems, an exit code is a numeric value returned by a command or a script after completion. It indicates the success or failure of the command or script execution.&lt;/p&gt;</description></item><item><title>Monitoring Kubernetes Cluster with Prometheus and Grafana</title><link>https://new.sagarpanda.com/blogs/k8s/k8s-monitoring/</link><pubDate>Mon, 10 Jun 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/k8s-monitoring/</guid><description>&lt;h2 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Keeping an eye on your Kubernetes cluster can feel like a daunting task, but with the right tools, it doesn’t have to be. Prometheus and Grafana – two fantastic open-source tools that make monitoring and visualizing your cluster easy.&lt;/p&gt;</description></item><item><title>Linux Terminal tips - Part 2</title><link>https://new.sagarpanda.com/blogs/linux/linux-tips2/</link><pubDate>Tue, 28 May 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/linux-tips2/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*oJHs4IQgdGgHM-W4aiBuwQ.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*oJHs4IQgdGgHM-W4aiBuwQ.png"
 alt="Image credit - itsfoss"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*oJHs4IQgdGgHM-W4aiBuwQ.png"
 data-gallery-alt="Image credit - itsfoss"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="1-reverse-search-cmds"&gt;1. Reverse search cmds:&lt;a href="#1-reverse-search-cmds" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;To reuse a command, use Ctrl + R and type a few matching keywords to see the recently used cmds being shown up. The search is based on the command history.&lt;/p&gt;</description></item><item><title>Kubernetes Security — Role Based Access Control (RBAC)</title><link>https://new.sagarpanda.com/blogs/k8s/rbac/</link><pubDate>Mon, 20 May 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/rbac/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Role-Based Access Control (RBAC) is a method used in computer security to manage access to resources within a system.&lt;/p&gt;
&lt;p&gt;RBAC in k8s is based on the principle. There are various terminologies such as users, service account, role, role binding and etc.&lt;/p&gt;</description></item><item><title>Dynamic Data fetching — Data Sources in Terraform/OpenTofu</title><link>https://new.sagarpanda.com/blogs/terraform/terraform5/</link><pubDate>Sun, 12 May 2024 10:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/terraform/terraform5/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*F6h8tusJxak5v3v4ViKYdw.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*F6h8tusJxak5v3v4ViKYdw.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*F6h8tusJxak5v3v4ViKYdw.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;I have migrated of OpenTofu.&lt;/p&gt;
&lt;p&gt;If you wish to migrate, the process is pretty simple.&lt;/p&gt;
&lt;p&gt;Steps to migrate existing terraform infra:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a
 href="https://opentofu.org/docs/intro/install/"target="_blank"
 class="inline-flex items-center gap-1"
 &gt;Install opentofu&lt;svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/&gt;&lt;/svg&gt;
 &lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize opentofu just as you do with terraform.&lt;/p&gt;</description></item><item><title>Linux Terminal tips - Part 1</title><link>https://new.sagarpanda.com/blogs/linux/linux-tips1/</link><pubDate>Sun, 05 May 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/linux-tips1/</guid><description>&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In the labyrinth of Linux commands, managing tasks can be daunting. Fear not! Here are some handy tips and tricks up your sleeve to streamline your day-to-day operations, making every task a breeze&lt;/p&gt;
&lt;h3 id="1-clearing-terminal"&gt;1. Clearing terminal:&lt;a href="#1-clearing-terminal" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Use Ctrl + L to clean the terminal instead of typing clear every time.&lt;/p&gt;</description></item><item><title>Helm — Your Compass in the Kubernetes Universe</title><link>https://new.sagarpanda.com/blogs/k8s/helm/</link><pubDate>Wed, 01 May 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/helm/</guid><description>&lt;h3 id="what-is-helm"&gt;What is Helm:&lt;a href="#what-is-helm" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Helm, the package manager for k8s similar to package manager for linux such as apt (Debian/Ubuntu based) yum/dnf (Red Hat or Fedora family of linux) , which helps us with packaging and deploying application.&lt;/p&gt;</description></item><item><title>AWS Lambda - The Serverless Function</title><link>https://new.sagarpanda.com/blogs/aws/aws-lambda/</link><pubDate>Sat, 27 Apr 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/aws/aws-lambda/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*bTINZh_GvTsK8OrClazywQ.jpeg"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*bTINZh_GvTsK8OrClazywQ.jpeg"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*bTINZh_GvTsK8OrClazywQ.jpeg"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="what-is-lambda"&gt;What is Lambda&lt;a href="#what-is-lambda" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;AWS Lambda is an Amazon serverless computing service meaning we don’t have to manage any ec2 instances. We can just deploy a piece of code that runs automatically based on certain triggers or events and so it is also known as an event-driven computing service.&lt;/p&gt;</description></item><item><title>How AWS ALB Keeps Your Apps in Line!</title><link>https://new.sagarpanda.com/blogs/aws/aws-alb/</link><pubDate>Sat, 27 Apr 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/aws/aws-alb/</guid><description>&lt;h2 id="what-is-load-balancer"&gt;What is Load Balancer&lt;a href="#what-is-load-balancer" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A &lt;strong&gt;load balancer&lt;/strong&gt; is a tool that helps distribute incoming internet traffic across multiple servers to ensure that no single server becomes overwhelmed.&lt;/p&gt;
&lt;p&gt;AWS provides different types of load balancers that help manage web traffic to your applications. The load balancer ensures that your application can handle more visitors without crashing, and it can also automatically route traffic to healthy servers if some servers are having problems.&lt;/p&gt;</description></item><item><title>Ingress in K8s - Name based Routing with TLS</title><link>https://new.sagarpanda.com/blogs/k8s/nginx-ingress-tls/</link><pubDate>Sun, 07 Apr 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/nginx-ingress-tls/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1356/format:webp/1*yecPvYFABn0s-xmGCJLLbA.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1356/format:webp/1*yecPvYFABn0s-xmGCJLLbA.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1356/format:webp/1*yecPvYFABn0s-xmGCJLLbA.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="preface"&gt;Preface:&lt;a href="#preface" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In the &lt;a
 href="https://new.sagarpanda.com/blogs/k8s/nginx-ingress/"&gt;&lt;strong&gt;&lt;em&gt;previous article&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; we saw how to use nginx ingress for routing. Today we will experiment with adding domain to our app and will also use TLS cert for the domain.&lt;/p&gt;</description></item><item><title>Getting Started with Ingress In Kubernetes</title><link>https://new.sagarpanda.com/blogs/k8s/nginx-ingress/</link><pubDate>Mon, 01 Apr 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/nginx-ingress/</guid><description>&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In Kubernetes, “Ingress” is an API object that manages external access to services within a cluster.&lt;/p&gt;
&lt;p&gt;It acts as a layer above the services, providing routing rules and load balancing for HTTP and HTTPS traffic. Essentially, it allows you to define how external traffic should be directed to services based on rules you set up, such as hostnames, paths, or other HTTP headers.&lt;/p&gt;</description></item><item><title>If Statement - Conditional in Bash Scripting</title><link>https://new.sagarpanda.com/blogs/linux/shellscrpt3/</link><pubDate>Fri, 22 Mar 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/shellscrpt3/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aYAEBPL0-U8a-fXcPpr9Ug.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aYAEBPL0-U8a-fXcPpr9Ug.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*aYAEBPL0-U8a-fXcPpr9Ug.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="intro"&gt;Intro:&lt;a href="#intro" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;So, what’s the deal with &amp;lsquo;if&amp;rsquo; statements? Think of them as the script’s way of making decisions. It’s like having a little script buddy that can say, &amp;ldquo;Hey, if this thing happens, do this. Otherwise, try something else!&amp;rdquo;&lt;/p&gt;</description></item><item><title>Variables and Math Functions in Bash</title><link>https://new.sagarpanda.com/blogs/linux/shellscript2/</link><pubDate>Sun, 10 Mar 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/shellscript2/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XufA9FFra4lI34SOm3UDtA.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XufA9FFra4lI34SOm3UDtA.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XufA9FFra4lI34SOm3UDtA.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="what-is-a-variable"&gt;What is a variable:&lt;a href="#what-is-a-variable" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;A variable is a container where we can store some value which have possibility to change.&lt;/p&gt;
&lt;p&gt;Just like any other programming language, bash also has variables, in fact we saw one default variable in the 1st chapter which is $SHELL. There are many other default variables such as $HOME, $PWD, $PATH, $USER etc.&lt;/p&gt;</description></item><item><title>Introduction to Shell Scripting for Beginners</title><link>https://new.sagarpanda.com/blogs/linux/shellscript1/</link><pubDate>Thu, 29 Feb 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/linux/shellscript1/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*HVqm9vCg6-5t6qGpu1g86A.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*HVqm9vCg6-5t6qGpu1g86A.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*HVqm9vCg6-5t6qGpu1g86A.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="whats-shell"&gt;What’s Shell:&lt;a href="#whats-shell" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;In simple terms shell is a program that takes input as commands and passes the operating system (OS) to perform the desired task.&lt;/p&gt;</description></item><item><title>ArgoCD GitOps for Kubernetes - From Code to Cluster</title><link>https://new.sagarpanda.com/blogs/k8s/argocd/</link><pubDate>Sat, 10 Feb 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/argocd/</guid><description>&lt;h3 id="what-isgitops"&gt;What is GitOps:&lt;a href="#what-isgitops" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Gitops is a practice in devops where managing applications using git is considered as a single source of truth. This is generally used in the Kubernetes world.&lt;/p&gt;
&lt;p&gt;This means we define our application for kubernetes using declarative objects in our git repo and no manul modifications are allowed to do in the k8s cluster.&lt;/p&gt;</description></item><item><title>Calico and Kubernetes: A Perfect Pair for Robust Network Policy</title><link>https://new.sagarpanda.com/blogs/k8s/calico-cni/</link><pubDate>Mon, 22 Jan 2024 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/calico-cni/</guid><description>&lt;h2 id="before-we-begin"&gt;Before we begin:&lt;a href="#before-we-begin" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Make sure to have calico as the network provider for the k8s cluster.&lt;/p&gt;
&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*PdBhhaPcVkDIv8x81u6FOQ.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*PdBhhaPcVkDIv8x81u6FOQ.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*PdBhhaPcVkDIv8x81u6FOQ.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;By default k8s allows all pods to communicate with each other in a cluster across namespaces.&lt;/p&gt;</description></item><item><title>Let’s Encrypt SSL Configuration using Certbot</title><link>https://new.sagarpanda.com/blogs/nginx/letsencrypt-ssl/</link><pubDate>Mon, 06 Nov 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/nginx/letsencrypt-ssl/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1280/format:webp/1*rYd5jblnBNdOUHyFiQFKXw.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1280/format:webp/1*rYd5jblnBNdOUHyFiQFKXw.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1280/format:webp/1*rYd5jblnBNdOUHyFiQFKXw.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id="what-is-ssltls"&gt;What is SSL/TLS:&lt;a href="#what-is-ssltls" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SSL or Secure Sockets Layer is a security protocol used to establish an encrypted connection between your web browser and a web server.&lt;/p&gt;</description></item><item><title>A Beginner’s Introduction to GitHub Actions</title><link>https://new.sagarpanda.com/blogs/github-actions/</link><pubDate>Sat, 21 Oct 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/github-actions/</guid><description>&lt;!-- ![action workflow](https://miro.medium.com/v2/resize:fit:1358/format:webp/1*_7mJjD1resPodxT7agk16w.png) --&gt;
&lt;p&gt;&lt;strong&gt;Intro:&lt;/strong&gt; GitHub action is a CI/CD platform to create build, test and deployment pipeline for our application. This is a yaml based configuration.&lt;/p&gt;
&lt;p&gt;In this tutorial, we are going to see the basics of github action and then proceed to integrate SonarQube SAST with it in the next post.&lt;/p&gt;
&lt;p&gt;Prerequisite:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub ac&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="set-up"&gt;Set Up&lt;a href="#set-up" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;First create a repository on github and add a simple program that prints just hello world.&lt;/p&gt;</description></item><item><title>Visualize Your Website Metrics — Blackbox Exporter and Grafana</title><link>https://new.sagarpanda.com/blogs/monitoring/blackbox/</link><pubDate>Mon, 25 Sep 2023 19:30:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/monitoring/blackbox/</guid><description>&lt;p&gt;In the previous post we discussed sending email alerts with alertmanager, in this post we’ll configure the Prometheus Blackbox Exporter.&lt;/p&gt;
&lt;p&gt;You can find the repository on &lt;a
 href="https://github.com/sagarkrp/Prometheus-and-Grafana"target="_blank"
 class="inline-flex items-center gap-1"
 &gt;Github&lt;svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/&gt;&lt;/svg&gt;
 &lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="setup"&gt;Setup&lt;a href="#setup" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;BlackBox exporter is a monitoring tool that allows querying of endpoints over HTTP, HTTPS, DNS, etc.&lt;/p&gt;</description></item><item><title>How to Send Email Alerts using Prometheus AlertManager</title><link>https://new.sagarpanda.com/blogs/monitoring/alertmanager/</link><pubDate>Fri, 08 Sep 2023 19:30:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/monitoring/alertmanager/</guid><description>&lt;p&gt;This is the 2nd article, to setup Prometheus with Node exporter and Grafana refer this article, &lt;a
 href="https://new.sagarpanda.com/blogs/monitoring/prometheus/"&gt;Setup Monitoring — Prometheus and Grafana&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can find the repository on &lt;a
 href="https://github.com/sagarkrp/Prometheus-and-Grafana.git"target="_blank"
 class="inline-flex items-center gap-1"
 &gt;Github&lt;svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/&gt;&lt;/svg&gt;
 &lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The Prometheus Alertmanager is a tool for sending alerts via emails, slack and various other mediums.&lt;/p&gt;</description></item><item><title>Setup Monitoring with Prometheus and Grafana.</title><link>https://new.sagarpanda.com/blogs/monitoring/prometheus/</link><pubDate>Sat, 26 Aug 2023 19:30:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/monitoring/prometheus/</guid><description>&lt;h2 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Prometheus&lt;/strong&gt; is a open-source platform for monitoring hardware and services. It collects metrics from the system of any other services that we configured.&lt;/p&gt;
&lt;p&gt;It has a querying language called PromQL to analyse the metrics. We can also configure mail alerts for situation like hight resources usage, SSL expiration etc.&lt;/p&gt;</description></item><item><title>Terraform on AWS — Outputs, Indexing and Variables</title><link>https://new.sagarpanda.com/blogs/terraform/terraform2/</link><pubDate>Sun, 09 Jul 2023 10:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/terraform/terraform2/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ADb5oFBqgBA4h-SDyW2D7Q.jpeg"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ADb5oFBqgBA4h-SDyW2D7Q.jpeg"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ADb5oFBqgBA4h-SDyW2D7Q.jpeg"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a
 href="https://new.sagarpanda.com/blogs/terraform/terraform-setup/"&gt;&lt;strong&gt;&lt;em&gt;In the previous article&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;, we setup tf and got familiar with it with basic example. Now lets proceed further.&lt;/p&gt;
&lt;p&gt;All configs can be found on &lt;a
 href="https://github.com/sagarkrp/Terraform_Automation"target="_blank"
 class="inline-flex items-center gap-1"
 &gt;GitHub&lt;svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/&gt;&lt;/svg&gt;
 &lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="displaying-output-in-tf"&gt;Displaying Output in TF:&lt;a href="#displaying-output-in-tf" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;For every action we create we can generate output also to be shown on the terminal.&lt;/p&gt;</description></item><item><title>Infrastructure as Code (IAC) - Automation using Terraform 101</title><link>https://new.sagarpanda.com/blogs/terraform/terraform-setup/</link><pubDate>Sun, 02 Jul 2023 10:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/terraform/terraform-setup/</guid><description>&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*fCBP8ShpFHETAU7JEenXLQ.png"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*fCBP8ShpFHETAU7JEenXLQ.png"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*fCBP8ShpFHETAU7JEenXLQ.png"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;
&lt;h2 id="what-is-terraform"&gt;What is Terraform:&lt;a href="#what-is-terraform" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Terraform is an open-source infrastructure as code (IAC) tool that helps us to safely and predictably provision and manage infrastructure in any cloud and on-prem resources in human-readable configuration files that you can version, reuse, and share.&lt;/p&gt;</description></item><item><title>Delving into the World of Deployments in Kubernetes</title><link>https://new.sagarpanda.com/blogs/k8s/deployments/</link><pubDate>Sat, 24 Jun 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/deployments/</guid><description>&lt;p&gt;In the &lt;a
 href="https://new.sagarpanda.com/blogs/k8s/k8s-intro/"&gt;previous&lt;/a&gt; article, we saw ReplicaSet, Services and touched base on deployment. In this article, we will explore deployments in more detail.&lt;/p&gt;
&lt;p&gt;As we already created deployments using the cmd line, here we’ll use yaml. We’ll combine replicaset and service config with the deployment config.&lt;/p&gt;

 &lt;blockquote
 class="border-primary bg-muted/30 hover:bg-muted/40 my-6 rounded-r-lg border-l-4 py-4 pr-4 pl-6 italic transition-all duration-200 ease-out hover:translate-x-1"
 &gt;
 &lt;div class="prose prose-sm max-w-none"&gt;
 &lt;p&gt;&lt;small&gt; Note: kctl is an shell alias for kubectl &lt;/small&gt;&lt;/p&gt;

 &lt;/div&gt;
 &lt;/blockquote&gt;&lt;script&gt;
 function toggleAlert(alertId) {
 const content = document.getElementById(alertId + "-content");
 const chevron = document.getElementById(alertId + "-chevron");
 const header = content.previousElementSibling;

 if (content.classList.contains("hidden")) {
 content.classList.remove("hidden");
 chevron.style.transform = "rotate(0deg)";
 header.setAttribute("aria-expanded", "true");
 } else {
 content.classList.add("hidden");
 chevron.style.transform = "rotate(-90deg)";
 header.setAttribute("aria-expanded", "false");
 }
 }

 
 document.addEventListener("DOMContentLoaded", function () {
 const collapsedAlerts = document.querySelectorAll(".alert-content.hidden");
 collapsedAlerts.forEach(function (content) {
 const alertId = content.id.replace("-content", "");
 const chevron = document.getElementById(alertId + "-chevron");
 if (chevron) {
 chevron.style.transform = "rotate(-90deg)";
 }
 });
 });
&lt;/script&gt;
&lt;div
 class="code-block-container border-border bg-card my-6 overflow-hidden rounded-xl border shadow-sm transition-all duration-200 ease-out hover:-translate-y-0.5 hover:shadow-md"
 data-code-block
 data-code-id="code-0"
 data-collapsible="true"
 data-default-state="expanded"
 data-collapsed="false"
 data-auto-collapse-lines="30"
 data-auto-collapse-height="400"
 data-collapsed-height="120"
&gt;
 
 &lt;div
 class="code-block-header bg-muted/30 border-border flex items-center justify-between border-b px-4 py-3"
 &gt;
 
 &lt;div class="flex items-center gap-2"&gt;
 &lt;div class="text-muted-foreground shrink-0"&gt;
 &lt;svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" /&gt;
&lt;/svg&gt;
 &lt;/div&gt;
 &lt;span class="text-muted-foreground text-sm font-medium"&gt;
 YAML
 &lt;/span&gt;
 &lt;/div&gt;

 
 &lt;div class="flex items-center gap-2"&gt;
 &lt;button
 class="collapse-code-btn text-muted-foreground hover:text-primary hover:bg-primary/10 focus:ring-primary/20 flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium transition-all duration-200 ease-out focus:ring-2 focus:outline-none"
 type="button"
 data-code-action="toggle-collapse"
 data-label-expand="Expand"
 data-label-collapse="Collapse"
 title="Collapse"
 aria-label="Collapse"
 aria-controls="code-0"
 aria-expanded="true"
 &gt;
 &lt;span class="collapse-chevron transition-transform duration-200 ease-out"&gt;
 &lt;svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /&gt;
&lt;/svg&gt;
 &lt;/span&gt;
 &lt;span class="collapse-text hidden sm:inline"&gt;Collapse&lt;/span&gt;
 &lt;/button&gt;
 &lt;button
 class="copy-code-btn text-muted-foreground hover:text-primary hover:bg-primary/10 focus:ring-primary/20 flex items-center gap-1.5 rounded-md px-2 py-1 text-xs font-medium transition-all duration-200 ease-out focus:ring-2 focus:outline-none"
 type="button"
 data-code-action="copy"
 data-label-copy="Copy"
 data-label-copied="Copied"
 title="Copy"
 aria-label="Copy"
 &gt;
 &lt;span class="copy-icon"&gt;
 &lt;svg class="h-3 w-3" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" /&gt;
&lt;/svg&gt;
 &lt;/span&gt;
 &lt;span class="copy-text hidden sm:inline"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;

 
 &lt;div class="code-block-content relative" id="code-0"&gt;
 &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;mywebapp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;annotations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kubernetes.io/change-cause&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;initial deployment&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;data&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;prodapp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;quay.io/gauravkumar9130/production:v1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;div hidden data-code-source&gt;apiVersion: apps/v1
kind: Deployment
metadata:
 name: mywebapp
 annotations:
 kubernetes.io/change-cause: &amp;#34;initial deployment&amp;#34;
spec:
 replicas: 3
 selector:
 matchLabels:
 app: data
 template:
 metadata:
 labels:
 app: data
 spec:
 containers:
 - name: prodapp
 image: quay.io/gauravkumar9130/production:v1&lt;/div&gt;
 
 &lt;div
 class="collapse-overlay to-card/90 pointer-events-none absolute inset-0 bg-linear-to-b from-transparent via-transparent opacity-0 transition-opacity duration-300"
 hidden
 &gt;
 &lt;button
 class="collapse-overlay-btn text-muted-foreground bg-card/80 border-border/50 hover:bg-primary/10 hover:text-primary hover:border-primary/30 absolute bottom-4 left-1/2 flex -translate-x-1/2 items-center justify-center rounded-full border p-2 backdrop-blur-sm transition-all duration-200"
 type="button"
 data-code-action="expand"
 aria-label="Expand"
 title="Expand"
 &gt;
 &lt;svg class="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"&gt;
 &lt;path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /&gt;
&lt;/svg&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Apply the deployment and expose the service with the load balancer type. (using the cmd line, for now, will merge later).&lt;/p&gt;</description></item><item><title>Container Orchestration: Kubernetes 101</title><link>https://new.sagarpanda.com/blogs/k8s/k8s-intro/</link><pubDate>Thu, 22 Jun 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/k8s/k8s-intro/</guid><description>&lt;h2 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;a
 href="https://kubernetes.io/docs/concepts/overview/"target="_blank"
 class="inline-flex items-center gap-1"
 &gt;Kubernetes&lt;svg class="h-3 w-3 flex-shrink-0" id="external-link" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/&gt;&lt;/svg&gt;
 &lt;/a&gt;, also known as K8s, is an open-source platform to automate deployment, scaling, and management of containerized applications or containers.&lt;/p&gt;</description></item><item><title>Ansible — Error Handling, Roles and Valult</title><link>https://new.sagarpanda.com/blogs/ansible/ansible3/</link><pubDate>Sun, 18 Jun 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/ansible/ansible3/</guid><description>&lt;p&gt;In the earlier posts, we saw how to &lt;a
 href="https://new.sagarpanda.com/blogs/ansible/ansible1/"&gt;&lt;strong&gt;&lt;em&gt;Setup Ansible&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;, &lt;a
 href="https://new.sagarpanda.com/blogs/ansible/ansible2/"&gt;&lt;strong&gt;&lt;em&gt;simple playbooks with groups, variables, conditionals and loop&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this article we’ll discuss about using Notify Handler, Roles, Error Handling and Vault in Ansible.&lt;/p&gt;
&lt;h2 id="notify-and-handler"&gt;Notify and Handler&lt;a href="#notify-and-handler" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Handler is a special task that executes when called by &lt;code&gt;notify&lt;/code&gt;keyword. The &lt;code&gt;notify&lt;/code&gt; keyword is applied to a task and accepts a list of handler names that are notified on a task change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, when we are operating on any webserver, instead of restarting the service every time we can specify the time when its required using notify and handler.&lt;/p&gt;</description></item><item><title>Ansible - Groups, Vars and Loop</title><link>https://new.sagarpanda.com/blogs/ansible/ansible2/</link><pubDate>Mon, 29 May 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/ansible/ansible2/</guid><description>&lt;p&gt;In the &lt;a
 href="https://new.sagarpanda.com/blogs/ansible/ansible1/"&gt;&lt;strong&gt;&lt;em&gt;previous article&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;, we saw how to install Ansible, ping a server and a simple playbook.&lt;/p&gt;
&lt;p&gt;In this article we’ll discuss about using groups , use of variables and loops in a playbook.&lt;/p&gt;
&lt;p&gt;This setup includes 3 machines. The controller node is a local machine where the managed nodes are two ec2 instances.&lt;/p&gt;
&lt;h2 id="inventory-groups"&gt;Inventory Groups&lt;a href="#inventory-groups" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ansible allows you to organize hosts into groups within the inventory file. Grouping hosts enables you to target specific subsets of hosts and apply different configurations or tasks based on their roles or characteristics.&lt;/p&gt;</description></item><item><title>Getting started with Ansible - Configuration Managament</title><link>https://new.sagarpanda.com/blogs/ansible/ansible1/</link><pubDate>Sun, 21 May 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/ansible/ansible1/</guid><description>&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Ansible is an open source configuration management utility. It can automate and standardize the configuration of remote hosts and virtual machines. We can perform application installation, system update and many such operations.&lt;/p&gt;
&lt;h3 id="why-use-ansible"&gt;Why use Ansible:&lt;a href="#why-use-ansible" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Ansible is very handy when it comes to installation of software on large numbers of machines. But why ansible when we can use Chef or Puppet.&lt;/p&gt;</description></item><item><title>SonarQube Setup with Jenkins</title><link>https://new.sagarpanda.com/blogs/sonarqube-jenkins/</link><pubDate>Mon, 01 May 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/sonarqube-jenkins/</guid><description>&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;SonarQube is an open-source platform used to perform continuous review and verification of code quality to detect bugs, vulnerabilities and code smells in the application.&lt;/p&gt;
&lt;p&gt;
&lt;figure
 class="image-figure not-prose my-8"
 data-lightbox-enabled="
 true
 "
 data-gallery-type="auto"
 data-image-width="0"
 data-image-height="0"
 data-image-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XIBVAu-3lA0o7rivQ4Cvug.jpeg"
&gt;
 &lt;div class="image-container"&gt;
 &lt;img
 src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XIBVAu-3lA0o7rivQ4Cvug.jpeg"
 alt="captionless image"
 
 
 loading="lazy"
 decoding="async"
 data-gallery-src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*XIBVAu-3lA0o7rivQ4Cvug.jpeg"
 data-gallery-alt="captionless image"
 data-gallery-title=""
 /&gt;&lt;/div&gt;

 &lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Load Balancing Magic — Unleashing the Potential of NGINX.</title><link>https://new.sagarpanda.com/blogs/nginx/nginx-lb/</link><pubDate>Sat, 22 Apr 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/nginx/nginx-lb/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;h3 id="what-is-nginx"&gt;What is NGINX:&lt;a href="#what-is-nginx" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;Nginx (pronounced engine x /ˌɛndʒɪnˈɛks/ EN-jin-EKS) is an open source HTTP web and reverse proxy server.&lt;/p&gt;</description></item><item><title>Docker - Build and Push operations.</title><link>https://new.sagarpanda.com/blogs/docker/docker-operations/</link><pubDate>Sun, 16 Apr 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/docker/docker-operations/</guid><description>&lt;h2 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;In the &lt;a
 href="https://new.sagarpanda.com/blogs/docker/docker-setup/"&gt;&lt;strong&gt;&lt;em&gt;previous article&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;, we saw how to install docker, in this chapter we’ll go through building our own docker image and publish it to the docker hub.&lt;/p&gt;
&lt;h2 id="lets-get-started"&gt;Lets Get Started:&lt;a href="#lets-get-started" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;To build a docker image, we need to have all the code, libraries and its dependencies to be available.&lt;/p&gt;</description></item><item><title>Docker: Containerization for beginners.</title><link>https://new.sagarpanda.com/blogs/docker/docker-setup/</link><pubDate>Sun, 16 Apr 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/docker/docker-setup/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Docker is a software platform that allows you to build, test, and deploy applications by packaging everything the application needs to run including libraries, code, and runtime.&lt;/p&gt;
&lt;p&gt;When we package the application and all its dependencies to a single unit, its called an image and when the image is used to run the application its called a container.&lt;/p&gt;</description></item><item><title>Apache HTTP Server Configurations</title><link>https://new.sagarpanda.com/blogs/apache/apache-config/</link><pubDate>Mon, 27 Mar 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/apache/apache-config/</guid><description>&lt;p&gt;In the previous post, we saw how to install and setup Apache web server. In this article we’ll see how to configure a basic web application, enable SSL/TLS and few more basic configuration in regards to security enhancements.&lt;/p&gt;
&lt;h3 id="prerequiste"&gt;Prerequiste:&lt;a href="#prerequiste" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;&lt;a
 href="https://new.sagarpanda.com/tags/apache/"&gt;Install Apache&lt;/a&gt;&lt;/p&gt;</description></item><item><title>How to install Apache HTTP web server on Linux.</title><link>https://new.sagarpanda.com/blogs/apache/apache-setup/</link><pubDate>Wed, 25 Jan 2023 19:26:10 +0530</pubDate><guid>https://new.sagarpanda.com/blogs/apache/apache-setup/</guid><description>&lt;h3 id="introduction"&gt;Introduction:&lt;a href="#introduction" class="heading-anchor" aria-label="Link to this section"&gt;&lt;svg class="h-4 w-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"&gt;&lt;path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/&gt;&lt;path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;If you ever worked with web application then you must have came across the term “Apache”. The Apache HTTP server is an open source web server.&lt;/p&gt;
&lt;p&gt;In this article we’ll take a look on how to install and configure Apache on various popular Linux distributions (Debian/Ubuntu, RHEL/Rocky Linux/Alma Linux).&lt;/p&gt;</description></item></channel></rss>