<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevOps on Sagar Panda | DevOps &amp; Cloud Infra Engineer</title><link>https://new.sagarpanda.com/tags/devops/</link><description>Recent content in DevOps 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/tags/devops/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>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>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>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>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>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>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>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>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>