<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>DevOps.Pink</title>
  <subtitle>Cloud-native education for engineers who ship</subtitle>
  <link href="https://devops.pink/" rel="alternate" type="text/html"/>
  <link href="https://devops.pink/atom.xml" rel="self" type="application/atom+xml"/>
  <id>https://devops.pink/</id>
  <updated>2026-05-12T00:00:00.000Z</updated>
  <author>
    <name>Tatiana Mikhaleva</name>
  </author>
  <entry>
    <title>AI SRE Joined My On-Call — A Beginner-Friendly Walkthrough of Rootly</title>
    <link href="https://devops.pink/ai-sre-joined-my-on-call-rootly/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/ai-sre-joined-my-on-call-rootly/</id>
    <published>2026-05-12T00:00:00.000Z</published>
    <updated>2026-05-12T00:00:00.000Z</updated>
    <summary>What an AI SRE actually does on call. A hands-on walkthrough of Rootly — how it observes, advises, and (when you let it) acts. With a real look at the four-level trust model.</summary>
    <content type="html"><![CDATA[<p>You know the feeling. You finally sat down to eat, or just closed your laptop for the night, and your phone lights up. <strong>P1. Prod is down.</strong></p>
<p>If you're new to on-call, that first incident is rough. Slack has twelve people typing. Your dashboards are a wall of red. You're flipping between logs, recent deploys, and that PR a coworker merged twenty minutes ago. Was it the deploy? The cache? CI/CD? Half the code in your stack was written by someone who left two years ago. The other half was written by an AI nobody fully audited. Welcome to modern on-call.</p>
<p>This is the gap a new category of tooling is trying to close — <strong>AI SRE</strong>. I walked through one of them, <a href="https://rootly.com">Rootly</a>, and here's the honest beginner's take.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="79dXxpiFQtY"
title="AI Just Joined Your On-Call Rotation"
/&gt;</p>
<hr />
<h2>Why "AI SRE" became a thing in 2026</h2>
<p>Three forces converged. First, microservice sprawl means no single human can hold the whole architecture in their head anymore. Second, the people who wrote half the code have moved on, taking their context with them. Third, LLMs got good enough at code reasoning that they can plausibly assemble that lost context from logs, runbooks, and past postmortems.</p>
<p>So "AI SRE" is not a buzzword for "we put a chatbot in our incident channel." It's tooling that ingests your full incident surface area — runbooks, past postmortems, Slack incident channels, IaC, application code — and helps you reason about a failure faster than you could alone.</p>
<p>The AI part is doing two specific jobs:</p>
<ol>
<li><strong>Indexing your tribal knowledge.</strong> Every postmortem you've ever written, every Slack thread where someone said "oh, this is just X again" — that's training material your AI SRE keeps loaded and searchable.</li>
<li><strong>Correlating live signals when an alert fires.</strong> Logs, metrics, recent commits, recent deploys. It pulls those together and produces a hypothesis with citations: <em>"This looks similar to incident #438 from last March, and a deploy went out 12 minutes ago that touched the same code path."</em></li>
</ol>
<p>You still decide what to do. You just skip the thirty minutes of frantic tab-switching that usually precedes any real thinking.</p>
<hr />
<h2>How Rootly handles trust: the four-level model</h2>
<p>This is the part I cared about most. AI in production sounds great in a demo and terrifying when it's actually firing on a real incident. Nobody wants an autonomous agent rolling back deploys because it pattern-matched on the wrong thing.</p>
<p>Rootly publishes an <a href="https://rootly.com/ai-sre-guide/maturity-model">AI SRE Maturity Model</a> with four explicit levels, and you adopt them progressively. The names in the docs are formal; here's the practical version:</p>
<p><strong>Level 1 — Observe.</strong> <em>(Officially: "Read-Only Copilot.")</em> The AI watches and produces context packets with verifiable hypotheses linked to evidence. It does not execute anything. This is the trust-building stage — you can challenge every conclusion, and the AI shows its work.</p>
<p><strong>Level 2 — Advise.</strong> Still part of Level 1 in the formal model, but worth calling out: the AI now suggests specific next steps with a reasoning trail. <em>"Consider rolling back deploy abc123. Here's why."</em> You still drive.</p>
<p><strong>Level 3 — Approve.</strong> <em>(Officially: "Assisted Actions With Approvals.")</em> The AI can initiate actions — rollbacks, config changes, scale-ups — but only through a workflow engine that enforces RBAC, audit logs, and verification gates. Nothing executes without a human approval click. This is where the time savings start to compound.</p>
<p><strong>Level 4 — Autonomous.</strong> <em>(Officially: "Guardrailed Autonomy for Narrow, Reversible Failure Modes.")</em> As Rootly puts it: <em>"This is not 'AI resolves incidents.' It is 'AI resolves a small number of repeatable incidents safely.'"</em> Autonomous execution applies only to allow-listed, reversible runbooks with clear preconditions and stop conditions. Most teams reach this level only for a handful of specific failure modes after months of safe operation at Level 3.</p>
<p>The philosophy underneath is what Rootly calls <strong>"human-on-the-loop"</strong> — an engineer always has the final say on critical actions, accountability stays human. That's the right framing. It's also what separates serious AI SRE products from the demoware.</p>
<hr />
<h2>What stood out beyond the trust model</h2>
<p><strong>The post-incident timeline writes itself.</strong> After an incident closes, Rootly assembles the full sequence — when the alert fired, who joined the war room, what commands were run, what was tried, what fixed it. Postmortems usually take me an hour minimum. This drops it to "review and edit."</p>
<p><strong>Citations on every recommendation.</strong> When the AI suggests a fix, it links to the past incident, runbook, or code line that informed the decision. You can challenge it. AI tools that refuse to show their work make me nervous; this one doesn't.</p>
<p><strong>Bring your own AI API key.</strong> You plug in your own LLM credentials — OpenAI, Anthropic, or a self-hosted model. Your incident data is scoped to your account. Rootly's docs are explicit: <em>"PII is automatically scrubbed and never used for training. Opt out anytime."</em> For anyone in a regulated industry, that's the difference between "evaluate" and "can't even start the conversation."</p>
<p><strong>The Rootly MCP server.</strong> This is the 2026-flavored part I didn't expect. Rootly ships an MCP (Model Context Protocol) server that plugs your incident context directly into IDEs like Cursor, Windsurf, and Claude Desktop. Mid-incident, you can ask your editor "what was the last change to the auth service?" and the answer comes from Rootly's correlation engine — without copy-pasting between five windows. If you've been following the MCP wave, this is the kind of practical integration the protocol was designed for.</p>
<p>The customer list is heavy on companies you'd recognize — NVIDIA, Canva, Webflow, Figma, LinkedIn, Replit, Grammarly, Mistral AI, Brex, DoorDash, SoFi. That's not a side-project tool; it's running production at scale.</p>
<hr />
<h2>Will it replace me?</h2>
<p>The honest answer: no, but it changes the job.</p>
<p>Junior on-call shifts today are mostly "navigate to the right dashboard, identify the obvious thing, page a senior if it's not obvious." Levels 1 and 3 of the trust model handle the navigation and the obvious things. What's left for the human is the actual judgment — <em>"is this the right rollback target," "do we communicate to customers now," "is this incident a symptom of a deeper architectural problem."</em></p>
<p>That's a better job. Less tab-juggling, more thinking. The path from junior to senior gets shorter because you spend rotation time on real decisions instead of pattern-matching against dashboards.</p>
<hr />
<h2>Who this is for</h2>
<p>If you're a solo SRE drowning in alerts, this is for you. If you're a team lead and your engineers are burning out on rotation, this is for you. If you're early in your career and want to see what production on-call actually looks like, walking through Rootly's setup is a decent way to learn what the work involves before your first real pager.</p>
<p>The promise isn't "AI replaces your on-call." It's "AI handles the busywork so the thinking part is faster." Which, after a year of false-positive alerts and broken pager rotations, is what most of us actually need.</p>
<p>If on-call is starting to hurt, <a href="https://rootly.com">Rootly</a> is worth a real evaluation. Start at Level 1 — observe-only — and see what it catches that you'd miss. You don't promote to Level 3 until you trust the Level 1 output. That's the right shape for adopting any AI tool in production.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="AI"/>
    <category term="AI Agents"/>
    <category term="MCP"/>
    <category term="SRE"/>
    <category term="Incident Response"/>
    <category term="DevOps"/>
    <category term="Beginners"/>
  </entry>
  <entry>
    <title>Stop Lying About Your Backups — Zero-Trust Recovery with Plakar</title>
    <link href="https://devops.pink/stop-lying-about-your-backups-plakar/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/stop-lying-about-your-backups-plakar/</id>
    <published>2026-02-10T00:00:00.000Z</published>
    <updated>2026-02-10T00:00:00.000Z</updated>
    <summary>Learn how to master Terraform tags for cloud resource management, automation, and cost tracking. Discover best practices, default tags, and merging strategies!</summary>
    <content type="html"><![CDATA[<p>Hey my DevOps queens (and kings, too)!</p>
<p>Let's talk. We need to have a serious heart-to-heart. Put down your coffee, close your tickets, and let's be real. We need to discuss something uncomfortable. Because I know your secret.</p>
<p><strong>You're lying.</strong></p>
<p>Every morning, you look at those green backup checkmarks and tell the business:</p>
<blockquote>
<p><em>"We are protected."</em></p>
</blockquote>
<p>But deep down... you're praying you never have to test that theory. Because you know: <strong>if prod goes down, those checkmarks won't save you.</strong></p>
<p>That's not a strategy — it's <strong>chronic fear</strong>.</p>
<p>Relax. ✨ Today, we are not fixing your services. Today, we are treating your fears. We're going to get rid of what keeps you up at night. We'll go through your traumas — point by point — and shut them down.</p>
<p>And for this, we'll use <strong>Plakar</strong>. ️</p>
<p>It's <strong>Open Source</strong>. I know that matters to you. No <em>black boxes.</em></p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="Su8USwG7tWc"
title="Stop Lying About Your Backups - DevOps Therapy"
/&gt;</p>
<hr />
<h2>1. The Fear of Recovery</h2>
<p>Your first trauma is the <strong>fear of recovery</strong>.</p>
<p>We all know the nightmare: you restore the files... but the system doesn't work. Why? Because standard backups save the data, but they <strong>lose the context</strong>.</p>
<ul>
<li>Permissions are broken</li>
<li>Timestamps are reset</li>
<li>Dependencies are gone</li>
</ul>
<p>It's pure chaos. You have the pieces, but you lost the picture. Your system has <strong>amnesia</strong>.</p>
<h3>Plakar is Digital Memory</h3>
<p>It preserves the <strong>exact state</strong>: ownership, modes, and extended attributes. The relationships between files remain intact. You simply open Plakar and restore the snapshot — <strong>fast, granular, and reliable</strong>.</p>
<hr />
<h2>2. The Trap of Dependence</h2>
<p>Let's move on. You feel <strong>dependent</strong>.</p>
<p>You keep everything in the cloud, and you know: if they hike prices tomorrow or lock your account, you can't get your data out fast. You're <strong>trapped</strong>.</p>
<p>Plakar treats this with <strong>total portability</strong>. It packs data into a <strong>Kloset</strong> — a self-contained repository.</p>
<p>You can keep it on <strong>S3 today</strong>, and tomorrow replicate snapshots to another <strong>Kloset store</strong>:</p>
<ul>
<li>Local disk</li>
<li>Another cloud provider</li>
<li>Wherever you want</li>
</ul>
<p>No format conversion. No complex migrations. The data belongs to <strong>you</strong>, not the infrastructure. <strong>You are free to choose where to live.</strong></p>
<hr />
<h2>3. Paranoia</h2>
<p>The third point is <strong>Paranoia</strong>.</p>
<p>You send data to the cloud — and often, control over where and how encryption happens isn't fully yours. You're forced to <em>take their word for it</em>.</p>
<p>But what if they get hacked? Or a rogue insider decides to peek at your files? You are handing your secrets to strangers.</p>
<h3>Client-Side Encryption</h3>
<p>Plakar does it differently. Data is encrypted <strong>on your end</strong>, at the source, before it leaves for storage. Nothing readable goes to the cloud.</p>
<p>To the outside world, it's just <strong>encrypted chunks</strong> — meaningless without your keys. You can delegate <em>storage</em> without delegating <em>access</em>. The risk of a cloud breach drops sharply.</p>
<p><strong>You are protected.</strong></p>
<hr />
<h2>4. Budget</h2>
<p>And finally — <strong>budget</strong>.</p>
<p>You look at cloud bills and realize: you're paying for air. You're storing 50 copies of the same operating system. You're paying for the same thing 50 times. Your infrastructure is bloated.</p>
<h3>Smart Deduplication</h3>
<p>Plakar cuts out the fat. It breaks files into <strong>chunks</strong>. If you have a hundred similar servers, repeated chunks aren't duplicated.</p>
<p>The result:</p>
<ul>
<li>Drastically smaller storage footprint</li>
<li>Significantly lower storage bills</li>
<li>No wasted company money</li>
</ul>
<p>And your <strong>CFO will finally be happy.</strong></p>
<hr />
<h2>The Prescription</h2>
<p>Your fears aren't just <em>"part of the job."</em> They are <strong>symptoms of outdated architecture</strong>.</p>
<p>You don't need to learn to live with the pain. You need to <strong>change the tool.</strong></p>
<p>Plakar gives you:<br />
✅ Predictable recovery<br />
✅ Independence from clouds<br />
✅ Real privacy<br />
✅ Smart savings</p>
<p>Our session is over for today. Try <strong><a href="https://github.com/PlakarKorp/plakar">Plakar</a></strong> and finally start sleeping peacefully.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="DevSecOps"/>
    <category term="Security"/>
    <category term="DevOps"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title>Escaping the Command Line Cartel: Why I Mandate Visual Git in Enterprise DX</title>
    <link href="https://devops.pink/gitkraken-visual-dx/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/gitkraken-visual-dx/</id>
    <published>2026-01-15T00:00:00.000Z</published>
    <updated>2026-01-15T00:00:00.000Z</updated>
    <summary>Relying purely on the terminal is a toxic DX dependency. Discover how architecting visual version control with GitKraken eliminates cognitive load, enforces psychological safety, and scales enterprise DevOps.</summary>
    <content type="html"><![CDATA[<p>Today, I want to talk about the elephant in the server room: the romanticization of the CLI.</p>
<p>For years, relying purely on the terminal has been worn as a badge of honor in engineering. But if we evaluate it strictly as a Developer Experience (DX) framework, the terminal often behaves like a toxic dependency. We suffer through endless flags, fear pressing <strong>Enter</strong> on a force push, and accept the massive cognitive drain simply because <em>“that's how real engineers do it.”</em> This is gatekeeping, not architecture. True engineering prioritizes safety, speed, and absolute clarity. That's why I completely overhauled my version control workflow and integrated <strong>GitKraken</strong> as my primary Git interface.</p>
<p>Here is the architectural breakdown of why visual DX is fundamentally superior to the terminal.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="BGGX3UW4jMM"
title="GitKraken vs Git CLI: Best Git GUI for DevOps in 2026"
/&gt;</p>
<hr />
<h2>1. High-Signal Telemetry (Total Honesty)</h2>
<p>The terminal obscures the narrative. To understand the history of a complex repository, you have to interrogate it with <code>git log</code> and attempt to visualize the multi-branch commit tree entirely in your head.</p>
<p>GitKraken provides immediate, high-signal telemetry. The commit graph is visually absolute—every branch, every merge, and every pivot is mapped out in front of you. It's not just a GUI; it is an auditable, honest map of your engineering truth. You see exactly who did what, and why, without typing a single query.</p>
<hr />
<h2>2. Tactile Architecture &amp; Frictionless Workflows</h2>
<p>In the CLI, you are typing abstract spells into a black box. There is a profound disconnect between the command and the architecture.</p>
<p>GitKraken transforms version control into a tactile experience. If I need to merge or rebase, I don't rely on rote memorization of syntax. I grab the branch and visually pull it onto another. <strong>Drag. And. Drop.</strong> It removes the friction between intention and execution, allowing me to interact with the codebase with zero latency.</p>
<hr />
<h2>3. Adult Conflict Resolution</h2>
<p>In a standard CLI workflow, resolving a complex merge conflict is an exercise in stress management. The terminal presents a wall of text, and one wrong keystroke can break the build.</p>
<p>GitKraken reframes this into an analytical, structured conversation with the code. The visual merge conflict editor is a masterclass in DX:</p>
<ul>
<li>I see my version.</li>
<li>I see the incoming version.</li>
<li>I see the output.</li>
</ul>
<p>A few clicks to select what stays and what goes. No panic. No broken syntax. Just a calm, resolved deployment.</p>
<hr />
<h2>4. Psychological Safety (The Magic Button)</h2>
<p>Enterprise infrastructure requires strict guardrails. We all make mistakes, and in the terminal, a bad commit feels catastrophic.</p>
<p>GitKraken introduces the ultimate layer of psychological safety: the <strong>Undo</strong> button. If I drop a stash, mess up a rebase, or commit to the wrong branch, I click one button, and the state is perfectly restored. Knowing that I have an immediate rollback mechanism fundamentally shifts how aggressively and confidently I can code.</p>
<hr />
<h2>5. Ecosystem Interoperability</h2>
<p>A tool's value is defined by its ecosystem. GitKraken doesn't exist in a vacuum; it acts as an interoperability hub.</p>
<p>It natively integrates with Jira, GitHub, and GitLab, centralizing the context so I don't have to jump between ten different browser tabs. More importantly, through <strong>GitLens in VS Code</strong>, the visual context follows me directly into my IDE. It provides inline telemetry—showing exactly who authored a line and when—quietly providing context right when I need it.</p>
<hr />
<h2>The Executive Verdict</h2>
<p>Beautiful, intuitive, and relentlessly efficient. It handles merge conflicts visually, integrates seamlessly across the enterprise stack, and actively mitigates human error.</p>
<p><strong>Does your terminal do that?</strong></p>
<p>If you are ready to stop fighting your tools and upgrade your Developer Experience, use my strategic alliance link below to deploy GitKraken.</p>
<p><strong><a href="https://gitkraken.cello.so/an1FhNXzY8k">Deploy GitKraken Pro (50% Executive Subsidy) -&gt;</a></strong></p>
<p>Join the conversation in the <strong><a href="https://devops.army/">Discord Syndicate</a></strong>: are you staying loyal to the terminal, or are you ready to upgrade your architecture?</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Git"/>
    <category term="Developer Experience"/>
    <category term="Version Control"/>
    <category term="Best Practices"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title>Kubernetes Is No Longer Number One — The REAL 2025 Cloud Native Report (CNCF x SlashData)</title>
    <link href="https://devops.pink/kubernetes-no-longer-number-one-2025-cloud-native-report/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/kubernetes-no-longer-number-one-2025-cloud-native-report/</id>
    <published>2025-11-30T00:00:00.000Z</published>
    <updated>2025-11-30T00:00:00.000Z</updated>
    <summary>Kubernetes is no longer number one. The 2025 CNCF x SlashData report reveals the real cloud-native trends — backend growth, DevOps adoption, AI gaps, and the technologies developers actually use.</summary>
    <content type="html"><![CDATA[<p>Hey my cloud-native queens, kings, and everyone shipping to production in between.</p>
<p>In this article, we're going to walk through the key facts from the 2025 “State of Cloud Native” <a href="https://www.cncf.io/wp-content/uploads/2025/11/cncf_report_stateofcloud_111025a.pdf">report by CNCF and SlashData</a>.</p>
<p>Here's the main spoiler: <strong>Kubernetes is NO LONGER the most interesting number.</strong></p>
<p>While everyone's chasing K8s, the real action is somewhere else.</p>
<p>This data is based on <strong>over 12,000 developers from 128 countries</strong>, collected between June and July 2025, with a breakdown by role: backend, DevOps, ML/AI, IoT, and games.</p>
<p>Let's get straight to the facts.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="tBK5rA8xvTc"
title="Kubernetes Is No Longer 1 — The REAL 2025 Cloud Native Report (CNCF x SlashData)"
/&gt;</p>
<hr />
<h2>Finding Number One: Backend won</h2>
<p><strong>56% of backend developers are now cloud native.</strong></p>
<p>In absolute numbers, that's <strong>15.6 million cloud-native developers</strong>, and <strong>9.3 million of them are backend</strong>.</p>
<p>Why does this matter?
Because backend teams carry the weight for APIs, observability, microservices, CI/CD, and service ownership.</p>
<p>If you're building a platform, build it for backend and DevOps — not for “everyone in general”.</p>
<p><strong>Backend + DevOps is the new core of the cloud-native community.</strong></p>
<hr />
<h2>Finding Number Two: AI is not that cloud native</h2>
<p>You might expect AI/ML to be all-in on the cloud and GPUs — but <strong>only 41% of ML/AI professionals are cloud native.</strong></p>
<p>One big reason, according to the report, is the heavy use of MLaaS — managed services that abstract away the underlying infrastructure.</p>
<p>AI models keep scaling, but the classic DevOps discipline — logs, versioning, deployments — often lags behind.</p>
<p>For DevOps, SREs, and Platform Engineers, that's a huge window of opportunity:
bring proper engineering hygiene into MLOps — real pipelines, versioned environments, logs, and managed clusters.</p>
<hr />
<h2>Finding Number Three: What's really being used</h2>
<p>The most widely used cloud-native technologies are not exotic at all. They're very down-to-earth:</p>
<ul>
<li>API gateways — <strong>50%</strong></li>
<li>Microservices — <strong>46%</strong></li>
<li>Kubernetes — <strong>28%</strong></li>
<li>Observability — <strong>28%</strong></li>
</ul>
<p>Observability (28%) has now <strong>caught up to Kubernetes (28%)</strong>.
“Just running it” is no longer enough — everyone understands you have to <strong>see</strong> what's going on, too.</p>
<p>And then there's service mesh: <strong>8%.</strong> Eight percent.
The hype made it sound like 80.</p>
<p>So the world isn't living in “service mesh everywhere”. It's living in:</p>
<blockquote>
<p>just give me a solid gateway, logs, and orchestration.</p>
</blockquote>
<p>If you're building a product for DevOps, aim for this reality — not for super-exotic architectures almost nobody runs.</p>
<hr />
<h2>What to do with this data</h2>
<p>If you're an architect, a DevOps team lead, or building a platform, here's what this report is really telling you:</p>
<ul>
<li>
<p><strong>Go backend- and DevOps-first.</strong>
These two groups are the most cloud-native in the report. This is where you bring IDPs, artifact repositories, and policy-as-code.</p>
</li>
<li>
<p><strong>Support hybrid.</strong>
30% of all developers are on hybrid cloud, 23% are multi-cloud. Your networking, secrets, and observability need to span everything, not just a single provider.</p>
</li>
<li>
<p><strong>Bring ML teams up to code.</strong>
If you have ML folks in-house, give them the same level of engineering hygiene as your production teams: versioned environments, pipelines, logs, clusters, and proper deployments.</p>
</li>
<li>
<p><strong>Don't over-engineer.</strong>
The mainstream stack is this combo: API gateways, microservices, Kubernetes, plus observability — not some universal service mesh everywhere. This is a mature, understandable stack where you can actually ship and make money.</p>
</li>
</ul>
<hr />
<h2>Final verdict</h2>
<p>Cloud native is now mainstream for backend and DevOps — and AI is just playing catch-up.</p>
<p>How does this look in your company or team?
Do these numbers match your reality, or is your stack going in a different direction?</p>
<p>Share your experience in the comments — I'm genuinely curious to see how this data maps to real life.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Kubernetes"/>
    <category term="Cloud Computing"/>
    <category term="DevOps"/>
  </entry>
  <entry>
    <title>Amazon Q - The AI DevOps Tool That Fixes AWS Headaches</title>
    <link href="https://devops.pink/amazon-q-the-ai-devops-tool-that-fixes-aws-headaches/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/amazon-q-the-ai-devops-tool-that-fixes-aws-headaches/</id>
    <published>2025-11-10T00:00:00.000Z</published>
    <updated>2025-11-10T00:00:00.000Z</updated>
    <summary>Amazon Q is AWS&apos;s AI assistant that helps DevOps engineers fix cloud issues faster with smart, context-aware insights and automation.</summary>
    <content type="html"><![CDATA[<p>You know that feeling when something breaks in AWS and no one knows why?</p>
<p>Yeah - today's post is about fixing that.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="4Ke8eQWKfzs"
title="Amazon Q - The AI DevOps Tool That Fixes AWS Headaches"
/&gt;</p>
<h2>Meet Amazon Q</h2>
<p>An AI assistant, built right into AWS. Marketed as your new cloud teammate.</p>
<p>But it's not just here to chat. It's here to help.</p>
<p>Not “Hello, World,” but more like:</p>
<blockquote>
<p>“Why does your IAM keep blocking Lambda again?”</p>
</blockquote>
<p>It looks at your setup. Your permissions. Your infrastructure.</p>
<p>It's like having a senior AWS engineer trapped inside your console - and you get to say:</p>
<blockquote>
<p>“Please explain why nothing works. Again.”</p>
</blockquote>
<p>And honestly? Sometimes it's more helpful than that coworker who answers three days later… and still not on topic.</p>
<hr />
<h2>How It Works in Real Life</h2>
<p>Sounds great, right? But how does it look in real life?</p>
<p>Here are a few examples everyone who's touched AWS will recognize.</p>
<h3>Example 1: The Silent Lambda</h3>
<p>You try to run a Lambda - nothing happens.</p>
<p>No errors. No logs. Just… silence.</p>
<p>You start guessing: wrong trigger? Bad permissions?</p>
<p>Q checks your config, IAM, event sources - and says:</p>
<blockquote>
<p>“Missing permission here. Add this - and you're good to go.”</p>
</blockquote>
<h3>Example 2: Building a VPC</h3>
<p>You want to spin up a VPC with NAT and two subnets.</p>
<p>Normally: 30 minutes of Googling and a hundred lines of YAML-induced headache.</p>
<p>Q just says:</p>
<blockquote>
<p>“Here's the template. One click - done.”</p>
</blockquote>
<h3>Example 3: Route 53 DNS Setup</h3>
<p>Need to configure DNS in Route 53.</p>
<p>You open the console and feel like it's day one in AWS.</p>
<p>Q doesn't throw 10 outdated forum links at you - it explains what to do, why it matters, and helps you understand the steps - though you'll still need to describe your setup.</p>
<hr />
<h2>Who Amazon Q Helps</h2>
<p>Q helps not only those drowning in IAM configs or forgetting how to YAML.</p>
<ul>
<li>New to AWS? Q will explain where you got stuck - and why.</li>
<li>Experienced? It'll save you a couple of hours a day.</li>
<li>Working in a team? Fewer sync calls. More releases. Less pain.</li>
</ul>
<p>Q's always got your back.</p>
<hr />
<h2>ChatGPT vs Amazon Q</h2>
<p>But what about ChatGPT? It knows everything too, right?</p>
<p>Well… not your account. ChatGPT gives you theory. Q gives you context.</p>
<p>It's like giving ChatGPT access to your AWS console - and saying:</p>
<blockquote>
<p>“Just don't break anything.”</p>
</blockquote>
<hr />
<h2>A Few Things to Keep in Mind</h2>
<p>Still, there are a few things to keep in mind:</p>
<ul>
<li>Some features are still in Preview</li>
<li>It's not available in every region yet - but works in <code>us-east-1</code>, <code>us-west-2</code>, and <code>eu-central-1</code></li>
<li>Complex setup? You'll still need to get hands-on</li>
<li>Working with Terraform or other IaC? Q works best in your editor or CLI, not just clicking around in the console</li>
</ul>
<hr />
<h2>Final Thoughts</h2>
<p>But here's the deal:</p>
<p>This is the first AI tool that actually helps DevOps engineers - not with theory, but with real, practical answers.</p>
<p>And not just for those who read AWS docs like bedtime stories. Q gets things done.</p>
<p>So now there's only one question:</p>
<blockquote>
<p>“Will you try it - or keep debugging IAM on Saturdays?”</p>
</blockquote>
<hr />
<h2>Join the Conversation</h2>
<p>If you found this article helpful - give it a share</p>
<p>Subscribe if you want more DevOps, cloud, and automation content - and join our Discord (link's in the description).</p>
<p>And tell me in the comments:<br />
<strong>What's the one AWS thing that always trips you up?</strong></p>
<p>Maybe Q already knows how to fix it</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="AWS"/>
    <category term="DevOps"/>
    <category term="AI"/>
    <category term="Amazon Q"/>
    <category term="Cloud Computing"/>
  </entry>
  <entry>
    <title>Inside Helm - How Charts, Releases, and State Work in Kubernetes</title>
    <link href="https://devops.pink/inside-helm-how-charts-releases-and-state-work-in-kubernetes/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/inside-helm-how-charts-releases-and-state-work-in-kubernetes/</id>
    <published>2025-11-09T00:00:00.000Z</published>
    <updated>2025-11-09T00:00:00.000Z</updated>
    <summary>Learn how Helm really works under the hood — charts, releases, and Kubernetes state management explained in plain DevOps language.</summary>
    <content type="html"><![CDATA[<p><strong>Hey my DevOps queens (and kings, too)!</strong></p>
<p>If you've ever deployed an app to Kubernetes and thought, “Wait… what actually happens after I type <code>helm install</code>?” — this one's for you.</p>
<p>Helm makes Kubernetes deployments look easy. But behind the scenes, it's doing a lot more than just rendering YAML files. It's a <strong>stateful release manager</strong> that tracks every change, stores versioned state <strong>inside your cluster</strong>, and handles upgrades intelligently — no external database required.</p>
<p>Today, let's pull back the curtain and see how Helm actually works: how charts are structured, where your release data lives, and how Helm keeps everything consistent and versioned like a pro.</p>
<hr />
<h2>What's Inside a Helm Chart</h2>
<p>A Helm chart is a package that describes how your app should be deployed to Kubernetes. It's structured, predictable, and — if you do it right — beautifully reusable.</p>
<pre><code>my-chart/
  Chart.yaml              # metadata (name, version, dependencies, etc.)
  values.yaml             # default configuration values
  templates/              # Go templates for Kubernetes manifests
    _helpers.tpl          # reusable named templates and functions
  charts/                 # subcharts (dependencies)
  files/                  # arbitrary files used in templates
  crds/                   # CustomResourceDefinitions (installed first)
  .helmignore             # like .gitignore for packaging
</code></pre>
<p>Think of it as your app blueprint — flexible through <code>values.yaml</code> and easily overridden at deploy time.</p>
<p><strong>Pro tip:</strong> CRDs in the <code>crds/</code> directory are:</p>
<ul>
<li>installed <strong>first</strong>,</li>
<li><strong>not templated</strong>,</li>
<li>and <strong>never upgraded or deleted</strong> — this protects existing Custom Resources and data.</li>
</ul>
<hr />
<h2>What Actually Happens When You Run helm install</h2>
<p>Let's break it down. When you run <code>helm install</code>, Helm doesn't just “apply some YAML.” It follows a clear sequence:</p>
<ul>
<li><strong>Loads</strong> the chart (local or remote).</li>
<li><strong>Merges values</strong> from multiple sources:
<ul>
<li>base <code>values.yaml</code>;</li>
<li>any additional files: <code>-f base.yaml -f prod.yaml</code> (left-to-right; later overrides earlier);</li>
<li>inline flags: <code>--set</code>, <code>--set-string</code>, <code>--set-file</code>, <code>--set-json</code> (these always take precedence).</li>
</ul>
</li>
<li><strong>Renders</strong> Go templates into complete Kubernetes manifests.</li>
<li><strong>Applies</strong> them to the cluster.</li>
</ul>
<p>On a clean install, Helm creates the resources.</p>
<p>If resources already exist and contain the correct Helm annotations (<code>meta.helm.sh/*</code>, <code>app.kubernetes.io/managed-by=Helm</code>), Helm will <em>adopt</em> them. Otherwise, you'll see:</p>
<pre><code>Error: invalid ownership metadata
</code></pre>
<p>During <strong>upgrades</strong> or <strong>rollbacks</strong>, Helm performs a <strong>three-way strategic merge</strong> — comparing the previous manifest, the new manifest, and the current cluster state — handled client-side through <code>client-go</code>.</p>
<hr />
<h2>Where Helm Stores Release State</h2>
<p>Every Helm release is stored <strong>inside your cluster</strong>. No external DBs, no magic.</p>
<p>By default, Helm saves release info in a Kubernetes <strong>Secret</strong>, though you can switch to a <strong>ConfigMap</strong> or <strong>SQL</strong> driver (PostgreSQL).</p>
<p><strong>Default object structure:</strong></p>
<pre><code class="language-yaml">kind: Secret
type: helm.sh/release.v1
metadata:
  name: sh.helm.release.v1.&lt;release&gt;.v&lt;revision&gt;
  namespace: &lt;release-namespace&gt;
</code></pre>
<p>The <code>.data.release</code> field contains a base64-encoded, gzip-compressed blob with:</p>
<ul>
<li>the <strong>chart archive</strong>,</li>
<li>rendered manifests,</li>
<li>merged values,</li>
<li>hooks,</li>
<li>and release metadata (revision, timestamps, status).</li>
</ul>
<p>Because Secret data is base64-encoded by Kubernetes — and the release payload also includes encoded sections — the result is effectively <em>nested encoding</em>.</p>
<p><strong>Heads up:</strong> etcd enforces a ~1 MiB limit for Secret data. If you hit:</p>
<pre><code>Too long: must have at most 1048576 characters
</code></pre>
<p>switch to SQL storage:</p>
<pre><code class="language-bash">export HELM_DRIVER=sql
export HELM_DRIVER_SQL_CONNECTION_STRING=postgresql://user:pass@host/db
</code></pre>
<hr />
<h2>Labels and Annotations</h2>
<p>Helm labels everything it manages to track ownership precisely.</p>
<p><strong>Added automatically:</strong></p>
<pre><code>app.kubernetes.io/managed-by=Helm
meta.helm.sh/release-name=&lt;release-name&gt;
meta.helm.sh/release-namespace=&lt;namespace&gt;
</code></pre>
<p><strong>Best-practice labels</strong> (usually added by chart templates):</p>
<pre><code>app.kubernetes.io/instance=&lt;release-name&gt;
helm.sh/chart=&lt;chart-name&gt;-&lt;version&gt;
</code></pre>
<p>If these don't match during an upgrade, Helm will refuse ownership — hence the classic <code>invalid ownership metadata</code> error.</p>
<hr />
<h2>What Is a Helm Release?</h2>
<p>A <strong>release</strong> is one installed instance of a chart with a specific set of values (in a namespace).</p>
<p>Each change — install, upgrade, rollback — becomes a <strong>new revision</strong> stored right in your cluster. No external database. No API extension. Just Kubernetes objects doing their job.</p>
<hr />
<h2>The Three-Way Merge Explained</h2>
<p>When you upgrade, Helm compares:</p>
<ul>
<li>the <strong>previous</strong> rendered manifest,</li>
<li>the <strong>new</strong> manifest (after your changes),</li>
<li>the <strong>current live</strong> resources.</li>
</ul>
<p>Then it calculates a <strong>three-way strategic merge patch</strong> and applies only what changed — reducing disruption and preserving manual tweaks where possible.</p>
<p>:::note
This logic runs <strong>client-side</strong>, not via Server-Side Apply. For CRDs or unstructured resources, Kubernetes uses JSON merge-patch, which can behave slightly differently.
:::</p>
<hr />
<h2>Namespaces: Release vs Target</h2>
<p>Helm separates namespaces into two categories:</p>
<ul>
<li><strong>Release namespace</strong> — where Helm stores its Secret or ConfigMap.</li>
<li><strong>Target namespaces</strong> — where chart resources are deployed (can be multiple).</li>
<li><code>--create-namespace</code> only creates the <strong>release namespace</strong> (the one you pass with <code>--namespace</code>).</li>
</ul>
<p>If your chart deploys across namespaces, create them manually or template them inside your chart.</p>
<p><strong>Tip:</strong> Avoid hardcoding <code>metadata.namespace</code> unless you really need to — otherwise <code>helm template | kubectl apply</code> might push resources to <code>default</code>.</p>
<hr />
<h2>Storage Drivers</h2>
<p>Helm supports multiple backends for storing release state:</p>
<pre><code class="language-bash">export HELM_DRIVER=secret      # default (encoded, secure)
export HELM_DRIVER=configmap   # readable, not encrypted
export HELM_DRIVER=sql         # PostgreSQL – best for large releases
export HELM_DRIVER=memory      # ephemeral, for tests only
</code></pre>
<hr />
<h2>Managing Release History</h2>
<p>Helm keeps <strong>all revisions</strong> unless you limit it. You can cap history like this:</p>
<pre><code class="language-bash">helm upgrade --history-max 10 ...
export HELM_MAX_HISTORY=10
</code></pre>
<p>Explore release history anytime:</p>
<pre><code class="language-bash">helm history &lt;release&gt;
helm get values &lt;release&gt;
helm get manifest &lt;release&gt;
</code></pre>
<hr />
<h2>TL;DR</h2>
<p>Helm isn't magic — it's clean engineering. Behind every <code>helm install</code>, it:</p>
<ul>
<li>loads, merges, and renders templates,</li>
<li>stores state inside your cluster,</li>
<li>tags resources for ownership tracking,</li>
<li>applies <strong>three-way strategic merges</strong> on upgrade,</li>
<li>manages revisions — all with <strong>zero external dependencies</strong>.</li>
</ul>
<p>Once you understand how Helm really works, it stops feeling mysterious and starts feeling like your favorite DevOps assistant.</p>
<hr />
<h2>Quick Debug Tip</h2>
<pre><code class="language-bash">helm ls -A
kubectl get secrets -A -l "owner=helm" -l "status=deployed"
</code></pre>
<p>Perfect for quick audits or just checking what Helm has been managing lately.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Kubernetes"/>
    <category term="Helm"/>
    <category term="DevOps"/>
    <category term="IaC"/>
    <category term="Cloud Native"/>
  </entry>
  <entry>
    <title>Git Merge Conflicts for Beginners - What to Do When Your Branches Have Beef</title>
    <link href="https://devops.pink/git-merge-conflicts-for-beginners-what-to-do-when-your-branches-have-beef/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/git-merge-conflicts-for-beginners-what-to-do-when-your-branches-have-beef/</id>
    <published>2025-07-14T00:00:00.000Z</published>
    <updated>2025-07-14T00:00:00.000Z</updated>
    <summary>Learn how to fix Git merge conflicts step-by-step. A fun, beginner-friendly guide to resolving and avoiding conflict errors in your branches.</summary>
    <content type="html"><![CDATA[<p>Hey queens! ✨</p>
<p>Okay, so picture this: you've been hustling for days on a sick new feature in your own cozy little branch. The code is flawless, everything works perfectly, and you're ready to share your masterpiece with the world (or, you know, the main branch). You proudly type out that magic <code>git merge</code> command and… oops!</p>
<p>Git literally screams at you: "CONFLICT! I have no idea what to keep!"
Sound familiar? The first instinct is full-on panic mode. You just want to slam your laptop shut and pretend it never happened. But wait! Don't freak out. We're gonna walk through this together, and I'll spill all the tea.</p>
<hr />
<h2>Wait, What Even Is <code>git merge</code>?</h2>
<p>Let's break it down. When you're working on a project, you create branches, which are basically parallel universes for your code. You can do whatever you want in your own branch without messing up the main project. It's your personal creative space.</p>
<p>And <code>git merge</code> is the command that brings your universe back into the main timeline.</p>
<p>For example:</p>
<pre><code class="language-bash">git checkout main
git merge feature/new-login
</code></pre>
<p>This is literally you telling Git, "Hey, take all the awesome stuff I built in <code>feature/new-login</code> and add it to the main branch, please!"</p>
<hr />
<h2>When It's a Buttery-Smooth Ride</h2>
<h3>(The Fast-Forward Merge)</h3>
<p>If you and your teammates were working on totally different files, Git is a total genius. It will seamlessly combine everything on its own, and you won't even notice. Pure magic! ✨</p>
<p>Technically, this is called a <strong>Fast-Forward Merge</strong>. It happens when the <code>main</code> branch hasn't had any new commits since you created your branch. Git just "fast-forwards" the main pointer to include all your new commits.</p>
<p>Sometimes, to keep a clear history, developers force Git to create a merge "knot" even when it could fast-forward. This is done with:</p>
<pre><code class="language-bash">git merge --no-ff feature/new-login
</code></pre>
<p>…and it leaves a nice little note in the project history saying, "This feature was merged right here."</p>
<hr />
<h2>When Git Has a Meltdown (aka a Conflict)</h2>
<p>A conflict happens when you and someone else (or even you in a different branch) changed the exact same line of code in different ways. Git gets totally overwhelmed. It looks at the two versions and can't decide which one is right. It's basically looking at you like, "OMG, girl, I can't decide. You have to choose!"</p>
<hr />
<h2>What This Hot Mess Looks Like in Your Code</h2>
<p>You open the file, and boom — Git greets you with something like this:</p>
<pre><code class="language-text">&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
The version of the code from the main branch
=======
The version of the code from your new feature/new-login branch
&gt;&gt;&gt;&gt;&gt;&gt;&gt; feature/new-login
</code></pre>
<p>Don 't panic!</p>
<p>This isn 't an error — it 's Git 's way of saying:</p>
<p><em>"Hey, I found two different versions of this code and I don 't know which one to keep. Can you help me out?"</em></p>
<p>Here 's what those weird lines mean:</p>
<ul>
<li><strong><code>&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD</code></strong> - This is what 's currently in your <code>main</code> branch.</li>
<li><strong><code>=======</code></strong> - This line separates the two versions.</li>
<li><strong><code>&gt;&gt;&gt;&gt;&gt;&gt;&gt; feature/new-login</code></strong> - And this is the version coming from your branch.</li>
</ul>
<hr />
<h2>Okay, So How Do I Fix This? A Step-by-Step Guide!</h2>
<ol>
<li><strong>Breathe!</strong> You've got this.</li>
<li><strong>Analyze the code.</strong> Take a look at both versions. Which one do you need? Maybe you need a little bit of both? The final decision is all yours.</li>
<li><strong>Edit the file.</strong> Just delete the code you don't want and leave only the code that should be there.</li>
<li><strong>Delete the markers.</strong> You have to get rid of the <code>&lt;&lt;&lt;&lt;&lt;&lt;&lt;</code>, <code>=======</code>, and <code>&gt;&gt;&gt;&gt;&gt;&gt;&gt;</code> lines. They've served their purpose.</li>
<li><strong>Save the file.</strong></li>
</ol>
<p>And that's it! The conflict in the code is officially resolved.</p>
<hr />
<h2>The Final Steps: Letting Git Know You're a Genius</h2>
<p>Now you just have to tell Git that you've handled it and everything is okay:</p>
<p><strong>Tell Git you've resolved the conflict in this file</strong></p>
<pre><code class="language-bash">git add &lt;filename&gt;
</code></pre>
<p><strong>Finalize the merge with a commit</strong></p>
<pre><code class="language-bash">git commit
</code></pre>
<p>Git will usually pop up a pre-written commit message for you. You can totally just use that.</p>
<p>And you're done! The merge is complete, and your amazing new feature is safe and sound in the main branch!</p>
<hr />
<h2>SOS! What If I Messed Everything Up?</h2>
<p>If you started fixing a conflict and suddenly realized you're in way over your head, don't worry! There's an escape button:</p>
<pre><code class="language-bash">git merge --abort
</code></pre>
<p>This command will completely cancel the merge, like it never even happened. Your project will go right back to how it was before you started. You can take a breath and try again when you're ready.</p>
<hr />
<h2>How to Vibe with merge and Avoid Conflicts</h2>
<ul>
<li><strong>Always stay updated!</strong> Before you start working on a new feature, always update your <strong>main</strong> branch. The safest way is a two-step: run <strong>git fetch</strong> (which just downloads the latest changes without touching your code) and then <strong>git merge origin/main</strong> (to apply those changes). This seriously lowers the chances of a conflict.</li>
<li><strong>Stay in your own lane.</strong> If you can, try to work on different files than your teammates.</li>
<li><strong>Communicate!</strong> This is the biggest one. Actually talk to your team about who's working on what. A good convo is the key to a conflict-free life.</li>
</ul>
<hr />
<h2>The Takeaway</h2>
<p>Git conflicts are not the end of the world. They're totally normal. It doesn't mean you're a bad developer. It's just Git's way of saying, "Hey! I've got two different things here—can you help me choose?"</p>
<p>And now you know exactly how to help. Honestly? You're already one step closer to feeling like a total pro in Git.</p>
<p>**Keep coding, girl! You're killing it! **</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Git"/>
    <category term="Version Control"/>
    <category term="Troubleshooting"/>
    <category term="Beginners"/>
  </entry>
  <entry>
    <title>Git Branches - How to Not Break Prod and Stay Alive</title>
    <link href="https://devops.pink/git-branches-how-to-not-break-prod-and-stay-alive/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/git-branches-how-to-not-break-prod-and-stay-alive/</id>
    <published>2025-06-16T00:00:00.000Z</published>
    <updated>2025-06-16T00:00:00.000Z</updated>
    <summary>Learn Git branches the modern way. A clear 2025 guide to branching, merging, rebasing, and collaborating—without breaking production.</summary>
    <content type="html"><![CDATA[<p>Hey queens. You're building stuff. Pushing code. Shipping features.</p>
<p>And then someone says:</p>
<p>“Just create a branch for that.”</p>
<p>Wait — a what?</p>
<p>Let's be real. Git can feel like sorcery at first. Branches? Rebases? Merge commits? Upstream what?</p>
<p>But here's the truth:</p>
<p><strong>Branches are not scary.</strong> They're your safety net. Your creative zone. Your undo button.</p>
<p>They let you try bold things without risking production.</p>
<p>They help teams build fast — and stay sane.</p>
<p>This guide breaks it down, step by step.</p>
<p>No buzzwords. No hand-waving. Just real Git, the way developers actually use it in 2025.</p>
<p>Let's start from the core idea — what even is a branch?</p>
<hr />
<h2>What's a Branch, Really?</h2>
<p>A <strong>branch</strong> is a pointer (a variable) that references a commit.</p>
<p>In practice, it's a parallel version of your codebase where you can work safely — nothing affects <code>main</code> until you decide it's ready.</p>
<p>Branches give you:</p>
<ul>
<li>freedom to experiment,</li>
<li>a clean commit history,</li>
<li>protection from disaster,</li>
<li>and a solid setup for teamwork.</li>
</ul>
<hr />
<h2>How to Work with Branches - Step by Step</h2>
<h3>1. Create a New Branch and Switch to It</h3>
<p><strong>Modern way (Git ≥ 2.23):</strong></p>
<pre><code class="language-bash">git switch -c feature/signup
</code></pre>
<ul>
<li><code>switch</code> is a modern, more readable alternative to <code>checkout</code>.</li>
<li><code>-c</code> means “create a new branch.”</li>
</ul>
<p><strong>Classic way (still valid):</strong></p>
<pre><code class="language-bash">git checkout -b feature/signup
</code></pre>
<p><strong>Tip:</strong> Use meaningful, kebab-case names with prefixes like: <code>feature/signup</code>, <code>bugfix/fix-login</code>, <code>hotfix/crash-on-submit</code>, <code>release/v1.3.0</code></p>
<h3>2. Do Some Work: Commit &amp; Push</h3>
<p>Example:</p>
<pre><code class="language-bash">echo "Sign-up logic" &gt; signup.js
git add signup.js
git commit -m "Add sign-up logic"
git push -u origin feature/signup
</code></pre>
<ul>
<li><code>-u</code> sets the upstream branch so future <code>git push</code> and <code>git pull</code> work without arguments.</li>
</ul>
<p>After this, you can simply use <code>git push</code> and <code>git pull</code> without specifying branch names.</p>
<h3>3. See What Branch You're In</h3>
<pre><code class="language-bash">git branch
</code></pre>
<ul>
<li>The current branch is marked with a <code>*</code>.</li>
</ul>
<p>To create a branch without switching:</p>
<pre><code class="language-bash">git branch feature/experiment
</code></pre>
<p>Quick jump back to the previous branch:</p>
<pre><code class="language-bash">git switch -
</code></pre>
<p>Super handy when jumping between <code>main</code> and a feature branch.</p>
<h3>4. Switch Back to main and Update It</h3>
<pre><code class="language-bash">git switch main
git pull --ff-only origin main
</code></pre>
<p><strong>Important:</strong></p>
<ul>
<li>Run this from the <code>main</code> branch.</li>
<li>If you have local commits, Git will stop politely — preventing accidental overwrites.</li>
</ul>
<h3>5. Merge Your Branch into main</h3>
<p><strong>Standard merge:</strong></p>
<pre><code class="language-bash">git merge feature/signup
</code></pre>
<p>If <code>main</code> hasn't changed since you branched off, Git performs a fast-forward — just moves the pointer.</p>
<p><strong>Want to preserve a visible merge commit?</strong></p>
<pre><code class="language-bash">git merge --no-ff feature/signup
</code></pre>
<p>Great for tracking feature branches in project history or pull requests.</p>
<h3>6. Handling Merge Conflicts</h3>
<p>If Git reports a conflict:</p>
<ol>
<li>
<p>Open the file and look for:</p>
<pre><code class="language-text">&lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD
code from main
=======
code from your branch
&gt;&gt;&gt;&gt;&gt;&gt;&gt; feature/signup
</code></pre>
</li>
<li>
<p>Manually fix the file.</p>
</li>
<li>
<p>Stage the resolved file:</p>
<pre><code class="language-bash">git add filename
</code></pre>
</li>
<li>
<p>If a real merge happened (not fast-forward), finish with:</p>
<pre><code class="language-bash">git commit
</code></pre>
</li>
</ol>
<p>If it was fast-forward, Git already did everything — no commit needed.</p>
<h3>7. Delete the Branch</h3>
<p><strong>Locally:</strong></p>
<pre><code class="language-bash">git branch -d feature/signup
</code></pre>
<p>If the branch hasn't been merged yet, use:</p>
<pre><code class="language-bash">git branch -D feature/signup
</code></pre>
<p><strong>Remotely:</strong></p>
<pre><code class="language-bash">git push origin --delete feature/signup
</code></pre>
<p>An alternative is:</p>
<pre><code class="language-bash">git push origin :feature/signup
</code></pre>
<p>—but it's less readable.</p>
<h3>8. View Branch History Visually</h3>
<pre><code class="language-bash">git log --oneline --graph --decorate --all
</code></pre>
<p>This shows your full commit tree, across all branches — clean and visual.</p>
<hr />
<h2>Merge vs Rebase: When and Why</h2>
<ul>
<li><code>merge</code> preserves full history and creates a merge commit.</li>
<li><code>rebase</code> rewrites your branch history to make it look like you started from the latest <code>main</code>.</li>
</ul>
<p>To rebase:</p>
<pre><code class="language-bash">git fetch origin
git rebase origin/main
</code></pre>
<p><strong>Only rebase private branches.</strong></p>
<p>If someone else has pulled your branch — do not rebase unless the team agrees.</p>
<p>If you must force-push after a rebase, never use <code>--force</code> directly. Use:</p>
<pre><code class="language-bash">git push --force-with-lease
</code></pre>
<p>✅ This makes Git check that nobody has pushed since your last pull — safer for teams.</p>
<hr />
<h2>Suggested Team Workflow</h2>
<ol>
<li>
<p>Start a feature branch from <code>main</code>:</p>
<pre><code class="language-bash">git switch -c feature/add-login
</code></pre>
</li>
<li>
<p>Work, commit, push:</p>
<pre><code class="language-bash">git push -u origin feature/add-login
</code></pre>
</li>
<li>
<p>Open a pull request on GitHub/GitLab for review and CI checks.</p>
</li>
<li>
<p>Once approved, merge it — ideally with <code>--no-ff</code>.</p>
</li>
<li>
<p>Delete the branch locally and on the remote.</p>
</li>
<li>
<p>Keep <code>main</code> clean and always production-ready.</p>
</li>
</ol>
<hr />
<h2>Working with Remotes</h2>
<table>
<thead>
<tr>
<th><strong>Task</strong></th>
<th><strong>Command</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Push and set upstream</td>
<td><code>git push -u origin feature/branch</code></td>
</tr>
<tr>
<td>Pull updates with rebase</td>
<td><code>git pull --rebase origin main</code></td>
</tr>
<tr>
<td>Delete branch on remote</td>
<td><code>git push origin --delete feature/branch</code></td>
</tr>
<tr>
<td>Clean up remote branch refs</td>
<td><code>git fetch --prune</code> or <code>git remote prune origin</code></td>
</tr>
<tr>
<td>Safe force-push after rebase</td>
<td><code>git push --force-with-lease</code></td>
</tr>
</tbody>
</table>
<p>Make pruning automatic:</p>
<pre><code class="language-bash">git config --global fetch.prune true
</code></pre>
<p>Make rebase your default pull strategy:</p>
<pre><code class="language-bash">git config --global pull.rebase true
</code></pre>
<p>Or do it manually per pull:</p>
<pre><code class="language-bash">git pull --rebase
</code></pre>
<p>Keeps your history linear and avoids noisy merge commits.</p>
<hr />
<h2>Command Cheat Sheet</h2>
<table>
<thead>
<tr>
<th><strong>Action</strong></th>
<th><strong>Command</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Create + switch to new branch</td>
<td><code>git switch -c feature/branch</code></td>
</tr>
<tr>
<td>Switch branches</td>
<td><code>git switch branch-name</code></td>
</tr>
<tr>
<td>Create branch without switching</td>
<td><code>git branch branch-name</code></td>
</tr>
<tr>
<td>See all branches</td>
<td><code>git branch</code></td>
</tr>
<tr>
<td>Jump to previous branch</td>
<td><code>git switch -</code></td>
</tr>
<tr>
<td>Update main before merge</td>
<td><code>git switch main &amp;&amp; git pull --ff-only origin main</code></td>
</tr>
<tr>
<td>Merge branch</td>
<td><code>git merge feature/branch</code></td>
</tr>
<tr>
<td>Merge with visible history</td>
<td><code>git merge --no-ff feature/branch</code></td>
</tr>
<tr>
<td>Rebase feature onto latest main</td>
<td><code>git rebase origin/main</code></td>
</tr>
<tr>
<td>Delete local branch</td>
<td><code>git branch -d branch-name</code> or <code>-D</code></td>
</tr>
<tr>
<td>Delete remote branch</td>
<td><code>git push origin --delete branch-name</code></td>
</tr>
<tr>
<td>Visualize all history</td>
<td><code>git log --oneline --graph --decorate --all</code></td>
</tr>
<tr>
<td>Safe force-push after rebase</td>
<td><code>git push --force-with-lease</code></td>
</tr>
<tr>
<td>Clean deleted remotes automatically</td>
<td><code>git config --global fetch.prune true</code></td>
</tr>
<tr>
<td>Use rebase by default on pull</td>
<td><code>git config --global pull.rebase true</code></td>
</tr>
</tbody>
</table>
<h3>Best Practices (And Why They Matter)</h3>
<ul>
<li>
<p><strong>One branch per task</strong><br />
Keeps changes isolated, focused, and easy to review.</p>
</li>
<li>
<p><strong>Use clear, consistent naming</strong><br />
Prefixes like <code>feature/</code>, <code>fix/</code>, <code>release/</code> help.<br />
Use lowercase + hyphens: <code>feature/add-login</code>.</p>
</li>
<li>
<p><strong>Use pull requests</strong><br />
Code reviews, CI checks, and visibility improve code quality.</p>
</li>
<li>
<p>Avoid <code>--force</code> — use <code>--force-with-lease</code><br />
Don't overwrite others' work by mistake.</p>
</li>
<li>
<p><strong>Clean up your branches</strong><br />
Remove them when they're done — both locally and on remote.</p>
</li>
<li>
<p><strong>Only rebase private branches</strong><br />
Never rewrite history others rely on.</p>
</li>
</ul>
<hr />
<h2>Final Thoughts</h2>
<p>Git branches aren't just a tool — they're a mindset.</p>
<p>They give you a safe space to build, break, and experiment — without breaking production.</p>
<p>With branches, you can:</p>
<ul>
<li>isolate ideas,</li>
<li>collaborate without chaos,</li>
<li>and build with confidence.</li>
</ul>
<p><strong>Branch = creativity</strong><br />
<strong>Main = stability</strong><br />
<strong>You = the developer who keeps both in harmony.</strong></p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Git"/>
    <category term="Version Control"/>
    <category term="Best Practices"/>
    <category term="Development"/>
    <category term="GitOps"/>
  </entry>
  <entry>
    <title>Docker MCP - How GPT Agents Now Use Slack, GitHub, Stripe &amp; More</title>
    <link href="https://devops.pink/docker-mcp-how-gpt-agents-now-use-slack-github-stripe-and-more/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/docker-mcp-how-gpt-agents-now-use-slack-github-stripe-and-more/</id>
    <published>2025-06-09T00:00:00.000Z</published>
    <updated>2025-06-09T00:00:00.000Z</updated>
    <summary>Learn how Docker and MCP let GPT agents use tools like Slack, GitHub, and Stripe — turning AI from smart talkers into real-world doers.</summary>
    <content type="html"><![CDATA[<p>Today, I want to tell you how models like GPT and Claude went from just talking — to actually acting.</p>
<p>You can think of it as them <strong>getting hands</strong>. And by “hands,” I mean <strong>agents</strong> — helper programs that let the model trigger real-world tools.</p>
<p>For example:</p>
<ul>
<li>send a message in Slack,</li>
<li>check a payment in Stripe,</li>
<li>or open a pull request on GitHub.</li>
</ul>
<p>No magic needed — just <strong>MCP</strong>, an open standard called the <a href="https://www.anthropic.com/news/model-context-protocol">Model Context Protocol</a>.</p>
<p>It gives language models a consistent, secure way to interact with external tools — from APIs to databases to cloud services.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="YwURFI88sq0"
title="Docker MCP - How GPT Agents Now Use Slack, GitHub, Stripe &amp; More"
/&gt;</p>
<hr />
<h2>The Challenge: Why This Was Hard</h2>
<p>But getting to this point wasn't easy.</p>
<p>So let's talk about what made this hard in the first place, how it works today — and how Docker helps keep the whole setup clean, isolated, and easy to deploy.</p>
<p>You see, AI has always been a great advisor. It can write code, help find bugs, or even craft a poem if you're feeling down.</p>
<p>But the moment you asked it something simple, like:</p>
<blockquote>
<p>“Hey, can you post in Slack that the task is done?”</p>
</blockquote>
<p>It would just look at you and say:</p>
<blockquote>
<p>“Uh… I'd love to, but I'm just a language model. I can talk — but I can't do.”</p>
</blockquote>
<p>And yeah — it makes sense. It's smart. It just couldn't act on its own.</p>
<p>The brain was there — logic, knowledge, and clear reasoning.</p>
<p>But actually <strong>taking action</strong>? That wasn't part of the job description.</p>
<hr />
<h2>Enter Agents (a.k.a. Hands for Models)</h2>
<p>To close that gap, developers started giving models a way to act — by connecting them to small helper services called <strong>agents</strong>.</p>
<p>In the world of MCP, these are known as <strong>MCP servers</strong>. And the app that connects the model to those servers? That's called the <strong>host</strong>.</p>
<h3>How It Works — Step by Step</h3>
<ol>
<li>The model says what it wants to do — like “Send this message to Slack.”</li>
<li>The host takes that request and passes it to the right MCP server.</li>
<li>The MCP server performs the action — sends the message, makes the API call, whatever.</li>
<li>The host takes the result and gives it back to the model, so it can finish its reply.</li>
</ol>
<p><strong>Simple</strong>: The brain thinks, the hands act — and MCP is a cable that connects them.</p>
<hr />
<h2>The Catch: Why It Was a Headache</h2>
<p>For a long time, setting this up was… <strong>painful</strong>.</p>
<p>I mean, it sounded great on paper. But in real life? Total hacker quest.</p>
<ul>
<li>You had to spin up MCP servers manually.</li>
<li>Each agent had its own messy stack — Python, Node, Chromium — conflict city.</li>
<li>API keys? Sitting in raw JSON. Easy to use, terrifying to manage.</li>
<li>And if you wanted two or three agents? Brace yourself.</li>
</ul>
<p>You just wanted to check a Stripe payment — and suddenly, you're deep in DIY DevOps.</p>
<hr />
<h2>And That's Where Docker Comes In</h2>
<p>It made launching MCP agents <strong>simple, consistent, and reliable</strong>.</p>
<p>So imagine this: your AI finally gets hands — but you don't want those hands poking around your system.</p>
<p>It's like Docker gives those hands <strong>gloves</strong> — clean, contained, and safe.</p>
<p>The model gets the freedom to act, but the boundaries stay in place.</p>
<ul>
<li>Each agent runs in its own container</li>
<li>It only sees what you allow</li>
<li>No mess in your system</li>
<li>No library conflicts</li>
<li>And no “whoops, I just deleted my desktop”</li>
</ul>
<hr />
<h2>So What's Changed?</h2>
<p>Now, Docker comes with the <strong>MCP Toolkit</strong> — and with it, an official catalog of <strong>over 100 ready-to-go agents</strong>.</p>
<p>You open Docker Desktop, go to the MCP Toolkit tab — and they're right there, ready for action.</p>
<p>You can browse the full <a href="https://www.docker.com/products/mcp-catalog-and-toolkit/">Docker MCP Toolkit</a> and explore <a href="https://hub.docker.com/catalogs/mcp">MCP Servers on Docker Hub</a> — over 100 officially supported tools ready to launch in seconds.</p>
<h3>What Happens When You Use an Agent?</h3>
<ol>
<li>You pick an agent image — let's say GitHub</li>
<li>Docker spins up a container</li>
<li>The agent starts listening for commands from the model</li>
</ol>
<p>That's it. No console gymnastics required.</p>
<hr />
<h2>Solving the Duplicated Agent Problem</h2>
<p>Back in the day, if you ran multiple apps — like Claude, VS Code, whatever — none of them knew the agent was already running. So each one spun up its own copy.</p>
<p>That meant things got...<strong>messy</strong>:</p>
<ul>
<li>Two containers doing the same job</li>
<li>Two access tokens</li>
<li>Two network connections</li>
<li>And a whole bunch of wasted resources</li>
</ul>
<p>It was clunky. Risky. And just unnecessary.</p>
<p><strong>Now?</strong> One agent. One container.</p>
<p>Multiple clients can connect to it — no duplication, no conflicts, no extra overhead.</p>
<hr />
<h2>But Is It Safe?</h2>
<p><strong>Yes — and here's why.</strong></p>
<p>Agents run inside isolated Docker containers. Each container gives you a clean, controlled environment.</p>
<p>The agent only sees what you explicitly share — folders, environment variables, network access. Docker handles the isolation by default. It puts a strong boundary around your agent, keeping your system safe from mistakes, bugs, or even compromised tools.</p>
<p>Still, as with any software, it's smart to check what it's doing under the hood.</p>
<p>Stick to well-maintained agents, follow best practices, and you're in good shape.</p>
<p>And sure — like with any powerful tool, you can override that.</p>
<p>If you add <code>--privileged</code>, or mount the Docker socket, you're disabling that boundary. But stick with the defaults — and Docker takes care of the hard parts for you.</p>
<hr />
<h2>Who Is This For?</h2>
<ul>
<li>If you're already using GPT, Claude, or Copilot — and want them to actually <strong>do stuff</strong>, not just write about it</li>
<li>If you're in DevOps — and tired of scripting the same tools over and over</li>
<li>If you're a product person — and want AI wired into Jira, GitHub, Stripe, or whatever — in <strong>10 minutes flat</strong></li>
</ul>
<hr />
<h2>What You Actually Get</h2>
<ul>
<li>An agent up and running in just a couple of minutes</li>
<li>Built-in isolation and safety</li>
<li>And if you want to scale up? Just add more agents.</li>
</ul>
<p>It's that simple.</p>
<p>Thanks for reading! Be sure to watch the <a href="https://youtu.be/YwURFI88sq0">video version</a> for extra insights and helpful visuals.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="Docker"/>
    <category term="AI"/>
    <category term="AI Agents"/>
    <category term="MCP"/>
    <category term="GPT"/>
    <category term="Automation"/>
  </entry>
  <entry>
    <title>Kubernetes on Your Laptop — No Cloud, No Boring Docs, Just Magic</title>
    <link href="https://devops.pink/kubernetes-on-your-laptop-no-cloud-no-boring-docs-just-magic/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/kubernetes-on-your-laptop-no-cloud-no-boring-docs-just-magic/</id>
    <published>2025-05-29T00:00:00.000Z</published>
    <updated>2025-05-29T00:00:00.000Z</updated>
    <summary>Kubernetes tutorial for beginners. Learn to run a full local cluster with Docker, Minikube, YAML, Pods, Deployments, Secrets — no cloud needed.</summary>
    <content type="html"><![CDATA[<p>Hey there, tech goddess (or just someone who's allergic to boring docs )</p>
<p>You've probably heard of Kubernetes, but every tutorial starts with “cluster,” “orchestration,” and “in the cloud”?</p>
<p>No thanks.</p>
<p>But what if I told you that you could launch your <strong>own website in Kubernetes, right on your laptop</strong>, set up environment variables, pass in secrets — step by step, no AWS, no tears, no PhD required?</p>
<p><strong>Docker, Minikube, kubectl, Pod, Deployment, ConfigMap, Secret — all of it. I'll walk you through everything.</strong></p>
<p>You just open VS Code, copy a few commands — and boom: a real cluster,spinning, working, and doing your bidding like a true DevOps enchantress.
Enough theory — let's do some hands-on magic.</p>
<p>No AWS, no signups, no credit cards — just you, your laptop, and your curiosity.</p>
<hr />
<h2>Step 1 — Installing Docker (and figuring out why you even need it)</h2>
<h3>Scene 1: "What even is Docker?"</h3>
<p>Imagine you're trying to run an app. It works perfectly for your friend on Windows, but not for you on a Mac. She's on Windows, you're on a Mac.
It needs a bunch of libraries you don't have.</p>
<p>The fix? A <strong>container</strong> — a self-contained package that already includes everything the app needs.</p>
<p>A container = a suitcase with code, tools, and everything else bundled in.</p>
<p><strong>Docker</strong> is the program that runs those suitcases — right on your machine.</p>
<hr />
<h3>Scene 2: "Download and install Docker"</h3>
<p><strong>Do this:</strong></p>
<ol>
<li>Go to  https://www.docker.com/products/docker-desktop</li>
<li>Choose <strong>Docker Desktop for macOS</strong> (or your OS).</li>
<li>Download the installer.</li>
<li>Install like any other app: drag the Docker icon into your <code>Applications</code> folder.</li>
</ol>
<p>Once it's installed — <strong>launch Docker Desktop</strong> (via Spotlight or Launchpad).</p>
<h3>Quick check: is Docker working?</h3>
<p><strong>Open Terminal</strong> (<code>Cmd + Space</code>, type “Terminal”).</p>
<p>Run this command:</p>
<pre><code class="language-bash">bash docker --version
</code></pre>
<p>You should see something like:</p>
<pre><code class="language-text">Docker version 24.0.2, build abc123
</code></pre>
<p>That means Docker is installed!</p>
<p>Next, run:</p>
<pre><code class="language-bash">docker ps
</code></pre>
<p>If Docker is running, you'll see an <strong>empty table</strong>, like:</p>
<pre><code class="language-text">CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
</code></pre>
<p>That's totally fine — it just means <strong>no containers are running yet</strong>.</p>
<p><strong>If Docker doesn't start or <code>docker ps</code> throws an error:</strong></p>
<table>
<thead>
<tr>
<th>What's happening</th>
<th>Try this</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>docker ps</code> doesn't work</td>
<td>Make sure <strong>Docker Desktop is running</strong> — look for the  icon in your top menu bar</td>
</tr>
<tr>
<td>Command not found</td>
<td>Restart your <strong>Terminal</strong> or <strong>reboot your machine</strong></td>
</tr>
<tr>
<td>Docker launched, but nothing's happening</td>
<td>The first launch can take a couple of minutes — be patient</td>
</tr>
<tr>
<td>It's asking for permissions</td>
<td>Check if macOS is waiting for you to approve something — a pop-up might be hiding behind other windows</td>
</tr>
</tbody>
</table>
<h3>Why does this matter?</h3>
<p>We'll be launching our <strong>Kubernetes cluster using Minikube</strong>, and Minikube runs containers under the hood.</p>
<p>No Docker = no cluster = no “Hello, Pod.”</p>
<p>✅ TL;DR — You're ready to move on if:</p>
<ul>
<li>You installed Docker Desktop</li>
<li><code>docker --version</code> works</li>
<li><code>docker ps</code> shows an empty table (and no errors)</li>
</ul>
<p>If all that's good — <strong>let's install Kubernetes (via Minikube)!</strong></p>
<hr />
<h2>Step 2 — Installing Minikube &amp; kubectl (and launching your first cluster!)</h2>
<h3>Scene 1: “What are Minikube and kubectl?”</h3>
<p><strong>Minikube</strong> is like a mini version of Kubernetes you can run <em>right on your laptop</em>.</p>
<p>That means: no server, no cloud, no AWS, no mystical cluster setup — Minikube spins it all up locally.</p>
<p><strong>kubectl</strong> (say “cube control” or “kube cuddle”) is your <strong>remote control</strong> for that cluster.</p>
<p>You'll use <code>kubectl</code> to create pods, check logs, update apps — basically, run the show.</p>
<h3>Scene 2: Install kubectl and Minikube</h3>
<p><strong>If you're on a Mac:</strong></p>
<p>Open Terminal and run these one by one:</p>
<pre><code class="language-bash">brew install kubectl
</code></pre>
<p>Then:</p>
<pre><code class="language-bash">brew install minikube
</code></pre>
<p>‍♀️ Take a moment, let Homebrew do its magic.</p>
<h3>Scene 3: Start the cluster</h3>
<p>Once it's installed, fire up your mini-cluster:</p>
<pre><code class="language-bash">minikube start --driver=docker
</code></pre>
<p>What's happening here:</p>
<ul>
<li>Kubernetes is starting <em>inside</em> Docker (which you set up in Step 1).</li>
<li>Minikube creates a “virtual machine” running your cluster.</li>
</ul>
<p>⏱ This may take 1-2 minutes, so... deep breath.</p>
<h3>Check if everything's working</h3>
<p>Run this command:</p>
<pre><code class="language-bash">kubectl get nodes
</code></pre>
<p>You should see something like:</p>
<pre><code class="language-text">NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 1m v1.29.0
</code></pre>
<p>If you see <code>STATUS: Ready</code> - <strong>congrats!</strong></p>
<p>Your first cluster is up. You literally just spun up your own infrastructure.</p>
<p>:::note
Minikube runs a <strong>single-node cluster -</strong> perfect for learning and testing, but <strong>not meant for production</strong>. And that's totally fine — we're here to get hands-on, not deploy Netflix.
:::</p>
<hr />
<h3>If something goes wrong - don't panic!</h3>
<table>
<thead>
<tr>
<th>Problem</th>
<th>What to check</th>
<th>Example</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>kubectl</code> not recognized</td>
<td>Did the install finish cleanly? Try restarting your terminal.</td>
<td>—</td>
</tr>
<tr>
<td><code>minikube</code> won't start</td>
<td>Is <strong>Docker Desktop</strong> running? Look for the  icon.</td>
<td>—</td>
</tr>
<tr>
<td><code>minikube start</code> just hangs</td>
<td>Try restarting Docker, rebooting, and make sure you've got at least <strong>4 GB of free RAM</strong></td>
<td>—</td>
</tr>
<tr>
<td><code>kubectl get nodes</code> shows nothing</td>
<td>Check if the cluster is running</td>
<td><code>minikube status</code></td>
</tr>
<tr>
<td>Cluster not started</td>
<td>Just run it again</td>
<td><code>minikube start</code></td>
</tr>
</tbody>
</table>
<h3>Why did we do this?</h3>
<ul>
<li>Kubernetes is how you run and manage container-based apps.</li>
<li>Minikube lets you explore it <strong>without needing cloud servers</strong>.</li>
<li>kubectl is your command center.</li>
</ul>
<p>Now you're ready to create pods, deployments, services - <strong>everything a true DevOps witch needs</strong>.</p>
<hr />
<h2>Step 3 — My First Pod: Running an App in Kubernetes</h2>
<h3>Scene 1: “What even is a Pod?”</h3>
<p>In Kubernetes, <em>everything</em> revolves around Pods.</p>
<p>Think of a Pod as <strong>a little room with one (or more) containers</strong> inside that:</p>
<ul>
<li>share network and storage</li>
<li>start together</li>
<li>live and die together</li>
</ul>
<p>A Pod usually runs just one container (like our nginx example) - but it <em>can</em> have multiple, like sidecars.</p>
<h3>Scene 2: Create a YAML file for your Pod</h3>
<p>Open VS Code or your favorite code editor. Create a new file and name it:</p>
<pre><code class="language-bash">pod.yaml
</code></pre>
<p>✍️ Paste this inside:</p>
<pre><code class="language-yaml">apiVersion: v1
kind: Pod
metadata:
  name: my-first-pod
spec:
  containers:
    - name: nginx
      image: nginx:alpine
      ports:
        - containerPort: 80
</code></pre>
<p>✨ <em>What's going on here:</em></p>
<ul>
<li><code>apiVersion</code>, <code>kind</code>, <code>metadata</code> — just Kubernetes boilerplate: "this is a Pod, name it like this".</li>
<li>Inside <code>containers:</code> you're saying: “Run a container using nginx:alpine and open port 80.”</li>
</ul>
<h3>Scene 3: Apply the file and launch the Pod</h3>
<p>In your terminal, while inside the folder with the file:</p>
<pre><code class="language-bash">kubectl apply -f pod.yaml
</code></pre>
<p>This tells Kubernetes: "Here's the definition — go make it real!"</p>
<p>Then check:</p>
<pre><code class="language-bash">kubectl get pods
</code></pre>
<p>You should see something like:</p>
<pre><code class="language-text">NAME READY STATUS RESTARTS AGE
my-first-pod 1/1 Running 0 10s
</code></pre>
<p>✅ <code>STATUS: Running</code> means your Pod is alive and well!</p>
<h3>Scene 4: Open your app in the browser</h3>
<p>Now let's actually see nginx in action. Time to forward that port:</p>
<pre><code class="language-bash">kubectl port-forward pod/my-first-pod 8080:80
</code></pre>
<p><em>What's this doing?</em></p>
<ul>
<li>It tunnels port 80 from inside the container to your <code>localhost:8080</code>.</li>
<li>Meaning: <strong>whatever nginx serves, you can see in your browser.</strong></li>
</ul>
<h3>Scene 5: Check if it's working</h3>
<p>Pop open your browser and go to:</p>
<pre><code class="language-text">http://localhost:8080
</code></pre>
<p>If you see the default nginx page — <strong>boom, success!</strong></p>
<h3>If it didn't work — deep breath, let's fix it</h3>
<table>
<thead>
<tr>
<th>Problem</th>
<th>What to try</th>
<th>Command</th>
</tr>
</thead>
<tbody>
<tr>
<td>Browser says “site can't be reached”</td>
<td>Make sure the terminal with <code>port-forward</code> is still open</td>
<td>—</td>
</tr>
<tr>
<td><code>kubectl port-forward</code> hangs or fails</td>
<td>Cancel it (<code>Ctrl + C</code>) and try again</td>
<td><code>kubectl port-forward pod/my-first-pod 8080:80</code></td>
</tr>
<tr>
<td>Port 8080 is already in use</td>
<td>Try a different port</td>
<td><code>kubectl port-forward pod/my-first-pod 8081:80</code> and go to <code>localhost:8081</code></td>
</tr>
<tr>
<td>nginx didn't start in the Pod</td>
<td>Check the logs</td>
<td><code>kubectl logs my-first-pod</code></td>
</tr>
</tbody>
</table>
<hr />
<p>So far, you've:</p>
<p>✅ Started your cluster<br />
✅ Created your very first Pod<br />
✅ Launched nginx<br />
✅ Accessed it through the browser</p>
<p>This was your <strong>first real app running in Kubernetes</strong> — and that's a huge milestone</p>
<hr />
<h2>Step 4 — Deployment: So Your Pods Don't Break (And If They Do — They Auto-Heal)</h2>
<h3>Scene 1: “What is a Deployment, anyway?”</h3>
<p>In the last step, you manually created a Pod.
But here's the problem:</p>
<ul>
<li>If it crashes — <strong>nobody restarts it</strong></li>
<li>You want <strong>two Pods</strong> for reliability</li>
<li>You want Kubernetes to <strong>watch over them automatically</strong></li>
</ul>
<p>Enter the <strong>Deployment</strong>. It:</p>
<p>✅ creates Pods<br />
✅ scales them (1, 2, 10, 100 — whatever)<br />
✅ restarts them if they crash<br />
✅ makes it easy to update images</p>
<p>Basically — a Pod manager that keeps your app alive and thriving.</p>
<h3>Scene 2: Create the Deployment YAML</h3>
<p>Create a new file called:</p>
<pre><code class="language-bash">deployment.yaml
</code></pre>
<p>✍️ Paste this in:</p>
<pre><code class="language-yaml">apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:alpine
          ports:
            - containerPort: 80
</code></pre>
<p><em>What's happening here:</em></p>
<ul>
<li><code>replicas: 2</code> — we're saying “Give me 2 identical Pods”</li>
<li><code>selector.matchLabels</code> + <code>template.metadata.labels</code> — this connects the Deployment to the Pods via <code>app: nginx</code></li>
<li><code>containers</code> — same as before: launch nginx</li>
</ul>
<h3>Scene 3: Apply the Deployment</h3>
<p>Open your terminal and run this:</p>
<pre><code class="language-bash">kubectl apply -f deployment.yaml
</code></pre>
<p>You're telling Kubernetes: "Here's the blueprint — build it."</p>
<p>Now check that it worked:</p>
<pre><code class="language-bash">kubectl get deployments
</code></pre>
<p>You should see something like:</p>
<pre><code class="language-text">NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 10s
</code></pre>
<p>✅ Which means: 2 Pods are up and running.</p>
<p>Now check the actual Pods:</p>
<pre><code class="language-bash">kubectl get pods
</code></pre>
<p>You should see two Pods with similar names, like:</p>
<pre><code class="language-text">nginx-deployment-xxx-yyy 1/1 Running
nginx-deployment-aaa-bbb 1/1 Running
</code></pre>
<h3>Scene 4: Let's test the auto-recovery</h3>
<p>** Tiny experiment: delete one of the Pods**</p>
<pre><code class="language-bash">kubectl delete pod &lt;one-of-the-pod-names&gt;
</code></pre>
<p>A few seconds later:</p>
<pre><code class="language-bash">kubectl get pods
</code></pre>
<p>You'll see 2 Pods again.</p>
<p>Because the Deployment <strong>noticed one was gone — and created a new one automatically!</strong></p>
<h3>If the Deployment doesn't launch or Pods don't appear</h3>
<table>
<thead>
<tr>
<th>Problem</th>
<th>What to check</th>
<th>Example Command</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>kubectl apply -f deployment.yaml</code> does nothing</td>
<td>Make sure the file is <strong>named correctly</strong> and you're in the right folder</td>
<td><code>ls</code></td>
</tr>
<tr>
<td><code>kubectl get deployments</code> shows nothing</td>
<td>Could be a YAML error (indentation, missing keys)</td>
<td>Run <code>kubectl apply -f deployment.yaml</code> again to see the error</td>
</tr>
<tr>
<td>Pods crash (<code>STATUS: CrashLoopBackOff</code>)</td>
<td>Something is breaking inside the container — check the logs</td>
<td><code>kubectl logs &lt;pod-name&gt;</code></td>
</tr>
<tr>
<td>Don't know the Pod name</td>
<td>Just list all Pods</td>
<td><code>kubectl get pods</code></td>
</tr>
<tr>
<td><code>error: unable to recognize</code></td>
<td>Your YAML might be broken — check the format</td>
<td>Use <a href="https://codebeautify.org/yaml-validator">YAML Linter</a></td>
</tr>
</tbody>
</table>
<p><em>Pro tip:</em> You can always list Pods with:</p>
<pre><code class="language-bash">kubectl get pods
</code></pre>
<h3>Why this matters</h3>
<p>Now you've got:</p>
<ul>
<li><strong>Two Pods</strong> = more reliability</li>
<li><strong>Self-healing</strong> containers</li>
<li><strong>Easy updates</strong> in the future</li>
</ul>
<p>You just leveled up from “one test container” to a <strong>real Kubernetes-managed application</strong>.</p>
<hr />
<h2>Step 5 — Service: How to Open a Pod in the Browser (Without Magic)</h2>
<h3>Scene 1: “What is a Service?”</h3>
<p>You already launched 2 nginx Pods — but right now, they're hiding behind a wall.</p>
<p>‍♀️ Without a Service, you <strong>can't just open them in the browser</strong>. Because:</p>
<ul>
<li>Pods have <strong>internal IPs</strong></li>
<li>They're not accessible from “outside”</li>
<li>If a Pod restarts, its IP might change</li>
</ul>
<p>A Service is like a <strong>stable front door</strong> to your app.</p>
<p>It knows where your Pods are and routes traffic to them.</p>
<p>Even if a Pod dies, restarts, or moves — the Service still leads to the right place.</p>
<h3>Scene 2: Create <code>service.yaml</code></h3>
<p>Create a new file and name it:</p>
<pre><code class="language-bash">service.yaml
</code></pre>
<p>✍️ Paste this in:</p>
<pre><code class="language-yaml">apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
</code></pre>
<p>What this does:</p>
<ul>
<li><code>type: NodePort</code> — tells Kubernetes: “Expose this to the outside world via a port”</li>
<li><code>selector: app: nginx</code> — the Service will forward traffic to Pods with that label</li>
<li><code>port</code> — the port the Service listens on (inside the cluster)</li>
<li><code>targetPort</code> — where to send traffic inside the Pod (nginx listens on port 80)</li>
<li><code>nodePort</code> — the <strong>external</strong> port you'll use in your browser</li>
</ul>
<h3>Scene 3: Apply the Service</h3>
<p>In your terminal:</p>
<pre><code class="language-bash">kubectl apply -f service.yaml
</code></pre>
<p>Boom — your Service is live!</p>
<p>Now run this:</p>
<pre><code class="language-bash">minikube service nginx-service
</code></pre>
<p>That command will <strong>automatically open your site in the browser</strong> — no need to worry about ports, IPs, or voodoo.</p>
<p>Didn't open? You can do it manually:</p>
<pre><code class="language-bash">minikube ip
</code></pre>
<p>You'll get an IP, like <code>192.168.49.2</code></p>
<p>Now go to:</p>
<pre><code class="language-text">http://192.168.49.2:30080
</code></pre>
<p>✅ You should see the nginx welcome page!</p>
<h3>What did we just do?</h3>
<ul>
<li>You created a <strong>Service</strong> to route traffic to your Pods</li>
<li>Used <strong>NodePort</strong> to make it accessible from outside</li>
<li>Opened a real website running inside Kubernetes — without <code>port-forward</code></li>
</ul>
<p>You're now officially at the “my app runs in K8s and opens in a browser” level —</p>
<p>aka your very first <strong>Kubernetes web app prototype</strong>!</p>
<hr />
<h2>Step 6 — ConfigMap: Passing Variables Into a Container (No Rebuilding Needed)</h2>
<h3>Scene 1: “Why do we even need ConfigMap?”</h3>
<p>Let's say you've got a website. And now you want to:</p>
<ul>
<li>show a different welcome message</li>
<li>tweak the behavior without rebuilding the image</li>
<li>keep settings separate from your code</li>
</ul>
<p><strong>ConfigMap</strong> is how you pass variables into your Pods.</p>
<p>Think of it like: “Here's a YAML with your config — grab it when you start up.”</p>
<h3>Scene 2: Create the ConfigMap</h3>
<p>Create a file called:</p>
<pre><code class="language-bash">configmap.yaml
</code></pre>
<p>✍️ Paste this:</p>
<pre><code class="language-yaml">apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  WELCOME_MSG: "Hello from ConfigMap!"
</code></pre>
<p>✨ What's going on here:</p>
<ul>
<li><code>data:</code> is just a key-value map</li>
<li><code>WELCOME_MSG</code> is an example string (but it could be a URL, a mode, a path — anything)</li>
</ul>
<h3>Scene 3: Update your deployment.yaml</h3>
<p>Open your <code>deployment.yaml</code> and inside the container block, add this under <code>spec.containers[0]</code>:</p>
<pre><code class="language-yaml">env:
  - name: WELCOME_MSG
    valueFrom:
      configMapKeyRef:
        name: nginx-config
        key: WELCOME_MSG
</code></pre>
<p>This tells Kubernetes: “When launching the container, pass it this environment variable from the ConfigMap.”</p>
<h3>Scene 4: Apply it all</h3>
<p>In your terminal, run:</p>
<pre><code class="language-bash">kubectl apply -f configmap.yaml
kubectl apply -f deployment.yaml
</code></pre>
<p>This updates both the ConfigMap and the Deployment so everything is hooked up.</p>
<h3>Scene 5: Check if the variable is inside the container</h3>
<p>First, get the name of one of the Pods:</p>
<pre><code class="language-bash">kubectl get pods
</code></pre>
<p>Copy a name (like <code>nginx-deployment-xxx-yyy</code>) and jump inside:</p>
<pre><code class="language-bash">kubectl exec -it nginx-deployment-xxx-yyy -- /bin/sh
</code></pre>
<p>Now run:</p>
<pre><code class="language-bash">echo $WELCOME_MSG
</code></pre>
<p>✅ You should see:</p>
<pre><code class="language-text">Hello from ConfigMap!
</code></pre>
<p>It worked! The variable made it all the way into your container from Kubernetes.</p>
<h3>If the variable didn't show up</h3>
<table>
<thead>
<tr>
<th>Problem</th>
<th>Check this</th>
<th>Example command</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>echo $WELCOME_MSG</code> shows nothing</td>
<td>Make sure you <strong>saved changes</strong> and re-applied <code>deployment.yaml</code></td>
<td><code>kubectl apply -f deployment.yaml</code></td>
</tr>
<tr>
<td>It looks right but still no variable</td>
<td>The <strong>Pod may not have restarted</strong> — delete it manually and let Deployment recreate it</td>
<td><code>kubectl delete pod &lt;pod_name&gt;</code></td>
</tr>
<tr>
<td>Can't get into the Pod</td>
<td>Double-check the Pod name</td>
<td><code>kubectl get pods</code></td>
</tr>
<tr>
<td><code>kubectl exec</code> doesn't work</td>
<td>Pod may have crashed — check status or logs</td>
<td><code>kubectl get pods</code>, <code>kubectl logs &lt;pod_name&gt;</code></td>
</tr>
</tbody>
</table>
<p><em>Pro tip:</em> For the new config to appear, the Pod usually has to be recreated.</p>
<p><code>kubectl apply</code> updates the Deployment, but won't restart running Pods.</p>
<h3>What did you just do?</h3>
<ul>
<li>Created a config variable in Kubernetes</li>
<li>Passed it into a Pod via Deployment</li>
<li>Saw the variable live inside your container</li>
</ul>
<p>This is key when your app needs to be flexible — change config without rebuilding the Docker image.</p>
<hr />
<h2>Step 7 — Secret: Safely Passing Passwords and Tokens into a Pod</h2>
<h3>Scene 1: “ConfigMap vs Secret — what's the difference?”</h3>
<p><code>ConfigMap</code> — for regular settings: modes, messages, URLs.</p>
<p><code>Secret</code> — for anything you <strong>don't want exposed to the world</strong>:</p>
<ul>
<li>passwords</li>
<li>access tokens</li>
<li>API keys</li>
</ul>
<p>❗ Heads up: Secret values are automatically <strong>base64-encoded</strong>.</p>
<p>That's not encryption — just a way to hide them from curious eyes.</p>
<h3>Scene 2: Create a secret file</h3>
<p>Create a new file:</p>
<pre><code class="language-bash">secret.yaml
</code></pre>
<p>✍️ Paste this:</p>
<pre><code class="language-yaml">apiVersion: v1
kind: Secret
metadata:
  name: nginx-secret
type: Opaque
data:
  SECRET_MSG: SGVsbG8sIGZyb20gU2VjcmV0IQ==
</code></pre>
<p>✨ What's going on:</p>
<ul>
<li><code>type: Opaque</code> — standard type of Secret</li>
<li><code>data:</code> — key-value pairs (in base64)</li>
</ul>
<p>Example:</p>
<pre><code class="language-bash">echo -n "Hello, from Secret!" | base64
</code></pre>
<p>Which gives you: <code>SGVsbG8sIGZyb20gU2VjcmV0IQ==</code></p>
<h3>Scene 3: Link the Secret to your container</h3>
<p>Open your <code>deployment.yaml</code>.</p>
<p>Inside <code>containers &gt; env</code>, add:</p>
<pre><code class="language-yaml">- name: SECRET_MSG
  valueFrom:
    secretKeyRef:
      name: nginx-secret
      key: SECRET_MSG
</code></pre>
<p>Works exactly like ConfigMap — just a different data source: a Secret.</p>
<h3>Scene 4: Apply the changes</h3>
<p>In your terminal:</p>
<pre><code class="language-bash">kubectl apply -f secret.yaml
kubectl apply -f deployment.yaml
</code></pre>
<p>Kubernetes will update the Secret and roll out the changes.</p>
<h3>Scene 5: Check the container</h3>
<p>First, get your Pod's name:</p>
<pre><code class="language-bash">kubectl get pods
</code></pre>
<p>Then hop inside one:</p>
<pre><code class="language-bash">kubectl exec -it &lt;pod_name&gt; -- /bin/sh
</code></pre>
<p>Now check the variable:</p>
<pre><code class="language-bash">echo $SECRET_MSG
</code></pre>
<p>✅ You should see:</p>
<pre><code class="language-text">Hello, from Secret!
</code></pre>
<p>That means your Secret was passed into the container successfully!</p>
<h3>If the Secret variable didn't show up</h3>
<table>
<thead>
<tr>
<th>Problem</th>
<th>Check this</th>
<th>Example command</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>echo $SECRET_MSG</code> shows nothing</td>
<td>Make sure you saved and re-applied <code>deployment.yaml</code></td>
<td><code>kubectl apply -f deployment.yaml</code></td>
</tr>
<tr>
<td>Secret wasn't created</td>
<td>Verify it's actually there</td>
<td><code>kubectl get secrets</code></td>
</tr>
<tr>
<td>Pod didn't restart</td>
<td>Delete it manually — Deployment will recreate it</td>
<td><code>kubectl delete pod &lt;pod_name&gt;</code></td>
</tr>
<tr>
<td>base64 was wrong</td>
<td>Make sure you encoded <strong>without newline</strong></td>
<td>`echo -n "Hello"</td>
</tr>
<tr>
<td>Can't enter the Pod</td>
<td>Double-check the Pod name</td>
<td><code>kubectl get pods</code></td>
</tr>
</tbody>
</table>
<p><em>Pro tip:</em> If the variable doesn't show up after <code>apply</code>, manually deleting the Pod usually helps.</p>
<h3>Why does this matter?</h3>
<p><code>Secret</code> is the standard way to <strong>safely pass sensitive data</strong> into your app — no hardcoding, no YAML leaks.</p>
<p>You just:</p>
<ul>
<li>created a Kubernetes Secret</li>
<li>passed it into a container</li>
<li>verified it from the inside</li>
</ul>
<p>Magic. Secure magic.</p>
<p><strong>⏸️ Now pause for a second.</strong></p>
<p><strong>Do you realize what you've just done?</strong></p>
<p>You installed a cluster. Deployed an app. Passed it configs and secrets — the full DevOps starter pack.</p>
<p>No clouds. No five tabs of Stack Overflow. No fear of hitting Enter.</p>
<p>Let's wrap it all up in a beautiful summary:</p>
<hr />
<h2>Final Recap — What You Did and Why It Matters</h2>
<table>
<thead>
<tr>
<th>Step</th>
<th>What You Did</th>
<th>Why It Matters</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Installed Docker</td>
<td>Runs containers — the foundation for Kubernetes</td>
</tr>
<tr>
<td>2</td>
<td>Installed Minikube and kubectl</td>
<td>Local cluster and control tool</td>
</tr>
<tr>
<td>3</td>
<td>Created a Pod</td>
<td>Ran your first app in Kubernetes</td>
</tr>
<tr>
<td>4</td>
<td>Set up a Deployment</td>
<td>Manages and scales Pods automatically</td>
</tr>
<tr>
<td>5</td>
<td>Added a Service</td>
<td>Made your app accessible from the browser</td>
</tr>
<tr>
<td>6</td>
<td>Connected a ConfigMap</td>
<td>Passed env vars without rebuilding the image</td>
</tr>
<tr>
<td>7</td>
<td>Connected a Secret</td>
<td>Securely passed passwords and sensitive data</td>
</tr>
</tbody>
</table>
<p>✨ You just built a <strong>mini-infrastructure</strong> on your own laptop.</p>
<p>This isn't just “hello world” — it's <strong>hello Kubernetes</strong>.</p>
<hr />
<h2>So, what's next? Two paths:</h2>
<h3>Want to take a break and return later?</h3>
<ol>
<li>Stop the cluster:</li>
</ol>
<pre><code class="language-bash">minikube stop
</code></pre>
<ol>
<li>
<p>Optionally quit Docker Desktop:</p>
<p>Click the  icon in the top bar → <strong>Quit Docker Desktop</strong></p>
</li>
</ol>
<p>That's like hitting "pause."</p>
<p>Nothing will be deleted — everything stays just as it is.</p>
<p>When you want to come back:</p>
<ul>
<li>Start Docker Desktop</li>
<li>Then run:</li>
</ul>
<pre><code class="language-bash">minikube start
</code></pre>
<p>And boom — your Pods, Services, Configs, Secrets... all back in action.</p>
<h3>Not planning to return?</h3>
<p>If you want to fully clean up everything we built:</p>
<pre><code class="language-bash">minikube delete
</code></pre>
<p>This removes the cluster, all Pods, configs, and secrets — clean slate.</p>
<p>You can leave Docker installed — you'll probably use it again (a lot).</p>
<p>Even if you never touch Kubernetes again — know this:</p>
<p>You started it. You understood it. You <strong>owned</strong> it. That's already a huge step into the DevOps world.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Kubernetes"/>
    <category term="Local Development"/>
  </entry>
  <entry>
    <title>10 Docker Interview Questions &amp; Answers for DevOps &amp; Cloud Engineers</title>
    <link href="https://devops.pink/10-docker-interview-questions-and-answers-for-devops-and-cloud-engineers/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/10-docker-interview-questions-and-answers-for-devops-and-cloud-engineers/</id>
    <published>2025-05-26T00:00:00.000Z</published>
    <updated>2025-05-26T00:00:00.000Z</updated>
    <summary>Top 10 Docker interview questions for 2025 DevOps &amp; Cloud Engineer roles — with answers, code examples, and expert tips to help you ace your next interview.</summary>
    <content type="html"><![CDATA[<p>If you're preparing for a Cloud Engineer or DevOps Engineer interview in 2025, Docker is non-negotiable — it comes up <em>every single time</em>.</p>
<p>Today, we're going through 10 Docker questions you're very likely to face — and how to answer them clearly and confidently.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="qf4fOqE345k"
title="10 Docker Interview Questions &amp; Answers for DevOps &amp; Cloud Engineers"
/&gt;</p>
<hr />
<h2>Before We Dive In: What Is Docker?</h2>
<p><a href="https://www.docker.com/">Docker</a> is a platform that lets you run applications in isolated environments called <a href="https://docs.docker.com/get-started/docker-overview/">containers</a>.</p>
<p>These containers can run consistently across different environments — your laptop, a test server, production — without running into problems that only appear outside your local setup.</p>
<p>In real-world projects and DevOps roles, Docker is almost everywhere — for app development, testing, CI/CD pipelines, and cloud deployments.</p>
<hr />
<h2>Question 1: What's the difference between an image and a container? And what happens if you delete the image?</h2>
<p>A <a href="https://docs.docker.com/reference/cli/docker/image/">Docker image</a> is like a frozen recipe for your application — it includes everything needed to run it: code, libraries, environment settings.</p>
<p>A <a href="https://www.docker.com/resources/what-container/">container</a> is what you get when Docker takes that image and actually runs it — like turning the recipe into a real, running dish.</p>
<p>The image is read-only and reusable; the container has its own writable layer and lives as an isolated process. If you delete the image but the container is already running, it keeps working — because the image is already loaded into memory.</p>
<p>But if you stop that container and try to restart it, Docker won't find the image — and the restart will fail.</p>
<p><strong>Pro Tip:</strong></p>
<p>Tag your images properly (<code>my-app:latest</code>, <code>my-app:v1.2</code>) and regularly prune unused ones — but avoid deleting images used by running containers.</p>
<hr />
<h2>Question 2: What actually happens when you run docker run?</h2>
<p>When I run <a href="https://docs.docker.com/engine/reference/commandline/run/">docker run</a>, Docker first checks if the image exists locally.</p>
<p>If not — it pulls it from a registry like <a href="https://hub.docker.com/">Docker Hub</a>. Then it creates a container — which is basically an isolated process with its own filesystem, networking, and resources.</p>
<p>Docker sets up isolation using Linux <a href="https://man7.org/linux/man-pages/man7/namespaces.7.html">namespaces</a> and <a href="https://man7.org/linux/man-pages/man7/cgroups.7.html">cgroups</a>.</p>
<p>Finally, it executes the default command defined in the image.</p>
<p><strong>Example:</strong></p>
<p>Running <code>docker run nginx</code> pulls the <code>nginx</code> image (if it's not local), creates a container, and starts the Nginx server inside that isolated environment.</p>
<p><strong>Pro Tip:</strong></p>
<p>Use <code>--rm</code> with <code>docker run</code> to automatically clean up the container after it exits — so your system doesn't get cluttered with stopped containers.</p>
<hr />
<h2>Question 3: COPY vs ADD — what's the difference, and when would you use each?</h2>
<p>Both <a href="https://docs.docker.com/reference/dockerfile/#copy">COPY</a> and <a href="https://docs.docker.com/reference/dockerfile/#add">ADD</a> move files into a Docker image.</p>
<ul>
<li><code>COPY</code> simply copies files and folders — no surprises.</li>
<li><code>ADD</code> does more: it can unpack compressed files like <code>.tar.gz</code> and download files from URLs.</li>
</ul>
<p>Because <code>ADD</code> has extra behavior that's not always obvious, I prefer <code>COPY</code> for clarity and only use <code>ADD</code> when I specifically need those extra features.</p>
<p><strong>Example:</strong></p>
<pre><code class="language-dockerfile"># Preferred
COPY ./app /app

# Only if needed (auto-extracts)
ADD archive.tar.gz /app/
</code></pre>
<p><strong>Pro Tip:</strong></p>
<p>Simplicity is security — prefer <code>COPY</code> unless you have a very good reason.</p>
<hr />
<h2>Question 4: What's a multi-stage build, and when would you use it?</h2>
<p>A <a href="https://docs.docker.com/build/building/multi-stage/">multi-stage build</a> is when you use multiple <code>FROM</code> statements in your Dockerfile.</p>
<ul>
<li>The first stage does heavy work — installing dependencies, building code.</li>
<li>The final stage copies only the necessary artifacts into a clean, minimal base image.</li>
</ul>
<p>This reduces image size and eliminates unnecessary files and tools from production images.</p>
<p><strong>Example:</strong></p>
<pre><code class="language-dockerfile"># Stage 1 — build
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2 — production
FROM node:20-slim
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
CMD ["node", "dist/index.js"]
</code></pre>
<p><strong>Pro Tip:</strong></p>
<p>Smaller images = faster deployments + fewer vulnerabilities.</p>
<hr />
<h2>Question 5: CMD vs ENTRYPOINT — how do they work together?</h2>
<p><a href="https://docs.docker.com/reference/dockerfile/#entrypoint">ENTRYPOINT</a> defines what runs — the main executable.</p>
<p><a href="https://docs.docker.com/reference/dockerfile/#cmd">CMD</a> gives it default arguments.</p>
<p>When you use <a href="https://docs.docker.com/engine/reference/commandline/run/">docker run</a>, the arguments you pass override CMD — but not ENTRYPOINT.</p>
<p>Together, they give you a flexible default setup that you can still tweak at runtime.</p>
<p><strong>Example:</strong></p>
<pre><code class="language-dockerfile">FROM nginx:1.28.0-alpine-slim

ENTRYPOINT ["nginx"]
CMD ["-g", "daemon off;"]
</code></pre>
<p><strong>Pro Tip:</strong></p>
<p>Want full control at runtime? Use only CMD — and leave out ENTRYPOINT.</p>
<hr />
<h2>Question 6: Volumes vs Bind Mounts — which would you use in production, and why?</h2>
<p>In production, I prefer <a href="https://docs.docker.com/engine/storage/volumes/">Docker-managed volumes</a>.
Volumes are isolated from the host OS, easier to back up, and more stable over time.</p>
<p><a href="https://docs.docker.com/engine/storage/bind-mounts/">Bind mounts</a> depend on host paths — which makes them fragile and environment-specific.
Bind mounts are great for local development, not for production.</p>
<p><strong>Example:</strong></p>
<pre><code class="language-yaml">services:
  db:
    image: postgres
    volumes:
      - pg-data:/var/lib/postgresql/data

volumes:
  pg-data:
</code></pre>
<p><strong>Pro Tip:</strong></p>
<p>Volumes are portable, reliable, and more future-proof across hosts and clusters.</p>
<hr />
<h2>Question 7: How does networking between containers work?</h2>
<p>By default, Docker connects containers to a <a href="https://docs.docker.com/engine/network/drivers/bridge/">bridge network</a>, where they get private IP addresses.</p>
<p>However, they can only reach each other by IP unless you create a <a href="https://docs.docker.com/engine/network/drivers/bridge/#differences-between-user-defined-bridges-and-the-default-bridge">user-defined bridge network</a>.</p>
<p>In a user-defined bridge network, containers can communicate by name, which simplifies service discovery.</p>
<p><strong>Example:</strong></p>
<pre><code class="language-yaml">services:
  app:
    image: my-app
    environment:
      DB_HOST: db
      DB_USER: appuser
      DB_PASSWORD: secret
    networks:
      - app-net

  db:
    image: postgres
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: secret
    networks:
      - app-net

networks:
  app-net:
</code></pre>
<p><strong>Pro Tip:</strong></p>
<p>Always use <strong>user-defined networks</strong> — the default <code>bridge</code> network doesn't support automatic name-based discovery and can lead to frustrating connection issues.</p>
<hr />
<h2>Question 8: How do you reduce Docker image size, and why should you care?</h2>
<p>Reducing image size speeds up builds, deployments, and improves security.</p>
<ul>
<li>I start with a minimal base image — like <code>alpine:3.21.3</code>, <code>python:3.12-slim-bookworm</code>, or <code>node:20.13.1-alpine</code>.</li>
<li>I combine RUN instructions to reduce layers, and clean up any temp files or caches.</li>
<li>I always use a <code>.dockerignore</code> file to exclude things like <code>.git</code>, <code>node_modules</code>, and test data.</li>
</ul>
<p>And for complex builds, I use multi-stage builds to separate build tools from the final runtime.</p>
<p><strong>Example:</strong></p>
<p>A Node.js app image can shrink from 1.2 GB to under 200 MB by switching to <code>node:20.13.1-alpine</code> and cleaning up properly.</p>
<p><strong>Pro Tip:</strong></p>
<p>Smaller images = faster pipelines, quicker deploys, and fewer security issues.</p>
<hr />
<h2>Question 9: What is BuildKit, and why use it?</h2>
<p><a href="https://docs.docker.com/build/buildkit/">BuildKit</a> is Docker's modern build engine that significantly improves performance, security, and flexibility.</p>
<p>It enables parallel execution of independent build steps, advanced caching mechanisms, and secure handling of secrets during builds. BuildKit also supports features like multi-platform builds and efficient storage management.</p>
<p>In modern Docker versions, BuildKit is enabled by default — so you don't need to configure anything. But if you're on an older setup, you can still enable it by setting <code>DOCKER_BUILDKIT=1</code> or updating the Docker daemon config.</p>
<p><strong>Example:</strong></p>
<p>With BuildKit, multi-stage builds can run steps in parallel, reducing build times significantly.</p>
<p><strong>Pro Tip:</strong></p>
<p>Always leverage BuildKit for faster, more secure, and efficient Docker builds.</p>
<hr />
<h2>Question 10: How do you handle sensitive data (like secrets) in Docker?</h2>
<p>I never hardcode secrets into Dockerfiles or images.</p>
<p>For local runs, I pass secrets as environment variables — either inline or via a <code>.env</code> file. If I use a <code>.env</code> file, I make sure to add it to <code>.dockerignore</code> — so it doesn't accidentally get copied into the image.</p>
<p>In production, I use secret management tools — like <a href="https://developer.hashicorp.com/vault">HashiCorp Vault</a>, <a href="https://aws.amazon.com/secrets-manager/">AWS Secrets Manager</a>, or <a href="https://kubernetes.io/docs/concepts/configuration/secret/">Kubernetes Secrets</a> — to inject secrets at runtime.</p>
<p>Secrets should always come from outside the image, not baked inside</p>
<p><strong>Example:</strong></p>
<p>Pass database passwords using environment variables in staging, and HashiCorp Vault in production.</p>
<p><strong>Pro Tip:</strong></p>
<p>Good secret management = safer deployments and easier key rotations.</p>
<p>Thanks for reading! Be sure to watch the <a href="https://youtu.be/qf4fOqE345k">video version</a> for extra insights and helpful visuals.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Docker"/>
    <category term="Interview Questions"/>
    <category term="DevOps"/>
    <category term="Containers"/>
  </entry>
  <entry>
    <title>Helm in Kubernetes - What It Is and Why You Need It</title>
    <link href="https://devops.pink/helm-in-kubernetes-what-it-is-and-why-you-need-it/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/helm-in-kubernetes-what-it-is-and-why-you-need-it/</id>
    <published>2025-05-20T00:00:00.000Z</published>
    <updated>2025-05-20T00:00:00.000Z</updated>
    <summary>Helm simplifies Kubernetes deployments. Learn what it is, how it works, and why it&apos;s essential for managing scalable apps and infrastructure.</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens!</p>
<p>Today we're talking about <strong>Helm</strong> — my go-to tool for working with Kubernetes. If you've ever suffered through manually crafting YAML files for every single service, you're about to <em>breathe a huge sigh of relief</em>.</p>
<p>I used to drown in those manifests and think, “Is it always going to be this painful?” Nope. Because <strong>Helm exists</strong>.</p>
<hr />
<h2>Helm in Plain English</h2>
<p>Imagine you buy a dresser from IKEA. Instead of guessing where each screw goes, you grab the instructions and have it assembled in 20 minutes - latte in hand.</p>
<p><strong>Helm is that same kind of instruction manual - for Kubernetes.</strong></p>
<p>Normally, deploying an app means creating a bunch of objects: Pods, Services, Ingresses, ConfigMaps — each with its own YAML file. It's tedious.</p>
<p><strong>Helm saves you:</strong></p>
<ul>
<li>Bundles everything into one structure: a <em>chart</em></li>
<li>Spins up apps with a single command</li>
<li>Simplifies upgrades, customization, and <em>rollbacks</em></li>
<li>Makes deployments predictable and repeatable</li>
</ul>
<hr />
<h2>What's a Helm Chart (and Why It's Not Scary)</h2>
<p>The word “chart” might sound intimidating, but it's really just <strong>a folder with organized files</strong>. No magic, just structure.</p>
<p>Think of it as your deployment organizer:</p>
<ul>
<li><code>Chart.yaml</code> — the chart's business card: name, version, description</li>
<li><code>values.yaml</code> — default settings (ports, replicas, DB names, etc.)</li>
<li><code>templates/</code> — YAML blueprints Helm renders into actual Kubernetes objects</li>
<li><code>_helpers.tpl</code> — reusable functions to keep templates DRY</li>
<li><code>charts/</code> — dependencies like databases or message queues</li>
</ul>
<h3>Why It's Handy</h3>
<p>A chart is like a capsule — it holds everything: instructions, configs, and dependencies.</p>
<p>Same chart, different environments:</p>
<ul>
<li><em>Dev</em>: <code>myblog-dev</code>, 1 replica, test DB</li>
<li><em>Prod</em>: <code>myblog</code>, 3 replicas, production DB</li>
</ul>
<p>Just tweak <code>values.yaml</code> — no need to touch anything else.</p>
<p>It's like one dress styled with different accessories.</p>
<hr />
<h2>Why Helm Is My Must-Have</h2>
<p>Reasons I love Helm:</p>
<ol>
<li><strong>Scalability:</strong> no more 30+ YAML files</li>
<li><strong>Flexibility:</strong> same chart, different setups</li>
<li><strong>Transparency:</strong> preview what's actually going to be installed (<code>helm template</code>)</li>
<li><strong>Security:</strong> Helm 3 removed Tiller (and that's a good thing)</li>
<li><strong>Control:</strong> rollbacks are built-in (<code>helm rollback</code> is magic)</li>
</ol>
<hr />
<h2>Helm 2 vs Helm 3 — Short &amp; Sweet</h2>
<p>Helm 2 relied on a separate component called <em>Tiller</em>, which had elevated cluster privileges — a big security headache.</p>
<p>Helm 3 fixed it:</p>
<ul>
<li>No Tiller</li>
<li>Uses your existing <code>kubectl</code> credentials</li>
<li>Easier to install and great for CI/CD</li>
</ul>
<hr />
<h2>What's Next? Helm v4 Is in the Works</h2>
<p>Helm v4 is currently <strong>in planning</strong> (see <a href="https://github.com/helm/community/blob/main/hips/hip-0012.md">HIP-0012</a>) — with focus on a new API and architectural improvements.</p>
<p>No official release date yet — the devs meet weekly and are actively shaping the roadmap.</p>
<hr />
<h2>Installing Helm — Fast &amp; Painless</h2>
<h3>You'll Need:</h3>
<ul>
<li>A Kubernetes cluster (Minikube, GKE, etc.)</li>
<li><code>kubectl</code> installed</li>
</ul>
<h3>Most Universal Way</h3>
<pre><code class="language-bash">curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
</code></pre>
<p><strong>Always use the official script from GitHub. Trust but verify.</strong></p>
<h3>Alternatives</h3>
<p><strong>macOS:</strong></p>
<pre><code class="language-bash">brew install helm
</code></pre>
<p>Homebrew now provides the latest release — <strong>v3.18.0</strong></p>
<p><strong>Linux (Snap):</strong></p>
<pre><code class="language-bash">sudo snap install helm --classic
</code></pre>
<p><em>Snap can sometimes lag behind — prefer the install script for CI.</em></p>
<p><strong>Debian / Ubuntu (APT):</strong></p>
<pre><code class="language-bash">curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | \
sudo tee /usr/share/keyrings/helm.gpg &gt; /dev/null

echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | \
sudo tee /etc/apt/sources.list.d/helm-stable-debian.list

sudo apt-get update
sudo apt-get install helm
</code></pre>
<hr />
<h2>Verify the Install</h2>
<pre><code class="language-bash">helm version
</code></pre>
<p>Sample output:</p>
<pre><code class="language-bash">version.BuildInfo{Version:"v3.18.0", GitCommit:"...", GoVersion:"go1.22.2", ...}
</code></pre>
<p>As of <strong>May 20, 2025</strong>, this is the latest stable release.</p>
<p><strong>v3.18.1</strong> is expected on <strong>June 11</strong>, and <strong>v3.19.0</strong> is coming in <strong>September</strong>.</p>
<hr />
<h2>First Helm Run — Let's Go!</h2>
<p>Install something fun — like Nginx:</p>
<pre><code class="language-bash">helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm install nginx bitnami/nginx
</code></pre>
<p>Customize settings:</p>
<pre><code class="language-bash">helm install my-app ./my-chart \
 --set image.tag=2.0.1 --set replicaCount=3
</code></pre>
<p>Or use a YAML config:</p>
<pre><code class="language-bash">helm install my-app ./my-chart -f values-prod.yaml
</code></pre>
<p>Something went wrong?</p>
<pre><code class="language-bash">helm rollback my-app 1
</code></pre>
<p>Uninstall it:</p>
<pre><code class="language-bash">helm uninstall my-app
</code></pre>
<hr />
<h2>Security &amp; Best Practices</h2>
<h3>Always Inspect a Chart Before Installing</h3>
<p>Think of it like trying on a dress before the party - just because it looks cute doesn't mean it fits.</p>
<ul>
<li><code>helm lint</code> — checks the structure and versioning of the chart</li>
<li><code>helm template</code> — renders the final YAML (preview before install)</li>
<li><code>helm test</code> — runs built-in tests (if defined)</li>
<li><code>helm diff</code> — compares installed vs new version</li>
</ul>
<p>Install the <strong>diff plugin</strong>:</p>
<pre><code class="language-bash">helm plugin install https://github.com/databus23/helm-diff
</code></pre>
<h3>Sign and Verify Your Charts</h3>
<ul>
<li>Use <code>helm package --sign</code> to digitally sign your charts</li>
<li>Run <code>helm verify</code> to confirm integrity</li>
<li>For advanced signing, try <strong>Cosign</strong> + the <code>helm-sigstore</code> plugin</li>
</ul>
<h3>Store Charts Like Images (OCI FTW)</h3>
<p>Helm now supports pushing/pulling from OCI registries:</p>
<pre><code class="language-bash">helm push mychart.tgz oci://registry.example.com/charts
helm pull oci://registry.example.com/charts/mychart --version 1.2.3
</code></pre>
<p>If you're using older tools like ChartMuseum, clarify that separately.</p>
<h3>Mind Your Versions</h3>
<ul>
<li>Watch for <strong>version skew</strong> between Helm and Kubernetes</li>
<li>Don't upgrade Helm right before a production deploy — stability first!</li>
</ul>
<hr />
<h2>Takeaway</h2>
<p>Helm is <strong>my DevOps bestie</strong>. It brings:</p>
<ul>
<li>Organization</li>
<li>Repeatable configuration</li>
<li>And a lot less Kubernetes chaos</li>
</ul>
<p>If you're working with Kubernetes, get familiar with Helm.</p>
<p><strong>It 100% deserves a spot in your toolkit.</strong></p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Kubernetes"/>
    <category term="Helm"/>
    <category term="Orchestration"/>
    <category term="Cloud Native"/>
  </entry>
  <entry>
    <title>Your First Git Commit - A Beginner-Friendly Guide to Version Control</title>
    <link href="https://devops.pink/first-git-commit-a-beginner-friendly-guide-to-version-control/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/first-git-commit-a-beginner-friendly-guide-to-version-control/</id>
    <published>2025-05-12T00:00:00.000Z</published>
    <updated>2025-05-12T00:00:00.000Z</updated>
    <summary>A simple Git tutorial for beginners. Learn how to install Git, set it up, and make your first commit — no experience needed.</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens! ‍✨</p>
<p>If you've ever seen the word <em>Git</em> and thought:</p>
<p>“Okay, this sounds important… but also kind of intimidating?”</p>
<p>You're not alone.</p>
<p>But here's the good news: Git isn't scary — it's an essential tool that'll make your coding life much easier.</p>
<p>Let's walk through your first Git setup and commit, step by step — no jargon, no stress.</p>
<hr />
<h2>What Is Git, Really?</h2>
<p>Think of your code like a project notebook. You want to:</p>
<ul>
<li>save versions as you go,</li>
<li>undo mistakes,</li>
<li>and maybe work on it with other people — without chaos.</li>
</ul>
<p><strong>Git is the version control system that makes all of that possible.</strong></p>
<p>It helps you:</p>
<ul>
<li>snapshot your work at any time,</li>
<li>roll back if something breaks,</li>
<li>and collaborate smoothly with others.</li>
</ul>
<hr />
<h2>Installing Git (No Stress, Just Steps)</h2>
<h3>On macOS</h3>
<p>Open Terminal and run:</p>
<pre><code class="language-bash">brew install git
</code></pre>
<p>:::note
Homebrew must be installed beforehand.
:::</p>
<p>If your Mac prompts you to install Xcode Command Line Tools, accept it — that's normal.</p>
<h3>On Windows</h3>
<p>Simplest method: download Git from <a href="https://git-scm.com/downloads">git-scm.com</a>. It includes <strong>Git Bash</strong>, which gives you a helpful command-line interface.</p>
<p>Prefer using the terminal?</p>
<pre><code class="language-bash">winget install --id Git.Git
</code></pre>
<p>(Works on Windows 10 1809+ and Windows 11.)</p>
<h3>On Linux</h3>
<p>For Debian/Ubuntu:</p>
<pre><code class="language-bash">sudo apt-get install git
</code></pre>
<p>For Fedora:</p>
<pre><code class="language-bash">sudo dnf install git
</code></pre>
<p>For Arch-based systems:</p>
<pre><code class="language-bash">sudo pacman -S git
</code></pre>
<h3>Check the Installation</h3>
<p>Make sure Git is installed with:</p>
<pre><code class="language-bash">git --version
</code></pre>
<p>If you see a version number, you're all set.</p>
<hr />
<h2>Configure Git (Just Once)</h2>
<p>Git tags your work with your name and email so you can track who made which changes — even if it's just you.</p>
<pre><code class="language-bash">git config --global user.name "Your Name"
git config --global user.email "you@example.com"
</code></pre>
<p>Set <code>main</code> as the default branch name (instead of the older <code>master</code>):</p>
<pre><code class="language-bash">git config --global init.defaultBranch main
</code></pre>
<p>Optional: avoid using Vim by default (it can be confusing for beginners). Use something simpler like <code>nano</code>:</p>
<pre><code class="language-bash">git config --global core.editor "nano"
</code></pre>
<p>Prefer VS Code? Use:</p>
<pre><code class="language-bash">git config --global core.editor "code --wait"
</code></pre>
<hr />
<h2>Creating Your First Repository</h2>
<p>Create a new folder for your project and initialize Git inside it:</p>
<pre><code class="language-bash">mkdir my-first-repo &amp;&amp; cd my-first-repo
git init
</code></pre>
<p>You now have a Git repository — a versioned folder ready to track changes.</p>
<hr />
<h2>Add a File and Make Your First Commit</h2>
<p>Let's create a basic file:</p>
<pre><code class="language-bash">echo "Hello, Git!" &gt; README.md
</code></pre>
<p>:::note
File names like README.md and readme.md are treated the same on macOS and Windows, but they're different on Linux — case matters.
:::</p>
<p>Check Git's status:</p>
<pre><code class="language-bash">git status
</code></pre>
<p>It will show the new file but mark it as <em>untracked</em>.</p>
<p>Tell Git to track it:</p>
<pre><code class="language-bash">git add README.md
</code></pre>
<p>Now make your first commit:</p>
<pre><code class="language-bash">git commit -m "Add README"
</code></pre>
<p>Done — your first snapshot is saved in Git history!</p>
<hr />
<h2>Bonus: Use <code>.gitignore</code> to Keep Things Clean</h2>
<p>You might have folders or files you don't want to track — like <code>node_modules</code>, log files, or build output.</p>
<p>Create a <code>.gitignore</code> file:</p>
<pre><code class="language-bash">echo "node_modules/" &gt; .gitignore
</code></pre>
<p>Want help generating one for your tech stack? Check out <a href="https://www.toptal.com/developers/gitignore">gitignore.io</a>.</p>
<hr />
<h2>Optional (But Handy) - Windows Line Ending Fix</h2>
<p>If you're on Windows and see warnings like “LF will be replaced by CRLF,” run:</p>
<pre><code class="language-bash">git config --global core.autocrlf true
</code></pre>
<p>This helps avoid annoying line ending issues between systems.</p>
<hr />
<h2>Make Things Faster with Aliases</h2>
<p>Tired of typing full commands? Set up aliases:</p>
<pre><code class="language-bash">git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
</code></pre>
<p>Now you can use <code>git st</code> instead of <code>git status</code>. Shortcuts = efficiency.</p>
<hr />
<h2>Prefer GUIs Over Command Line?</h2>
<p>If the terminal isn't your thing (yet), try a visual interface:</p>
<ul>
<li><a href="https://desktop.github.com/"><strong>GitHub Desktop</strong></a> — beginner-friendly and intuitive</li>
<li><a href="https://www.sourcetreeapp.com/"><strong>Sourcetree</strong></a> — more advanced but still beginner-usable</li>
</ul>
<p>You can always switch to the terminal when you feel ready.</p>
<hr />
<h2>Quick Cheat Sheet</h2>
<table>
<thead>
<tr>
<th>Command</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>git init</code></td>
<td>Creates a Git repo</td>
</tr>
<tr>
<td><code>git status</code></td>
<td>Shows changes and file states</td>
</tr>
<tr>
<td><code>git add</code></td>
<td>Stages files for commit</td>
</tr>
<tr>
<td><code>git commit -m ""</code></td>
<td>Saves a snapshot with a message</td>
</tr>
<tr>
<td><code>git config</code></td>
<td>Sets global Git settings (name, editor, etc.)</td>
</tr>
</tbody>
</table>
<hr />
<h2>You Did It</h2>
<p>You installed Git, configured it, created a repo, and made your first commit.</p>
<p>That's a big step in your dev journey — version control is a core skill for any developer.</p>
<p>Now you've got the tools and confidence to take control of your projects.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Git"/>
    <category term="Version Control"/>
    <category term="Beginners"/>
    <category term="Development"/>
  </entry>
  <entry>
    <title>Best CI/CD Tool in 2025? GitHub Actions vs GitLab CI vs Argo Workflows</title>
    <link href="https://devops.pink/best-ci-cd-tool-in-2025-github-actions-vs-gitlab-ci-vs-argo-workflows/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/best-ci-cd-tool-in-2025-github-actions-vs-gitlab-ci-vs-argo-workflows/</id>
    <published>2025-05-11T00:00:00.000Z</published>
    <updated>2025-05-11T00:00:00.000Z</updated>
    <summary>Compare GitHub Actions, GitLab CI, and Argo Workflows in 2025 — and find out which CI/CD tool best fits your team and pipeline.</summary>
    <content type="html"><![CDATA[<p>If you're working with CI/CD, cloud platforms, or just trying to make your pipelines less messy, you're in the right place. Because today we're talking about a question many teams face:</p>
<p><strong>Which CI/CD tool actually makes sense in 2025?</strong></p>
<p><em>Not in theory — in real life.</em></p>
<ul>
<li><a href="https://github.com/features/actions">GitHub Actions</a></li>
<li><a href="https://docs.gitlab.com/ci/">GitLab CI</a></li>
<li><a href="https://argo-workflows.readthedocs.io/en/stable/">Argo Workflows</a></li>
</ul>
<p>They're all good. But which one fits <em>your</em> team?</p>
<p>Let's break it down together.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="20Pr6g6iWpI"
title="Best CI/CD Tool in 2025? GitHub Actions vs GitLab CI vs Argo Workflows"
/&gt;</p>
<hr />
<h2>First, let's set the stage</h2>
<p>CI/CD isn't just “run tests and deploy” anymore.</p>
<p>Now it's about:</p>
<ul>
<li>security,</li>
<li>rollbacks,</li>
<li>environments,</li>
<li>infrastructure as code,</li>
<li>and observability.</li>
</ul>
<p>Pipelines aren't just scripts anymore — they're part of your system's core.</p>
<p>And the tool you choose shapes how your team builds, ships, and fixes things every day.</p>
<hr />
<h2>GitHub Actions</h2>
<p><strong>It's built right into GitHub.</strong></p>
<p>Add a <code>.yml</code> file, grab a few Marketplace actions, and you've got a working pipeline.</p>
<p>For small projects? It works great:</p>
<ul>
<li>frontend apps</li>
<li>Docker builds</li>
<li>deployments to S3, ECS, or Lambda</li>
</ul>
<p>It's fast, simple, and easy to get started with.</p>
<h3>It's great… until things start to grow and get a bit more complicated.</h3>
<p>As the project grows:</p>
<ul>
<li>you add more steps</li>
<li>jobs trigger other jobs</li>
<li>secrets start piling up</li>
<li>and debugging turns into trial and error</li>
</ul>
<p>Suddenly, things feel fragile — like one small change might break everything.</p>
<p>That's usually the moment teams start looking for something more stable — like <a href="https://docs.gitlab.com/ci/">GitLab CI</a>.</p>
<hr />
<h2>GitLab CI</h2>
<p><strong>GitLab CI isn't flashy, but it's solid.</strong></p>
<p>Everything lives in one file — <code>.gitlab-ci.yml</code>.
You define jobs, stages, environments, approvals — all in one place.</p>
<p>It gives you:</p>
<ul>
<li>consistency</li>
<li>built-in security checks</li>
<li>preview environments</li>
<li>full visibility from commit to production</li>
</ul>
<p>Once it's set up, it stays out of your way and just works.</p>
<p>It's great for teams that ship often and need predictability more than bells and whistles.</p>
<hr />
<h2>Argo Workflows</h2>
<p>But what if you need more than predictability?</p>
<p>What if your pipeline isn't just for deployments but part of the product itself?</p>
<p>That's where <a href="https://argo-workflows.readthedocs.io/en/stable/">Argo Workflows</a> comes in.</p>
<p><strong>Argo isn't just a CI/CD tool</strong> — it's a full-on pipeline engine for Kubernetes.</p>
<p>You define workflows as DAGs — <em>Directed Acyclic Graphs</em>.
Each step runs as its own pod.
Dependencies are clear.
Everything is observable.</p>
<p>It's great for:</p>
<ul>
<li>ML training</li>
<li>ETL pipelines</li>
<li>staged microservice deploys</li>
<li>or anything that reacts to events</li>
</ul>
<p>Argo gives you full control and visibility — right inside the cluster.</p>
<h3>But let's be honest: it's not beginner-friendly.</h3>
<p>You'll need:</p>
<ul>
<li>Helm</li>
<li>RBAC</li>
<li>persistent storage</li>
<li>ingress setup</li>
<li>and a team that can manage the whole thing</li>
</ul>
<p>Argo isn't something you “just try.”</p>
<p>It's for teams that treat pipelines as real infrastructure — because that's what they are.</p>
<hr />
<h2>They All Have Their Place</h2>
<p><strong>And that's true for all of them — GitHub Actions, GitLab CI, Argo.</strong>
They all have their place.</p>
<p>So — how do all these tools actually hold up when it's not just a side project, but real production work?</p>
<p>Let's compare real-world usage — the good and the painful.</p>
<h3>GitHub Actions:</h3>
<ul>
<li>Great for small, fast-moving projects</li>
<li>If you've got fewer than 10 jobs, it's smooth</li>
<li>But beyond that? It can get messy fast</li>
<li>Debugging turns into guesswork</li>
</ul>
<h3>GitLab CI:</h3>
<ul>
<li>Works well for teams with structure</li>
<li>Supports approvals, environments, and solid release flows</li>
<li>It's quiet, reliable, and gets out of your way</li>
<li>Which is exactly what you want at scale</li>
</ul>
<h3>Argo Workflows:</h3>
<ul>
<li>This is for when <strong>delivery is the product</strong></li>
<li>When pipelines aren't just support tools, but essential parts of your platform</li>
<li>It's complex, but if your team's ready — it's incredibly powerful</li>
</ul>
<hr />
<h2>The Real Test: When Something Breaks</h2>
<p>Not in a demo. Not on a sunny-day deploy.</p>
<p><strong>When it's Friday at 4 PM, someone just merged to main…</strong></p>
<p>You've closed your laptop, grabbed your bag —
And then Slack pings: <em>“deployment failed.”</em></p>
<p>That's when your CI/CD setup shows its true colors.</p>
<hr />
<h2>Choose What Fits Your Team</h2>
<p>So yeah, the tools you pick <em>do</em> matter.</p>
<p>We've looked at the trade-offs, the patterns, and the pain points.</p>
<p>Now it's your turn to decide what fits your team — and your reality.</p>
<p>What's going to keep your pipelines healthy and your Fridays peaceful?</p>
<p>Thanks for reading! Be sure to watch the <a href="https://youtu.be/20Pr6g6iWpI">video version</a> for extra insights and helpful visuals.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="CI/CD"/>
    <category term="DevOps"/>
    <category term="GitHub"/>
    <category term="GitLab"/>
    <category term="Argo CD"/>
    <category term="GitOps"/>
  </entry>
  <entry>
    <title>What Actually Runs the Internet? A No-Stress Guide to Containers &amp; Kubernetes</title>
    <link href="https://devops.pink/what-actually-runs-the-internet-a-no-stress-guide-to-containers-kubernetes/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/what-actually-runs-the-internet-a-no-stress-guide-to-containers-kubernetes/</id>
    <published>2025-05-05T00:00:00.000Z</published>
    <updated>2025-05-05T00:00:00.000Z</updated>
    <summary>Discover how containers, Docker, Kubernetes &amp; ContainerD power modern apps — explained simply, even for total beginners.</summary>
    <content type="html"><![CDATA[<p>Hey, brilliant tech minds (and future ones too)! ‍✨</p>
<p>You've probably heard words like Docker, Kubernetes, or ContainerD flying around in tech convos (or LinkedIn posts you scroll past ). But what <em>actually</em> are they? And do you really need to know?</p>
<p>Short answer: <strong>YES</strong> — especially if you want to sound like <em>that girl</em> in tech and truly understand what makes apps like Netflix, Zoom, and Spotify tick. Let's break it down — no jargon, just good vibes and relatable examples. ‍♀️✨</p>
<hr />
<h2>Imagine You're Baking Cookies</h2>
<p>Stay with me — this actually makes sense.</p>
<p>You've got the perfect cookie recipe. It's so good that you want people all over the world to bake the exact same cookies. But what if someone forgets sugar? Or uses the wrong oven temp?</p>
<p>So, genius you packs everything into a cute little cookie kit: ingredients, step-by-step instructions, even the timer. Now, anyone, anywhere, can make the same perfect batch.</p>
<p>That's what <strong>containers</strong> are in the tech world. They're like little kits that package everything an app needs — the code, the tools, the settings — so it runs <em>exactly</em> the same no matter where it is: on your laptop, in the cloud, wherever.</p>
<hr />
<h2>Meet Docker — the Container Queen</h2>
<p><strong>Docker</strong> is the tool that makes those little cookie kits (a.k.a. containers). It helps devs bundle up apps so they can run anywhere, easily.</p>
<p>Think of Docker as your fave meal-prep delivery service. It makes the packing and shipping of apps smooth and fast. One command — boom — your app is packaged, ready to ship.</p>
<p>But wait — what happens when you have a <em>lot</em> of containers to manage? Like, dozens of them? That's where it gets spicy…</p>
<hr />
<h2>Kubernetes: Your App's Event Planner</h2>
<p><strong>Kubernetes</strong> is like the logistics queen who makes sure everything runs perfectly — containers launching at the right time, recovering when they crash, scaling when there's more demand.</p>
<p>Here's what Kubernetes does:</p>
<ul>
<li>Keeps your app running if something breaks</li>
<li>Spins up more containers when things get busy</li>
<li>Updates stuff behind the scenes without breaking the app</li>
<li>Basically? It's the ultimate control freak — in a good way</li>
</ul>
<p>Think: a super-organized girlboss project manager who <em>never</em> misses a beat. ‍</p>
<hr />
<h2>And Then There's ContainerD — the Quiet One</h2>
<p><strong>ContainerD</strong> might sound like the awkward cousin at the tech party — but don't underestimate it.</p>
<p>Back in the day, Docker did <em>everything</em> — packaging, running, managing. But that got messy. So smart tech folks decided to split things up.</p>
<p>ContainerD is now the lightweight tool that handles just one job: <strong>running containers</strong>. No drama, no distractions.</p>
<p>And here's the tea: <strong>Kubernetes now uses ContainerD directly instead of Docker.</strong><br />
<em>(Because Docker isn't just a runtime — it's a full suite of tools. Kubernetes only needs the “engine” part to do its job.)</em></p>
<p>Psst — if you ever hear the word <strong>CRI</strong> floating around, here's the scoop:<br />
<strong>CRI (Container Runtime Interface)</strong> is just how Kubernetes <em>talks</em> to runtimes like ContainerD. That's it. Nothing scary.</p>
<p>TL;DR? Docker's still fab for development, but in the big leagues (like production apps), <strong>Kubernetes + ContainerD = power duo</strong>.</p>
<hr />
<h2>So Why Should You Even Care?</h2>
<p>Even if you're not writing code, understanding how modern apps run is like knowing how your iPhone or Wi-Fi works. It's just part of being tech-savvy in 2025.</p>
<p>Let's recap:</p>
<ul>
<li><strong>Containers</strong> = app-in-a-box</li>
<li><strong>Docker</strong> = the packer/delivery girl</li>
<li><strong>Kubernetes</strong> = the event planner/project manager</li>
<li><strong>ContainerD</strong> = the lowkey engine that runs the whole show</li>
</ul>
<p>This is the invisible magic behind your fave platforms. And now? You're officially smarter than 90% of the internet. ✨</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Containers"/>
    <category term="Kubernetes"/>
    <category term="Networking"/>
    <category term="Cloud Native"/>
  </entry>
  <entry>
    <title>How Generative AI Actually Understands You</title>
    <link href="https://devops.pink/how-generative-ai-actually-understands-you/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/how-generative-ai-actually-understands-you/</id>
    <published>2025-04-28T00:00:00.000Z</published>
    <updated>2025-04-28T00:00:00.000Z</updated>
    <summary>Discover how generative AI understands text, images, video, and sound — explained simply with real examples of tokens, chunks, and embeddings.</summary>
    <content type="html"><![CDATA[<p>Hey, lovely tech queens! ‍✨</p>
<p>You've probably seen AI writing blog posts, drawing epic art, narrating stories, and even making short films.</p>
<p>But how does it <em>actually</em> know what you're asking for?</p>
<p>Spoiler: it's not magic — just smart logic, broken into pieces. Like digital LEGO bricks.</p>
<p>Let me break it down for you — simple, fun, and drama-free.</p>
<hr />
<h2>1. What Are Tokens?</h2>
<p><em>Words, but chopped into snackable bites</em></p>
<p>AI doesn't “read” like you and me. It breaks everything you type into little pieces called <strong>tokens</strong>. That could be:</p>
<ul>
<li>a full word (“coffee”)</li>
<li>part of a word (“pro” + “duct”)</li>
<li>or even a symbol (“!”)</li>
</ul>
<p><strong>Example:</strong></p>
<p>You type: <em>“Make me a text about cats”</em></p>
<p>The AI sees: <code>[“Make”, “me”, “a”, “text”, “about”, “cat”, “s”]</code></p>
<p>Why? Because tokens are easy to turn into numbers. And numbers = AI's love language.</p>
<hr />
<h2>2. What's Chunking?</h2>
<p><em>Think: "Don't overwhelm the poor bot"</em></p>
<p>Even the biggest models have a token limit.</p>
<p>So when your input is long — AI breaks it into <strong>chunks</strong>.</p>
<p>Like slicing a pizza: same flavor, easier to handle.</p>
<hr />
<h2>3. What Are Embeddings?</h2>
<p><em>Turning words into vibes (aka numbers)</em></p>
<p>AI doesn't “know” that pizza is tasty. But it turns every token into a set of numbers — called an <strong>embedding</strong> — that shows what the word means <em>and</em> how it connects to others.</p>
<p><strong>Example:</strong></p>
<p>“pizza”, “cheese” and “pepperoni” will have similar embeddings.<br />
“pizza” and “printer”? Not so much.</p>
<p>It's like every word has a location on a map — and similar vibes live near each other.</p>
<p>But wait — what about images and videos?!</p>
<p>Oh girl, this is where it gets spicy. Let me show you:</p>
<hr />
<h2>4. How AI Creates Images</h2>
<p>Tools like <strong>DALL·E</strong>, <strong>Midjourney</strong> and <strong>Stable Diffusion</strong> can turn words into gorgeous visuals.</p>
<p>You type:</p>
<p><em>“A cat wearing a hoodie drinking latte on a Tokyo rooftop”</em></p>
<p>Here's what happens:</p>
<ol>
<li>The prompt turns into tokens</li>
<li>Tokens → embeddings</li>
<li>AI pulls what it knows about cats, hoodies, lattes &amp; Tokyo</li>
<li>Then it <strong>generates</strong> a whole new image — pixel by pixel</li>
</ol>
<p>It's not copying. It's imagining.</p>
<p>Like a creative bestie who's trained on billions of Pinterest boards.</p>
<hr />
<h2>5. How AI Makes Videos</h2>
<p>Now it gets cinematic.</p>
<p>Models like <strong>Runway Gen-2</strong> and <strong>Pika Labs</strong> are making full videos from just text prompts.</p>
<p>You type:</p>
<p><em>“A goldfish flying through space”</em></p>
<p>Boom — short movie.</p>
<p>Here's the magic:</p>
<ul>
<li>It creates the first frame like a still image</li>
<li>Then builds more, one by one</li>
<li>Adds smooth transitions, motion, and vibe</li>
<li>Glues it all together as a video</li>
</ul>
<p>Basically: AI = your personal animation studio.</p>
<hr />
<h2>6. How AI Understands Sound</h2>
<p>With tools like <strong>ElevenLabs</strong>, <strong>Suno</strong>, or <strong>MusicLM</strong>, AI can:</p>
<ul>
<li>Read your text out loud (like, <em>perfectly</em>)</li>
<li>Create music from a vibe</li>
<li>Analyze your voice for emotion or tone</li>
</ul>
<p><strong>Example:</strong></p>
<p>You write: <em>“Say it like you're a TED speaker hyping the crowd”</em></p>
<p>AI delivers with energy and sparkle.</p>
<hr />
<h2>Why Should You Even Care?</h2>
<p>Because when you get how AI <em>thinks</em>, you:</p>
<ul>
<li>Write 10x better prompts</li>
<li>Stop being scared of words like “token” and “embedding”</li>
<li>Use AI like a pro, not a guessing game</li>
<li>Can explain it to your boss, your bestie, or your future investor</li>
</ul>
<hr />
<h2>Let's Wrap This Up:</h2>
<p>AI doesn't read minds.
But it does:</p>
<ul>
<li>Break your words into <strong>tokens</strong></li>
<li>Turn them into <strong>numbers (embeddings)</strong></li>
<li>Use patterns it learned to <strong>predict</strong> what you want</li>
</ul>
<p>And then — boom.</p>
<p>Text, image, video, sound — whatever your imagination served, it delivers.</p>
<p>AI isn't magic. But it <em>is</em> insanely good at pattern recognition.</p>
<p>And now that you speak its language, you're basically unstoppable.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="Generative AI"/>
    <category term="AI"/>
    <category term="LLM"/>
  </entry>
  <entry>
    <title>How AI Models Are Really Trained - From Idea to Reality</title>
    <link href="https://devops.pink/how-ai-models-are-really-trained-from-idea-to-reality/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/how-ai-models-are-really-trained-from-idea-to-reality/</id>
    <published>2025-04-20T00:00:00.000Z</published>
    <updated>2025-04-20T00:00:00.000Z</updated>
    <summary>Learn how AI models are trained step by step — from data prep to deployment. Simple, beginner-friendly guide with real-life examples.</summary>
    <content type="html"><![CDATA[<p>Hey girls! And you, smart tech kings, too!</p>
<p>AI is everywhere — in your phone, your feed, your shopping cart.
But how does it actually work behind the scenes?</p>
<p>Let's break it down:</p>
<p>How do AI models get built, trained, and sent out into the world?</p>
<p>It's not magic. It's not sci-fi.
It's a step-by-step process — and I'm going to walk you through all of it, beginner-style.</p>
<hr />
<h2>1. Start With a Real Problem — Not “Let's Just Do AI”</h2>
<p>Before any coding or fancy model building, there has to be a reason.</p>
<p>Companies don't build AI “just because.” They ask:</p>
<ul>
<li>Can we reduce product returns?</li>
<li>Spot fake reviews faster?</li>
<li>Recommend better stuff to users?</li>
<li>Predict when a machine will break?</li>
</ul>
<p><strong>First step:</strong> Know exactly what you're solving.</p>
<p>If you skip this, the model might be cool — but totally useless.</p>
<hr />
<h2>2. Collect and Clean the Data (aka Your Model's Food)</h2>
<p>Let's say you want to predict which customers might leave your app.</p>
<p>You'll need data like:</p>
<ul>
<li>When they joined</li>
<li>How often they log in</li>
<li>What they clicked</li>
<li>If they stayed or left</li>
</ul>
<p>But data doesn't come cute and clean. Ever.</p>
<p>So first, you clean it:</p>
<ul>
<li>Remove typos, duplicates, and empty cells</li>
<li>Format everything consistently</li>
<li>Spot any weirdness (like someone logging in 300 times a day — um, bot?)</li>
</ul>
<p><strong>Think of this as skincare for your model:</strong></p>
<p>If you skip the cleansing, nothing else will work right.</p>
<hr />
<h2>3. Split the Data: Train, Validate, Test</h2>
<p>Now that your data's clean, don't toss it all into the model at once.</p>
<p>Split it into:</p>
<ul>
<li><strong>Training set:</strong> Where your model learns</li>
<li><strong>Validation set:</strong> To check progress while it learns</li>
<li><strong>Test set:</strong> To see if it actually works in real life</li>
</ul>
<p><strong>Imagine baking cookies:</strong></p>
<ul>
<li>Training = practicing the recipe</li>
<li>Validation = taste-testing as you go</li>
<li>Testing = sharing with friends to see if they love them (or not)</li>
</ul>
<p>A common split is 80/10/10 — but it depends on your project.</p>
<hr />
<h2>4. Train the Model (Finally!)</h2>
<p>Now the real fun begins — your model starts to “learn.”</p>
<p>But how?</p>
<p>Let's say you give it emails labeled “spam” or “not spam.”</p>
<p>The model:</p>
<ol>
<li>Makes a guess</li>
<li>Checks the answer</li>
<li>Adjusts if it's wrong</li>
<li>Tries again</li>
</ol>
<p>It repeats this thousands of times until it gets better at spotting patterns.</p>
<p><strong>It's not memorizing — it's learning how to generalize.</strong></p>
<p>Like, “If the subject line says FREE MONEY!!!... hmm, might be spam.”</p>
<hr />
<h2>5. Tune the Model — Like Tweaking a Recipe</h2>
<p>Even after training, your model might need fine-tuning.</p>
<p>This is called <strong>hyperparameter tuning</strong> — sounds intimidating, but it's not.</p>
<p>Think of it like adjusting a cookie recipe:</p>
<ul>
<li>Add more vanilla?</li>
<li>Bake longer?</li>
<li>Lower the oven temp?</li>
</ul>
<p>In model terms:</p>
<ul>
<li>Learning rate</li>
<li>Number of layers</li>
<li>Batch size</li>
</ul>
<p>And guess what? Tools like <strong>Amazon SageMaker</strong> can tune this stuff automatically.</p>
<hr />
<h2>6. Evaluate the Model — Is It Actually Good?</h2>
<p>Before launch, you have to test the model on data it hasn't seen before.</p>
<p>We use metrics like:</p>
<ul>
<li><strong>Accuracy:</strong> How often is it right?</li>
<li><strong>Precision:</strong> When it says “yes,” is it correct?</li>
<li><strong>Recall:</strong> Did it find all the real “yeses”?</li>
<li><strong>F1 Score:</strong> A balance of precision and recall</li>
</ul>
<p><strong>Example:</strong></p>
<p>If your model says “this customer will leave” —<br />
Precision = how often it's right.<br />
Recall = how many of the leaving customers it actually found.</p>
<hr />
<h2>7. Deploy the Model — Send It Into the World</h2>
<p>Once your model is trained and tested, it's time to let it do its job!</p>
<p>There are two common ways to use it:</p>
<ul>
<li><strong>Real-time</strong> — for instant decisions (like chatbots or spam filters)</li>
<li><strong>Batch</strong> — for scheduled jobs (like weekly reports or daily analysis)</li>
</ul>
<p>You'll often use cloud tools to make this happen (like some from Amazon — SageMaker, for example).</p>
<p><strong>Don't worry if these sound unfamiliar</strong> — you don't need to be an engineer to understand the process. Think of them as the behind-the-scenes crew helping your model go live.</p>
<hr />
<h2>8. Monitor and Update — Your Model Still Needs You</h2>
<p>Just because it's deployed doesn't mean you're done.</p>
<p>The world changes. People change. So the model needs to adapt.</p>
<p>You (or your tools) will:</p>
<ul>
<li>Track weird predictions</li>
<li>Notice when performance drops</li>
<li>Retrain the model with new data if needed</li>
</ul>
<p>Think of it like skincare touch-ups — even the best routine needs updates.</p>
<hr />
<h2>Quick Recap — 8 Steps to Train a Model:</h2>
<table>
<thead>
<tr>
<th>Step</th>
<th>What's Happening</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Define a real business problem</td>
</tr>
<tr>
<td>2</td>
<td>Collect and clean the data</td>
</tr>
<tr>
<td>3</td>
<td>Split data into train / val / test</td>
</tr>
<tr>
<td>4</td>
<td>Train the model</td>
</tr>
<tr>
<td>5</td>
<td>Tune it (aka adjust the settings)</td>
</tr>
<tr>
<td>6</td>
<td>Test it with unseen data</td>
</tr>
<tr>
<td>7</td>
<td>Deploy it to do real work</td>
</tr>
<tr>
<td>8</td>
<td>Monitor and retrain when needed</td>
</tr>
</tbody>
</table>
<hr />
<h2>Final Thoughts (From a Girl Who Gets It)</h2>
<p>If you thought training a model meant pressing a button… now you know it's way more than that.</p>
<p>But also? It's totally doable.</p>
<p>When you break it into simple steps, everything starts to click.</p>
<p>Whether you want to build models, manage AI teams, or just sound confident when someone says “pipeline” — <strong>you've got this</strong>.</p>
<p>Stay curious. Keep learning.</p>
<p>And remember: great models run on clean data and smart decisions — just like you.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="AI"/>
    <category term="ML"/>
    <category term="Training"/>
    <category term="Models"/>
  </entry>
  <entry>
    <title>Is Kubernetes Overkill? Why You Probably Don&apos;t Need It</title>
    <link href="https://devops.pink/is-kubernetes-overkill-why-you-probably-dont-need-it/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/is-kubernetes-overkill-why-you-probably-dont-need-it/</id>
    <published>2025-04-19T00:00:00.000Z</published>
    <updated>2025-04-19T00:00:00.000Z</updated>
    <summary>Is Kubernetes overkill for your app? Learn when it adds complexity, when it&apos;s worth it, and which simpler, scalable alternatives might fit better.</summary>
    <content type="html"><![CDATA[<p>Today, we're diving into a question that more and more teams are starting to ask:</p>
<p><strong>Is Kubernetes overkill?</strong> And maybe more importantly, <strong>why do we keep spinning up clusters for things that don't actually need them?</strong></p>
<p>Let's start with this:</p>
<p><a href="https://kubernetes.io/">Kubernetes</a> is powerful. Many of us use it daily, and it solves real problems. But let's not pretend it's always the right solution.</p>
<p>Because sometimes? <strong>It adds more complexity than it removes.</strong></p>
<p>So, let's talk honestly about when Kubernetes fits — and when it absolutely doesn't.</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="BLMQx-MM4Io"
title="Is Kubernetes Overkill? Why You Probably Don't Need It"
/&gt;</p>
<hr />
<h2>When Kubernetes Is the Wrong Tool</h2>
<p>We've all seen it:</p>
<p>Teams reaching for Kubernetes when it's the wrong tool for the job. That's like lighting a birthday candle with a flamethrower.</p>
<p>Here are a few real-world examples:</p>
<h3>Example One: The Static Site</h3>
<p>A simple marketing page — no backend, no database. Just HTML and maybe a bit of JavaScript. And yet… it's deployed in Kubernetes. With <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/">Ingress</a>, <a href="https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/">autoscaling</a>, <a href="https://prometheus.io/">Prometheus</a> — the works. That's like renting a crane to hang a poster.</p>
<p>You don't need Kubernetes. Just throw it on <a href="https://www.netlify.com/">Netlify</a> or <a href="https://aws.amazon.com/s3/">S3</a> — done. No cluster, no crying. They're fast, cheap, reliable — and require zero YAML therapy.</p>
<h3>Example Two: The Monthly Monolith</h3>
<p>One app. Updated once a month. No scaling, no rollout drama — it just runs. But somehow, there's a Helm chart, a cluster, and half a dozen manifests.</p>
<p><strong>Why?</strong></p>
<p>A basic <a href="https://aws.amazon.com/ec2/">VPC</a> and <a href="https://docs.docker.com/reference/cli/docker/container/run/">docker run</a> would've done the job. Fewer moving parts. No cluster to babysit.</p>
<h3>Example Three: The Small Team with a Big Cluster</h3>
<p>Two or three devs. No dedicated platform engineer. No one watching metrics. But there's a cluster anyway.</p>
<p>Pods crash, Argo's out of sync, PVCs break — and no one's watching. Nobody's sure if this is platform engineering or just chaos with better branding.</p>
<hr />
<h2>When Kubernetes Does Make Sense</h2>
<p>To be fair, <strong>Kubernetes has its place</strong>.</p>
<p>When it fits, it's amazing. Let's look at a few scenarios where Kubernetes actually makes sense:</p>
<h3>1. Complex Service Architectures</h3>
<ul>
<li>You're running multiple services — each with configs, secrets, health checks, and deploy flows.</li>
<li>You need orchestration, service discovery, and scheduling.</li>
</ul>
<p>Kubernetes was built for this.</p>
<h3>2. Dynamic Scaling and Resilience</h3>
<ul>
<li>You're dealing with traffic spikes.</li>
<li>You want self-healing.</li>
<li>You want the system to recover before you even notice something's wrong.</li>
</ul>
<p>That's Kubernetes at its best.</p>
<h3>3. Platform Engineering</h3>
<p>You're not just deploying apps — you're building an internal platform.</p>
<p>With <a href="https://opengitops.dev/">GitOps</a>, <a href="https://argo-cd.readthedocs.io/en/stable/">Argo</a>, <a href="https://helm.sh/">Helm</a>, <a href="https://www.openpolicyagent.org/">policy-as-code</a> — and a team that actually understands it all.</p>
<p>Here, Kubernetes gives you standardization, control, governance, and scale.</p>
<hr />
<h2>The Real Catch: Kubernetes Doesn't Fix Your Problems</h2>
<p>It <strong>distributes</strong> them.</p>
<ul>
<li>If you had no observability before, now your blind spots stretch across nodes.</li>
<li>If your CI/CD pipeline was fragile, now it's fragile <em>and containerized</em>.</li>
<li>If no one could debug a crash before, now it's hidden behind layers of abstraction.</li>
</ul>
<p>Kubernetes is powerful. But it <strong>amplifies</strong> whatever's already in your system — good or bad.</p>
<hr />
<h2>Ask Yourself — Honestly:</h2>
<ul>
<li>Do you have a DevOps or platform team to maintain the cluster?</li>
<li>Are you running 5+ services that truly need orchestration?</li>
<li>Do you require auto-scaling, self-healing, and complex rollout strategies?</li>
<li>Are you confidently using tools like <a href="https://helm.sh/">Helm</a>, <a href="https://argo-cd.readthedocs.io/en/stable/">Argo CD</a>, <a href="https://prometheus.io/">Prometheus</a> — and using them well?</li>
<li>Can your team debug pod crashes, PVC issues, and weird networking glitches?</li>
</ul>
<p>If the answer to most of those is “not really,” then maybe Kubernetes isn't your next step.</p>
<p><strong>And that's totally okay.</strong></p>
<hr />
<h2>There's No Shame in Choosing Simpler Tools</h2>
<p>Especially when they work better.</p>
<p>We've got great alternatives:</p>
<ul>
<li><a href="https://docs.docker.com/compose/">Docker Compose</a> + <a href="https://www.freedesktop.org/wiki/Software/systemd/">systemd</a></li>
<li><a href="https://aws.amazon.com/fargate/">ECS Fargate</a></li>
<li><a href="https://cloud.google.com/run">Cloud Run</a></li>
<li><a href="https://render.com/">Render</a></li>
<li><a href="https://www.heroku.com/">Heroku</a></li>
<li>A good old <a href="https://aws.amazon.com/ec2/">VPC</a> instance and some solid <a href="https://github.com/features/actions">CI/CD</a></li>
</ul>
<p>Sometimes, the best tool isn't the most sophisticated — it's the one your team actually understands and can support long-term.</p>
<hr />
<h2>Let Me Be Real With You</h2>
<p><strong>Kubernetes is not a badge of honor.</strong> It's not a maturity checklist. It's just a complex, powerful tool, and it only makes sense when the problem truly calls for it.</p>
<p>If it helps, great. If it doesn't? Skip the cluster. Skip the chaos. <strong>Move forward with something that fits.</strong> Don't build a space shuttle when all you really need is… a bicycle.</p>
<p>Thanks for reading! Be sure to watch the <a href="https://youtu.be/BLMQx-MM4Io">video version</a> for extra insights and helpful visuals.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Kubernetes"/>
    <category term="Orchestration"/>
    <category term="Best Practices"/>
  </entry>
  <entry>
    <title>What Kind of Data Does AI Use</title>
    <link href="https://devops.pink/what-kind-of-data-does-ai-use/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/what-kind-of-data-does-ai-use/</id>
    <published>2025-04-14T00:00:00.000Z</published>
    <updated>2025-04-14T00:00:00.000Z</updated>
    <summary>Discover the main types of data AI uses — structured, unstructured, labeled, and unlabeled — explained in plain words with fun, relatable examples.</summary>
    <content type="html"><![CDATA[<p>Hey, you brilliant tech babes (and kings — I see you too )!</p>
<p>You already know <em>how</em> AI learns and <em>where</em> it shows up in real life.
But there's one more thing you absolutely need to know to truly get AI:</p>
<p>It's all about the data, darling.<br />
Like, <strong>literally</strong>. No data = no AI.</p>
<p>Let's break it down, step by step — from the types of data to why they matter, and what can go wrong if your data's a mess (spoiler: <em>everything</em>).</p>
<p>So grab your iced latte and let's talk dirty — <em>data dirty</em>.</p>
<hr />
<h2>Structured vs. Unstructured — What's the Tea?</h2>
<h3>Structured Data = Neat girl energy</h3>
<p>Think spreadsheets, columns, drop-down menus. Basically, info that fits in tidy rows and is super easy to organize.</p>
<p><strong>Real-life example:</strong><br />
Your online store tracks shoppers by name, age, and how much they spent last month.</p>
<ul>
<li>Name: Emma</li>
<li>Age: 28</li>
<li>Purchase: $89.99</li>
<li>VIP status: Yes</li>
</ul>
<p>Perfect for AI to eat up and analyze.<br />
This kind of data is the go-to for supervised learning. It's simple, predictable, and super model-friendly.</p>
<h3>Unstructured Data = Total chaos... but gold</h3>
<p>This is all the messy stuff AI needs to decode:</p>
<ul>
<li>Tweets</li>
<li>DMs</li>
<li>Selfies</li>
<li>Voice notes</li>
<li>TikToks</li>
<li>Review texts</li>
<li>Screenshots of what your friend sent you at 2am</li>
</ul>
<p>This data is harder to process — but it's also <strong>where the juicy, human stuff lives</strong>.<br />
With the right tools (like NLP or computer vision), AI can <em>feel</em> what people are saying, seeing, and reacting to.</p>
<hr />
<h2>The Data Types AI Actually Works With</h2>
<p>Here's what shows up in real-world projects — broken down like a cute cheat sheet:</p>
<table>
<thead>
<tr>
<th>Data Type</th>
<th>Looks Like…</th>
<th>Example</th>
<th>What AI Does With It</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Numerical</strong></td>
<td>Numbers, prices, scores</td>
<td>5, 29.99, 90%</td>
<td>Normalize, scale, compare</td>
</tr>
<tr>
<td><strong>Categorical</strong></td>
<td>Labels, options, categories</td>
<td>"Beginner", "NY", "Tote bag"</td>
<td>Convert to machine-friendly codes</td>
</tr>
<tr>
<td><strong>Text</strong></td>
<td>Reviews, messages, bios</td>
<td>“Ugh, I loved it so much!”</td>
<td>Understand mood, topic, emotion</td>
</tr>
<tr>
<td><strong>Image</strong></td>
<td>Selfies, product pics, screenshots</td>
<td>Photo of a red dress</td>
<td>Detect shapes, colors, objects</td>
</tr>
<tr>
<td><strong>Audio</strong></td>
<td>Voice memos, customer calls</td>
<td>Voice note: “Sooo... mad or just tired?”</td>
<td>Turn into text or audio features</td>
</tr>
<tr>
<td><strong>Video</strong></td>
<td>Insta Reels, tutorials, dashcams</td>
<td>Makeup GRWM TikTok</td>
<td>Analyze image + sound together</td>
</tr>
</tbody>
</table>
<hr />
<h2>⚙️ What Makes Data “Model-Ready”?</h2>
<p>You don't just throw your raw data into an AI model and hope for the best — that's like showing up to a glam shoot with bed hair and mismatched socks.</p>
<p>Your data needs a serious prep routine:</p>
<ol>
<li><strong>Cleaning</strong> — remove duplicates, typos, missing stuff</li>
<li><strong>Formatting</strong> — make sure prices are numbers, dates are dates, and text is readable</li>
<li><strong>Labeling</strong> — if your model needs answers, you have to tell it what's what (e.g. “This is a cat. That's a croissant.”)</li>
<li><strong>Balancing</strong> — avoid over-representing one side (like 90% apples and 10% oranges — we're not doing fruit bias today)</li>
</ol>
<hr />
<h2>Why Bad Data = Bad AI</h2>
<p>Let's be real: even the smartest AI won't save your butt if your data's a mess.<br />
Here's what happens if you skip the prep:</p>
<ul>
<li>Your model makes wrong predictions</li>
<li>It becomes biased (like recommending only men's products if it's seen mostly male data)</li>
<li>It just... breaks. And blames you silently.</li>
</ul>
<p><strong>Example:</strong></p>
<p>Imagine you want your AI to recognize whether a voice note is angry or chill.<br />
But most of your training data is people being excited.<br />
Now when someone calmly says “I'm fine,” the model might think they're thrilled — or worse, lying.</p>
<p>That's not AI's fault. That's ✨data drama✨.</p>
<hr />
<h2>So... What Should You Know as a Beginner?</h2>
<p>Even if you're not building models (yet), just knowing this gives you a major edge:</p>
<ul>
<li>Data is the <em>fuel</em> AI runs on</li>
<li>Clean, balanced data = accurate, smart AI</li>
<li>Unstructured data is harder, but so much more real and emotional</li>
<li>You can totally start working with it — one TikTok caption or product review at a time</li>
</ul>
<hr />
<h2>Final Thoughts from a Data-Loving IT Girl</h2>
<p>People think AI is all about code and algorithms. But girl, no.<br />
<strong>AI is 80% data, 20% logic — and 100% what you feed it.</strong></p>
<p>So if you're learning AI, working in tech, or just curious about how Netflix knows you want to watch K-dramas at 2am... it all comes down to the data.</p>
<p>Clean it. Understand it. Respect it.</p>
<p>Because even your future AI model needs a solid skincare routine before it glows.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="AI"/>
    <category term="Data"/>
    <category term="ML"/>
  </entry>
  <entry>
    <title>DevSecOps Explained - Security for DevOps in 2025</title>
    <link href="https://devops.pink/devsecops-explained-security-for-devops-in-2025/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/devsecops-explained-security-for-devops-in-2025/</id>
    <published>2025-04-11T00:00:00.000Z</published>
    <updated>2025-04-11T00:00:00.000Z</updated>
    <summary>A no-fluff DevSecOps guide for DevOps engineers. Learn how to build secure pipelines, protect secrets, and integrate security from day one.</summary>
    <content type="html"><![CDATA[<p>Today we're diving into something that sounds a bit technical at first, but is actually super practical: <strong>DevSecOps</strong>.</p>
<p>If you're in DevOps — or planning to get into it — security is not something you can afford to ignore anymore. And don't worry, this isn't going to be full of code or complex theory.</p>
<p>It's a straightforward explanation to help you think like a secure DevOps engineer in 2025. <strong>Let's get into it.</strong></p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="xLah-QzUH50"
title="DevSecOps Explained - Security for DevOps in 2025"
/&gt;</p>
<hr />
<h2>What exactly is DevSecOps?</h2>
<p>Well, DevSecOps simply means: <strong>security isn't something that comes in at the end — it's something that's part of the process from day one.</strong></p>
<p>In the past, developers would write code, DevOps would deploy it, and only then would the security team show up and say, “Wait a second — is this safe?”</p>
<p><strong>DevSecOps flips that around.</strong> It means we're thinking about security from the beginning. It's like <strong>buckling your seatbelt before the car starts moving</strong> — not after an accident happens.</p>
<p>And no, it doesn't mean you need to become a cybersecurity expert. But if you're touching infrastructure, automation, or CI/CD — then yes, <strong>security is part of your job.</strong></p>
<hr />
<h2>Why is this especially important right now?</h2>
<p>Because <strong>things are fast</strong>. Everything is automated. You're deploying through pipelines, spinning up cloud infrastructure in seconds, managing services across environments.</p>
<p><strong>And attackers are adapting to that.</strong></p>
<p>They're not just targeting websites anymore — they're going after your <strong>pipelines, your cloud configs, your secrets, your state files.</strong></p>
<p>All it takes is <strong>one exposed API key</strong>, one public S3 bucket, or one bad permission — and your whole system is at risk.</p>
<p>Plus, with growing <strong>compliance demands</strong>, <strong>customer expectations</strong>, and the <strong>pressure to move quickly</strong> — we simply can't treat security like an afterthought anymore.</p>
<hr />
<h2>How do you actually start thinking like a DevSecOps engineer?</h2>
<p>Let me walk you through a few simple — but powerful — things you can start doing right now.</p>
<p>No need to boil the ocean. Just start here:</p>
<h3>1. Don't hardcode secrets.</h3>
<p>I know it's tempting, but passwords, tokens, keys — <strong>they don't belong in your code. Ever.</strong></p>
<p><strong>Store them safely.</strong> Use something like <a href="https://www.hashicorp.com/en/products/vault">Vault</a>, <a href="https://aws.amazon.com/secrets-manager/">AWS Secrets Manager</a>, or even your <a href="https://docs.github.com/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions">CI/CD platform's built-in secrets</a>.</p>
<p>Think about it like this — would you tape your house key to your front door? No? Then don't leave credentials in your Git repo either.</p>
<h3>2. Treat your infrastructure as code like it's real code — because it is.</h3>
<p><strong>Terraform files, Kubernetes configs, Ansible playbooks</strong> — they can all introduce risks.</p>
<p>Use tools like <a href="https://github.com/aquasecurity/tfsec">tfsec</a>, <a href="https://www.checkov.io/">Checkov</a>, or <a href="https://snyk.io/">Snyk</a> to scan for misconfigurations. They'll catch things you might miss.</p>
<h3>3. Lock down your pipelines.</h3>
<p>Your <strong>CI/CD has a ton of power</strong>. It can deploy apps, spin up servers, change production.</p>
<p>That's not something just anyone should have access to.</p>
<ul>
<li><strong>Keep it controlled.</strong></li>
<li><strong>Use approvals.</strong></li>
<li><strong>Don't give out admin access freely.</strong></li>
</ul>
<h3>4. Be intentional with permissions.</h3>
<p>Use the <strong>principle of least privilege</strong>.</p>
<p>Give people — and systems — only the access they actually need. Nothing more.</p>
<h3>5. Don't forget observability.</h3>
<ul>
<li><strong>Turn on logging.</strong></li>
<li><strong>Monitor who's doing what.</strong></li>
<li><strong>Set up alerts for strange behavior.</strong></li>
</ul>
<p>You can't respond to what you can't see.</p>
<hr />
<h2>Now let me be honest...</h2>
<p>Some of the <strong>biggest security issues I've seen didn't come from complex hacks</strong>.<br />
They came from <strong>simple, overlooked mistakes</strong>:</p>
<ul>
<li>Leaving an S3 bucket open “just for testing” and forgetting to close it</li>
<li>Accidentally pushing secrets to a public Git repo</li>
<li>Letting the whole team share a single admin account</li>
<li>Storing sensitive Terraform state files locally, unencrypted</li>
<li>Skipping proper environments and pushing straight to production because staging was down</li>
</ul>
<p>Each of these might seem small in the moment — but <strong>they can open the door to serious problems later.</strong></p>
<hr />
<h2>If you're new to all this — where do you begin without feeling overwhelmed?</h2>
<p>Here's a simple place to start:</p>
<p>✅ Move your secrets out of your codebase<br />
✅ Store your Terraform state in a secure, remote backend with locking<br />
✅ Add <strong>one</strong> security scanner to your workflow — just one is already progress<br />
✅ Review infrastructure changes like you review application code<br />
✅ Enable basic logging and alerting<br />
✅ And start asking the question: “What could go wrong if this fails or leaks?”</p>
<p>That mindset shift is huge.</p>
<p><strong>Security isn't about being paranoid — it's about being prepared.</strong></p>
<hr />
<h2>To wrap this up:</h2>
<p><strong>DevSecOps isn't just a new tool or framework. It's a way of working.</strong> You're not just building systems that work — you're building systems that are <strong>resilient</strong>, <strong>secure</strong>, and <strong>ready to scale</strong>.</p>
<p>Thanks for reading! Be sure to watch the <a href="https://youtu.be/xLah-QzUH50">video version</a> for extra insights and helpful visuals.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="DevSecOps"/>
    <category term="Security"/>
    <category term="DevOps"/>
    <category term="Best Practices"/>
  </entry>
  <entry>
    <title>How AI Learns — and Where It&apos;s Actually Used</title>
    <link href="https://devops.pink/how-ai-learns-and-where-it-is-actually-used/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/how-ai-learns-and-where-it-is-actually-used/</id>
    <published>2025-04-07T00:00:00.000Z</published>
    <updated>2025-04-07T00:00:00.000Z</updated>
    <summary>How AI learns (supervised, unsupervised, reinforcement) — explained simply, with real-life examples you&apos;ll actually relate to.</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens! And kings — don't act shy, I know you're here. ✨</p>
<p>If you've ever wondered how AI models “learn,” but everything you found online felt like it was written by a robot for robots — don't worry, I got you. Today, I'm breaking it down in the easiest, most human way possible.</p>
<p>We're talking <strong>how AI learns</strong> — and spoiler: it's not magic, just logic + data + the right type of training. There are three main ways machines learn, and honestly? They're kinda relatable.</p>
<p>So grab a matcha (or espresso, I don't judge) — let's go! ☕‍</p>
<hr />
<h2>1. Supervised Learning — Like AI School With a Teacher</h2>
<p>This is the <em>classic classroom</em> situation.</p>
<p>Imagine you're showing someone photos of fruit and saying:</p>
<p>“This one's an apple. This one's an orange. Got it?”<br />
Over time, they start recognizing apples and oranges on their own.</p>
<p>That's exactly how <strong>supervised learning</strong> works.<br />
You give the AI a bunch of examples — <em>with correct labels</em> — and it learns the patterns.</p>
<p>** Example:**</p>
<p>You're building an app to recognize different types of bags (because, yes, I need AI to help me sort my closet).<br />
You feed it photos labeled: tote, backpack, clutch.<br />
Eventually, the model sees a new photo and goes, “Oh, that's a clutch.” Boom.</p>
<p><strong>It learns from:</strong> examples with answers<br />
<strong>Use cases:</strong> spam filters, price predictions, mood detection in texts<br />
<strong>Vibe:</strong> “Tell me what's what, and I'll learn it.”</p>
<hr />
<h2>2. Unsupervised Learning — The “I'll Figure It Out Myself” Energy</h2>
<p>This one's more like throwing someone into a room full of fruit and saying:</p>
<p>“Here's a bunch of stuff. Sort it however makes sense.”<br />
No labels. No clues. Just vibes.</p>
<p>And somehow… they do it.</p>
<p>They group things by color, shape, size — whatever patterns they notice. AI does the same.</p>
<p>** Example:**</p>
<p>You've got hundreds of customers and zero info on who's who.<br />
Your AI analyzes behavior — how often they buy, what they buy, when they shop — and groups them into categories. Now you know who's your VIP and who's just here for the flash sales.</p>
<p><strong>It learns from:</strong> raw, unlabeled data<br />
<strong>Use cases:</strong> customer segmentation, finding weird behavior (hello, fraud), organizing messy info<br />
<strong>Vibe:</strong> “I'm independent and intuitive, thanks.”</p>
<hr />
<h2>3. Reinforcement Learning — Learn by Doing (and Failing)</h2>
<p>Okay, so now imagine you're training your cat to stay off your laptop (been there).</p>
<p>If she stays on the floor — treat.</p>
<p>If she walks across your keyboard mid-Zoom call — no treat.</p>
<p>She figures it out eventually.</p>
<p>That's how <strong>reinforcement learning</strong> works: the AI <em>tries</em>, gets feedback, adjusts, and improves.</p>
<p>It's learning through experience — kind of like how we learn to not trust hotel Wi-Fi again.</p>
<p>** Example:**</p>
<p>Your robot vacuum bumps into your desk chair.<br />
Ouch.<br />
It backs up and tries another route. Over time, it learns the best paths for <em>your</em> space, and it becomes your little clean freak buddy.</p>
<p><strong>It learns from:</strong> trial + error + rewards<br />
<strong>Use cases:</strong> robots, game AI, delivery route optimization<br />
<strong>Vibe:</strong> “Let me try, fail fabulously, and come back stronger.”</p>
<hr />
<h2>Quick Recap — Because We Love a Cute Table</h2>
<table>
<thead>
<tr>
<th>Type of Learning</th>
<th>Learns From</th>
<th>Main Goal</th>
<th>Vibe</th>
</tr>
</thead>
<tbody>
<tr>
<td>Supervised</td>
<td>Examples + right answers</td>
<td>Make accurate predictions</td>
<td>“Teach me &amp; I'll deliver.”</td>
</tr>
<tr>
<td>Unsupervised</td>
<td>Just data</td>
<td>Find patterns or clusters</td>
<td>“Let me figure it out.”</td>
</tr>
<tr>
<td>Reinforcement</td>
<td>Actions + feedback</td>
<td>Learn best strategy</td>
<td>“Trial, error, glow-up.”</td>
</tr>
</tbody>
</table>
<hr />
<h2>Final Thoughts From Your Favorite Tech Girl</h2>
<p>AI doesn't have to be confusing. Once you understand the way it learns — girl, it clicks.</p>
<p>Honestly? It's not that different from how <em>we</em> learn:</p>
<ul>
<li><strong>Supervised:</strong> like school.</li>
<li><strong>Unsupervised:</strong> like figuring out a new city without a map.</li>
<li><strong>Reinforcement:</strong> like finally learning not to text your ex — the hard way.</li>
</ul>
<p>So next time you hear someone mention machine learning, you'll be like:
“Oh, supervised? Cute. Classic.”</p>
<p>And now that you've got the learning part down… let's see where AI is slaying in real life.</p>
<p><strong>Where is AI actually used?</strong></p>
<p>And I don't mean some future-sci-fi-robot-world. I mean right here, right now — in things you already use, buy, click on, and even wear.</p>
<p>Let's take this out of the textbook and into the real world, shall we?</p>
<hr />
<h2>1. Healthcare — Dr. AI Is In</h2>
<p>AI doesn't replace doctors, but it <em>does</em> help them. Think of it like a super-focused assistant who never blinks.</p>
<p>It can analyze medical images, compare test results across thousands of cases, and spot signs of issues faster than the human eye.</p>
<p>No, it's not diagnosing your cold — but it might help flag early signs of something serious before you even feel it.</p>
<p><strong>Girl-coded example:</strong></p>
<p>You get a chest scan. The AI says, “Hey, this tiny area right here? That's worth a closer look.”<br />
The doctor reviews it, confirms it, and you just got a life-saving second opinion. Yas.</p>
<hr />
<h2>2. Retail — AI Is Your (Low-Key) Shopping BFF</h2>
<p>Ever wonder how your fave online store <em>knows</em> you're obsessed with oversized hoodies and anything beige?</p>
<p>Yeah, that's AI.</p>
<p>It tracks what you click, what you buy, what you almost buy, and builds a vibe profile. Then it recommends stuff you're <em>actually</em> into — not just random glitter crop tops (unless that's your thing).</p>
<p><strong>Bonus:</strong></p>
<p>AI helps brands manage stock too. So if data shows it's iced coffee season and everyone's about to panic-buy reusable cups — AI tells them to order extra before shelves go empty.</p>
<hr />
<h2>3. Manufacturing — AI as Quality Control Queen</h2>
<p>Forget waiting for something to break. AI now predicts when machines <em>will</em> break — before they do. It catches tiny signs of wear, monitors equipment in real time, and keeps things smooth and efficient.</p>
<p><strong>In other words:</strong></p>
<p>Instead of “Oops, the machine died,” it's “Heads up, this part might fail in 3 days — wanna fix it now?”<br />
We love a proactive moment.</p>
<hr />
<h2>4. Transportation — Not Just Self-Driving Cars</h2>
<p>Self-driving cars get the spotlight, but AI is <em>everywhere</em> in transportation now.</p>
<p>From traffic light systems that reduce wait times, to delivery apps that find the fastest route <em>even when</em> your street's under construction (again), AI's behind the wheel.</p>
<p><strong>Also:</strong></p>
<p>AI can help plan bus routes, prevent train delays, and basically stop your “I'll be there in 10” from turning into 30.</p>
<hr />
<h2>5. Farming — Yes, Farming Got Smart Too</h2>
<p>Think AI is only for techy city things? Nope.</p>
<p>Farmers are using AI to figure out the best time to plant crops, how much water each field needs, and when to harvest for the best yield.</p>
<p>With drones, sensors, and data analysis, AI can literally say:<br />
“Hey, that row of strawberries looks a little off — might be a pest problem.”</p>
<p>It's like your skincare routine, but for plants.</p>
<hr />
<h2>6. Warehousing &amp; Logistics — Organized Girl Energy</h2>
<p>Ever wonder how your next-day delivery <em>actually</em> happens? AI.</p>
<p>It helps warehouses know where every item is, routes packages in real time, and adjusts on the fly if anything goes wrong.</p>
<p>(And yes, it probably helped choose your delivery slot too.)</p>
<p><strong>Fun fact:</strong><br />
Some warehouses are almost entirely AI-driven. Like, your leggings got packed by a robot. Wild.</p>
<hr />
<h2>7. Customer Service — Not Your Basic Chatbot</h2>
<p>Gone are the days of boring bots that reply with “I didn't get that.”</p>
<p>Today's AI-powered assistants can actually understand your messy, typo-filled question and offer legit solutions. At 3am. Without attitude.</p>
<p><strong>Real example:</strong></p>
<p>You message a beauty brand: “Hey my order is late and I think I put the wrong zip code??”<br />
The AI checks your order, fixes your address, and updates delivery — without making you wait 47 minutes on hold. Iconic.</p>
<hr />
<h2>So… Should You Use AI?</h2>
<p>Let's break it down:</p>
<table>
<thead>
<tr>
<th>Ask yourself…</th>
<th>If yes, AI might help</th>
</tr>
</thead>
<tbody>
<tr>
<td>Do you have data?</td>
<td>✅</td>
</tr>
<tr>
<td>Do patterns repeat in that data?</td>
<td>✅</td>
</tr>
<tr>
<td>Would you love to automate tasks?</td>
<td>✅</td>
</tr>
</tbody>
</table>
<p>If you nodded three times, guess what?<br />
<strong>AI is not too much for you. You're ready.</strong></p>
<hr />
<h2>Final Final Thoughts — Now You <em>Really</em> Get It</h2>
<p>You don't need to code a neural network from scratch to understand AI. You just need to know:</p>
<ul>
<li><strong>How it learns</strong></li>
<li><strong>Where it works</strong></li>
<li><strong>What it needs to succeed</strong></li>
</ul>
<p>And now? You do.</p>
<p>From fashion to farming, playlists to packages — AI is behind so many things we use every day.</p>
<p>It's not science fiction. It's the quiet genius in the background. And you, babe, are officially in the know.</p>
<p>Let's keep learning, building, and leading the smart-girl revolution.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="AI"/>
    <category term="ML"/>
  </entry>
  <entry>
    <title>10 Terraform Interview Questions You Must Know in 2025</title>
    <link href="https://devops.pink/10-terraform-interview-questions-you-must-know-in-2025/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/10-terraform-interview-questions-you-must-know-in-2025/</id>
    <published>2025-04-01T00:00:00.000Z</published>
    <updated>2025-04-01T00:00:00.000Z</updated>
    <summary>Master 10 key Terraform interview questions for 2025 DevOps and Cloud Engineer roles with tips, examples, and expert insights.</summary>
    <content type="html"><![CDATA[<p>If you're preparing for a <strong>Cloud Engineer</strong> or <strong>DevOps Engineer</strong> interview in <strong>2025</strong>, you <strong>must</strong> know Terraform—it's one of the most in-demand tools for managing cloud infrastructure.</p>
<p><strong>Today, we're covering 10 must-know Terraform interview questions</strong> to help you <strong>land your next DevOps job!</strong> Stay tuned for expert tips and real-world examples. Let's jump in!</p>
<p>import VideoPlayer from "@components/VideoPlayer.astro";</p>
<p>&lt;VideoPlayer
videoId="MPj4sTnDPls"
title="10 Terraform Interview Questions You Must Know in 2025"
/&gt;</p>
<hr />
<h2>Question 1: What is Terraform and why should you care?</h2>
<p>So, Terraform is a free tool made by HashiCorp. It lets you manage your cloud infrastructure — like servers, databases, networks — using code instead of clicking around in a user interface like the AWS console.</p>
<p>Basically, you write some config files, and Terraform builds all your resources for you.</p>
<p><strong>Why it's useful:</strong></p>
<ul>
<li>First, you don't have to do things manually anymore.</li>
<li>Second, your environments — dev, test, prod — stay consistent.</li>
<li>And finally, it works with multiple cloud providers like AWS, Azure, and Google Cloud Platform.</li>
</ul>
<p><strong>Example:</strong> Need 5 EC2 instances in AWS? Instead of setting them up one by one, you write a script in Terraform — and it will set everything up for you in one go.</p>
<p><strong>Pro Tip:</strong> If someone asks how Terraform is different from tools like Ansible or CloudFormation, here's a simple way to explain it: <strong>Terraform describes the end goal</strong> — what you want things to look like — while <strong>Ansible</strong> is more about the step-by-step process to get there.</p>
<hr />
<h2>Question 2: What are the main parts of Terraform?</h2>
<p>Let's break it down. There are three main pieces you should know:</p>
<ul>
<li>First, <strong>Providers</strong> — they connect Terraform to cloud platforms like AWS, Azure, GCP, and so on.</li>
<li>Then we have <strong>Modules</strong> — these are chunks of reusable code that help you avoid repeating yourself.</li>
<li>And lastly, there's <strong>State</strong> — this is a file that keeps track of what Terraform has already created.</li>
</ul>
<p><strong>Example:</strong> If you're creating a server on AWS, the provider tells Terraform, "Hey, we're using AWS," and then you can use a module to automatically handle networking, storage, and so on.</p>
<hr />
<h2>Question 3: What is Terraform State and why is it important?</h2>
<p>Terraform State is just a file that remembers everything Terraform has built.</p>
<p>Here's why it matters:</p>
<ul>
<li>First, it helps by keeping track of what already exists in your infrastructure.</li>
<li>Second, it figures out the relationships — or dependencies — between different resources.</li>
<li>And third, it allows your whole team to collaborate effectively — particularly when the state file is stored remotely, which is key for team-based setups.</li>
</ul>
<p>But here's something a lot of people get wrong: saving state <strong>on your laptop</strong>. If something happens to your computer, you could lose all your Terraform tracking.</p>
<p><strong>Pro Tip:</strong> Store state in <strong>S3</strong> and use <strong>DynamoDB</strong> for locking, or just go with <a href="https://app.terraform.io">Terraform Cloud</a> to make life easier. And if someone mentions “state locking,” it's basically just a way to stop multiple people from making changes at the same time.</p>
<hr />
<h2>Question 4: What's the difference between Terraform Plan and Apply?</h2>
<p>It's simple:</p>
<ul>
<li><code>terraform plan</code> shows you what changes Terraform is going to make.</li>
<li><code>terraform apply</code> actually makes those changes.</li>
</ul>
<p><strong>Example:</strong> Let's say you change an EC2 instance type from <code>t2.micro</code> to <code>t3.micro</code>. <code>terraform plan</code> will say, “Hey, this is the difference,” and <code>terraform apply</code> will go ahead and make it happen.</p>
<p><strong>Pro Tip:</strong> Before you apply any changes, it's a good idea to run <code>terraform plan</code> and save the output to a file. This way, you can double-check what's about to happen and avoid surprises.</p>
<hr />
<h2>Question 5: How does Terraform handle dependencies?</h2>
<p>Terraform usually understands dependencies on its own, just by looking at how your resources are connected.</p>
<p>But if you really need to, you can use <code>depends_on</code> to say, “Hey, make sure this thing is done first.”</p>
<p><strong>Example:</strong> You're creating an EC2 instance that needs a VPC. Terraform will automatically know to create the VPC first.</p>
<p><strong>Pro Tip:</strong> Try not to rely too much on <code>depends_on</code>. Terraform is smart and can usually handle this without extra help.</p>
<hr />
<h2>Question 6: What is Terraform Drift and how do you find it?</h2>
<p>Drift is when something in your cloud setup changes outside of Terraform — like if someone makes a manual change in the AWS Console — and now your code doesn't line up with what's actually running.</p>
<p>To spot that kind of difference, you can run <code>terraform plan</code>. It'll show you if anything has changed that Terraform didn't expect.</p>
<p><strong>Pro Tip:</strong> If you want to keep everything organized and up to date, you can set up automatic drift checks in <a href="https://app.terraform.io">Terraform Cloud</a>, or add a simple step to your automation setup to check for changes from time to time.</p>
<hr />
<h2>Question 7: How do you handle sensitive data in Terraform?</h2>
<p>Here's how to deal with secrets safely:</p>
<ul>
<li>First, use variables and set <code>sensitive = true</code>.</li>
<li>Then, store secrets in something secure like <strong>AWS Secrets Manager</strong> or <strong>Vault</strong>.</li>
<li>And finally, make sure your remote state is encrypted.</li>
</ul>
<p>And seriously — never put passwords directly in your code or state files.</p>
<hr />
<h2>Question 8: What are Terraform Workspaces?</h2>
<p>Workspaces let you use the <strong>same Terraform config</strong> for different environments — like dev, staging, and prod.</p>
<p>You can run commands like:</p>
<ul>
<li><code>terraform workspace new dev</code></li>
<li><code>terraform workspace select dev</code></li>
</ul>
<p><strong>Pro Tip:</strong> Workspaces are fine for small projects, but for bigger systems, using <strong>separate state files</strong> is usually better.</p>
<hr />
<h2>Question 9: What are Terraform Modules and why use them?</h2>
<p>Modules are just reusable bits of code that make your Terraform setup easier to manage.</p>
<p>Here's why they're helpful:</p>
<ul>
<li>First of all, they help you avoid repeating the same code in every project.</li>
<li>They also keep your files nice and organized.</li>
<li>And finally, they help make sure your infrastructure stays consistent everywhere.</li>
</ul>
<p><strong>Example:</strong> You can create a module for a VPC and use it in multiple places instead of writing that code over and over.</p>
<p><strong>Pro Tip:</strong> Before writing your own module, check out the <strong>Terraform Registry</strong>. Someone else may have already built what you need.</p>
<hr />
<h2>Question 10: How do you use Terraform in an automated deployment process?</h2>
<p>You can plug Terraform into your CI/CD setup using tools like:</p>
<ul>
<li><strong>GitHub Actions</strong></li>
<li><strong>GitLab CI</strong></li>
<li><strong>Terraform Cloud</strong></li>
</ul>
<p>Here's a basic workflow:</p>
<ol>
<li>First, run <code>terraform fmt</code> and <code>terraform validate</code> to check formatting and syntax.</li>
<li>Then, use <code>terraform plan</code> to preview the changes.</li>
<li>And finally, use <code>terraform apply</code> only after someone gives the green light (especially in production).</li>
</ol>
<p><strong>Pro Tip:</strong> Some teams also use <strong>Open Policy Agent</strong> to apply security rules before changes are applied.</p>
<hr />
<p>Alright, that's it for today! These <strong>10 Terraform questions</strong> should give you a solid foundation for your next DevOps interview.</p>
<p>Thanks for reading! Be sure to watch the <a href="https://youtu.be/MPj4sTnDPls">video version</a> for extra insights and helpful visuals.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Terraform"/>
    <category term="IaC"/>
    <category term="Interview Questions"/>
    <category term="DevOps"/>
    <category term="GitOps"/>
  </entry>
  <entry>
    <title>AI for Beginners - How It Works, Learns, and Makes Decisions</title>
    <link href="https://devops.pink/ai-for-beginners-how-it-works-learns-and-makes-decisions/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/ai-for-beginners-how-it-works-learns-and-makes-decisions/</id>
    <published>2025-03-31T00:00:00.000Z</published>
    <updated>2025-03-31T00:00:00.000Z</updated>
    <summary>Simple guide to AI and machine learning for beginners. Learn how it works with clear explanations and easy-to-understand examples.</summary>
    <content type="html"><![CDATA[<p>Hey, lovely tech queens! ‍✨</p>
<p>Let's be real: tech terms like <strong>AI</strong>, <strong>machine learning</strong>, and <strong>deep learning</strong> get thrown around constantly — and unless you've spent your nights reading research papers (I haven't either), they can sound like a black box.</p>
<p>But they're not.<br />
Let me break them down for you — clearly, simply, and with real-life examples (yes, including oranges and smart thermostats).</p>
<hr />
<h2>Part 1: What is AI — and why does everyone talk about it?</h2>
<p>AI stands for <strong>Artificial Intelligence</strong>, and no, it's not about robots with feelings. It's about teaching machines to do things that usually require human intelligence:<br />
like understanding language, recognizing images, predicting outcomes, or making decisions.</p>
<p>AI helps us in everyday life more than you might think:</p>
<ul>
<li>Your phone suggests the next word before you finish typing.</li>
<li>Your bank detects suspicious activity before you even notice.</li>
<li>Your email knows how to separate spam from real messages.</li>
</ul>
<p>It's not magic. It's just data, models, and logic — working together.</p>
<hr />
<h2>Part 2: How AI learns — and what ML and Deep Learning have to do with it.</h2>
<p>To make a machine smart, you don't give it instructions line by line. You <strong>let it learn from examples</strong> — and that's what <strong>Machine Learning (ML)</strong> is.</p>
<p>Then there's <strong>Deep Learning</strong>, a more advanced method that helps machines handle complex tasks — like recognizing speech, analyzing images, or understanding natural language.</p>
<h3>Want a clear example?</h3>
<p>Let's say you live in a smart home with a smart thermostat.</p>
<ul>
<li>The thermostat uses <strong>AI</strong> to decide whether to heat the room.</li>
<li>It uses <strong>ML</strong> to learn that you usually come home around 7 p.m., so it starts warming up at 6:30.</li>
<li>It uses <strong>Deep Learning</strong> to go even further: it checks your location, your calendar, even the way you message friends — and figures out that today you'll be home early. So it heats the room in advance, without you doing a thing.</li>
</ul>
<p>That's how it works. Step by step, smarter and smarter.</p>
<hr />
<h2>Part 3: What happens after learning — the role of inference.</h2>
<p>Once the model is trained, the learning phase is over. Now it's time to <strong>use</strong> that knowledge.</p>
<p>This process is called <strong>inference</strong> — when the AI makes a decision based on what it already knows.</p>
<h3>Here's a simple one:</h3>
<p>You trained a model to tell the difference between oranges and apples.<br />
Now you show it a new fruit photo.<br />
It looks at it and says: “That's an orange.”<br />
That's <strong>inference</strong>. It's the model in action — making predictions or classifications based on what it learned earlier.</p>
<hr />
<h2>Part 4: Two types of inference — real-time vs batch.</h2>
<p>Not all AI decisions are made the same way. Sometimes you need <strong>answers instantly</strong>. Sometimes you need to <strong>process a lot of data quietly in the background</strong>.</p>
<p>Let's break it down:</p>
<h3>1. Real-time inference</h3>
<p>This is when the AI reacts <strong>immediately</strong> to new input.</p>
<p><strong>Examples:</strong></p>
<ul>
<li>A smart fridge notifies you that milk is low the second you open the door.</li>
<li>A navigation app recalculates your route as soon as you take the wrong turn.</li>
<li>An e-commerce site recommends similar items the moment you click on a product.</li>
</ul>
<p>Speed matters here. The response has to be fast and seamless.</p>
<h3>2. Batch inference</h3>
<p>This happens when the system processes <strong>large amounts of data at once</strong>, usually on a schedule.</p>
<p><strong>Examples:</strong></p>
<ul>
<li>Your sales data is analyzed overnight to generate a report by morning.</li>
<li>A bank reviews all transactions at the end of the day to assess risk levels.</li>
<li>A job platform scans thousands of resumes every weekend to find top matches.</li>
</ul>
<p>This type of inference doesn't need to be instant — it's more about depth and scale.</p>
<hr />
<h2>When to use what? Here's the cheat sheet:</h2>
<table>
<thead>
<tr>
<th>You need</th>
<th>Use this type</th>
</tr>
</thead>
<tbody>
<tr>
<td>Instant feedback or decision-making</td>
<td>Real-time inference</td>
</tr>
<tr>
<td>Large-scale analysis without time pressure</td>
<td>Batch inference</td>
</tr>
</tbody>
</table>
<hr />
<h2>A note from one IT girl to another</h2>
<p>AI isn't some futuristic fantasy — it's already here, quietly making things smoother, smarter, and faster.<br />
You don't need to know everything about algorithms to understand how it works.</p>
<p>If you get this:</p>
<ul>
<li>AI = the system that acts smart,</li>
<li>ML = how the system learns from data,</li>
<li>Deep Learning = how it handles complex patterns,</li>
<li>Inference = how it applies what it learned to make decisions,</li>
</ul>
<p>Then congrats — you're already ahead of most people.</p>
<p>Keep learning, stay curious, and don't be afraid of the tech terms.<br />
You're more than smart enough to master this.</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="AI"/>
    <category term="ML"/>
    <category term="Beginners"/>
  </entry>
  <entry>
    <title>Docker Run, Swarm &amp; Kubernetes - Scaling Made Simple</title>
    <link href="https://devops.pink/docker-run-swarm-kubernetes-scaling-made-simple/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/docker-run-swarm-kubernetes-scaling-made-simple/</id>
    <published>2025-03-25T00:00:00.000Z</published>
    <updated>2025-03-25T00:00:00.000Z</updated>
    <summary>Docker Run vs Swarm vs Kubernetes — a simple guide for beginners ready to scale containers and automate like a pro.</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens! ‍✨</p>
<p>Let's Talk About Scaling — Docker Run, Swarm &amp; Kubernetes Explained Simply</p>
<p>Okay girls — you've nailed <code>docker run</code>, spun up your first container, and you're feeling like a total tech queen.</p>
<p>But then… your app gets <em>popular</em> (yas!), you need more power, and suddenly it's like:</p>
<p>“Wait… how do I run multiple containers? On multiple servers? Without chaos?”</p>
<p>Don't worry — you're about to <strong>level up</strong> your container game. Let's talk <strong>Docker Swarm vs Kubernetes</strong>, what they do, and how they help you scale with style.</p>
<hr />
<h2>Docker Run: Your First Crush</h2>
<p>You type:</p>
<pre><code class="language-bash">docker run my-app
</code></pre>
<p>Boom — your container is alive, running, and you feel unstoppable.</p>
<p>But here's the thing:</p>
<ul>
<li>It only launches <strong>one</strong> container</li>
<li>If it crashes, you have to fix it <strong>yourself</strong></li>
<li>Scaling? Load balancing? Not happening</li>
</ul>
<p>It's great for learning and testing. But when you want to go big? Time to bring in reinforcements.</p>
<hr />
<h2>Docker Swarm: Your First Automation Sidekick</h2>
<p>Swarm is Docker's built-in orchestration tool — your <strong>first step into scaling smart</strong>.</p>
<p>With one command, you can launch multiple containers across different servers, and Swarm handles the rest.</p>
<pre><code class="language-bash">docker service create --name my-app --replicas 3 my-image
</code></pre>
<p>Swarm will:</p>
<ul>
<li>Distribute containers across machines</li>
<li>Restart them if they crash</li>
<li>Balance traffic between them</li>
</ul>
<p><strong>Basically:</strong> You focus on building, Swarm keeps it all running.</p>
<p><strong>Why I love it:</strong></p>
<ul>
<li>Easy to use</li>
<li>No extra tools needed</li>
<li>Perfect for small projects or learning orchestration</li>
</ul>
<hr />
<h2>Kubernetes: The Boss of Container Management</h2>
<p>If Swarm is your sidekick, <strong>Kubernetes (K8s)</strong> is the full-blown operations manager. She's powerful, reliable, and trusted by companies like Google, Netflix, and Spotify.</p>
<p>Kubernetes can:</p>
<ul>
<li>Auto-scale your apps based on resource usage</li>
<li>Roll out updates with zero downtime</li>
<li>Heal itself when something breaks</li>
<li>Run across clouds and data centers</li>
</ul>
<p>With just:</p>
<pre><code class="language-bash">kubectl create deployment my-app --image=my-image
</code></pre>
<p>You've deployed an app that can scale to the moon — and heal itself along the way.</p>
<p><strong>Kubernetes doesn't just run containers — it runs your platform.</strong></p>
<hr />
<h2>Swarm vs Kubernetes — What's the Difference?</h2>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Docker Swarm</th>
<th>Kubernetes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Setup</td>
<td>Simple &amp; fast</td>
<td>Advanced, more setup</td>
</tr>
<tr>
<td>Scaling</td>
<td>Basic replicas</td>
<td>Full auto-scaling</td>
</tr>
<tr>
<td>Healing</td>
<td>Restarts containers</td>
<td>Smart health checks + recovery</td>
</tr>
<tr>
<td>Best For</td>
<td>Learning &amp; light apps</td>
<td>Serious production systems</td>
</tr>
<tr>
<td>Vibes</td>
<td>Chill side project</td>
<td>Cloud-native powerhouse</td>
</tr>
</tbody>
</table>
<hr />
<h2>DevOps Pink Girl Tips</h2>
<ul>
<li>Start with Docker + Swarm to get the basics down</li>
<li>Move to Kubernetes when you're ready for pro-level control</li>
<li>Use <a href="https://minikube.sigs.k8s.io/">Minikube</a> to run Kubernetes locally</li>
<li>Learn <code>kubectl</code> commands like <code>get pods</code>, <code>describe</code>, and <code>apply</code> — they're gold</li>
<li>Don't panic — it all makes sense with practice!</li>
</ul>
<hr />
<h2>Final Thoughts: You've Got This</h2>
<p>Whether you're running a simple app or managing cloud infrastructure like a queen, orchestration is your next big step.</p>
<p>Docker Run is where we all start.</p>
<p>Swarm helps us grow.</p>
<p><strong>Kubernetes? That's where the real magic happens.</strong></p>
<p>You're not just launching containers — you're building systems, scaling apps, and creating serious DevOps vibes.</p>
<p>So go flex those tech muscles if you're stepping into Swarm or K8s life. I'm always here for your container wins!</p>
<p>Got a favorite <code>kubectl</code> command or Swarm tip? Share it in the comments — let's geek out together!</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Docker"/>
    <category term="Kubernetes"/>
    <category term="Containers"/>
    <category term="Orchestration"/>
  </entry>
  <entry>
    <title>How Docker Works Under the Hood - A Girly Tech Deep Dive</title>
    <link href="https://devops.pink/how-docker-works-under-the-hood-a-girly-tech-deep-dive/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/how-docker-works-under-the-hood-a-girly-tech-deep-dive/</id>
    <published>2025-03-21T00:00:00.000Z</published>
    <updated>2025-03-21T00:00:00.000Z</updated>
    <summary>Under the Hood of Docker - What Really Happens When You Run docker run?</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens (and kings, if you're here too)! ‍✨</p>
<p>Today, we're diving <strong>under the hood of Docker</strong> to see what actually happens when we run those magical <code>docker run</code> commands. If you're anything like me—curious, IT-obsessed, and always wanting to know <em>how stuff actually works</em>—then you're in for a treat!</p>
<hr />
<h2>So, What Even Is Docker?</h2>
<p>Let's be real—Docker makes life so much easier. Instead of installing a million dependencies, worrying about “it works on my machine” drama (ugh, been there!), we just throw everything into a <strong>container</strong> and let Docker do its thing.</p>
<p>But what's actually happening <strong>behind the scenes</strong>? Let's break it down!</p>
<hr />
<h2>Docker Is Not a Virtual Machine (And That's Important!)</h2>
<p>Okay, first thing's first. If you think Docker is like VirtualBox or VMWare, girl, we need to talk! ‍♀️</p>
<p><strong>Virtual Machines (VMs)</strong> create a whole new OS inside another OS. That means they're <strong>slow</strong>, require tons of <strong>resources</strong>, and basically act like a separate computer.</p>
<p><strong>Docker, on the other hand, doesn't do that.</strong> Instead, it runs containers using the same OS <strong>kernel</strong> as your host machine. Think of it like running multiple apps on your phone—each one is separate, but they all share the same iOS or Android system.</p>
<p><strong>Result:</strong> Docker containers start in <strong>seconds</strong>, use <strong>less memory</strong>, and are <strong>super lightweight</strong> compared to VMs.</p>
<hr />
<h2>What Happens When You Run <code>docker run</code>?</h2>
<p>You type <code>docker run nginx</code> and boom—your container is up and running. But what actually happens behind the command? Here's the tea ☕:</p>
<p>1️⃣ <strong>Docker CLI talks to Docker Daemon</strong></p>
<ul>
<li>The <strong>CLI (Command-Line Interface)</strong> sends a request to the <strong>Docker Daemon</strong> (a background process that does all the hard work). Think of the daemon as Docker's fairy godmother ‍♀️—it grants your wish to run containers!</li>
</ul>
<p>2️⃣ <strong>Docker Daemon checks for the image</strong></p>
<ul>
<li>If you don't have the <strong>Nginx</strong> image locally, Docker pulls it from <strong>Docker Hub</strong> (kind of like an app store for containers).</li>
</ul>
<p>3️⃣ <strong>Docker creates a container</strong></p>
<ul>
<li>It <strong>sets up namespaces</strong> (more on that below!), <strong>allocates resources</strong>, and makes sure the container is isolated from your main system.</li>
</ul>
<p>4️⃣ <strong>Docker starts the container's main process</strong></p>
<ul>
<li>Containers are just Linux processes running in an isolated environment. Unlike VMs, they don't boot a full OS—just the app you asked for.</li>
</ul>
<p>5️⃣ <strong>You now have an active container!</strong></p>
<ul>
<li>Run <code>docker ps</code> and you'll see it in action!</li>
</ul>
<hr />
<h2>How Docker Keeps Containers Separate</h2>
<p>If containers share the same OS kernel, how do they stay isolated from each other? Here's where Linux <strong>namespaces</strong> and <strong>cgroups</strong> come in.</p>
<p><strong>Namespaces</strong> = "You do you, I do me!"</p>
<ul>
<li>Namespaces make sure each container has <strong>its own private world</strong>—its own file system, network, process tree, and more.</li>
<li>This is why when you run <code>ls</code> inside a container, you don't see your host system's files!</li>
</ul>
<p><strong>Cgroups</strong> = "You get this much CPU, you get this much RAM!"</p>
<ul>
<li>Containers share resources, but <strong>cgroups</strong> ensure that one greedy container doesn't hog all the CPU or memory.</li>
<li>It's like a <em>Netflix account with multiple users</em>—everyone gets their fair share!</li>
</ul>
<hr />
<h2>Why This Matters (And Why You Should Care)</h2>
<p>So now you know that Docker isn't magic (though it sure feels like it sometimes ✨). Understanding how Docker really works <strong>helps you debug issues</strong>, <strong>optimize performance</strong>, and <strong>use it like a pro</strong>.</p>
<p>‍ <strong>Next Steps:</strong></p>
<ul>
<li>Try running <code>docker stats</code> to see how much CPU/memory your containers use.</li>
<li>Experiment with <code>docker inspect</code> to peek inside a container's metadata.</li>
<li>Play with <code>docker network ls</code> to check out how containers communicate!</li>
</ul>
<hr />
<h2>Final Thoughts</h2>
<p>Docker is a total game-changer, but knowing how it actually works makes you unstoppable. Now go flex your new knowledge, container queen!</p>
<p>Tag me if you try any of these tips.</p>
<p>I'd love to hear about your Docker adventures!</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Docker"/>
    <category term="Containers"/>
    <category term="Architecture"/>
  </entry>
  <entry>
    <title>Docker Compose Explained - Imagine Running Your Own Cafe</title>
    <link href="https://devops.pink/docker-compose-explained-imagine-running-your-own-cafe/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/docker-compose-explained-imagine-running-your-own-cafe/</id>
    <published>2025-03-18T00:00:00.000Z</published>
    <updated>2025-03-18T00:00:00.000Z</updated>
    <summary>Docker Compose explained with a fun cafe analogy! Learn how to run and deploy apps easily with containers—perfect for beginners and IT pros alike.</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens! ‍✨</p>
<p>If you've ever felt overwhelmed by all this <strong>Docker</strong> and <strong>containers</strong> talk, don't worry—I got you! Today, we're diving into Docker in a way that actually makes sense. No boring textbook definitions, just <strong>real-life vibes and practical IT girl wisdom</strong>.</p>
<p>So, picture this: <strong>you're the head chef of your dream restaurant</strong>. You've got different stations—baking, coffee-making, smoothie-blending. Your goal? Run a smooth, flawless kitchen where every dish comes out <em>chef's kiss</em> perfect. Now imagine opening the exact same restaurant in a different city—<strong>how do you make sure everything works the same way?</strong></p>
<p>That's where Docker comes in. Let's break it down!</p>
<hr />
<h2>What Even is Docker?</h2>
<p>Okay, so think of <strong>Docker as a way to pack up your kitchen stations into perfectly organized "to-go" boxes</strong>. Inside each box, there's everything needed to set up a working station—ingredients, tools, instructions, <em>the whole vibe</em>. When you send this box to another restaurant (aka another server), all they have to do is <strong>unbox it and BOOM—instant setup</strong>.</p>
<p><strong>In IT terms:</strong></p>
<ul>
<li>Instead of manually installing software, databases, and dependencies on different servers, Docker <strong>packs them into containers</strong> that can run anywhere.</li>
<li>No more “It worked on my machine but not yours” drama—<strong>it runs the same way, every time</strong>.</li>
</ul>
<hr />
<h2>Running a Single Container = Turning On One Kitchen Appliance</h2>
<p>Let's say you just need to make coffee. Easy, right? You <strong>press a button, the coffee machine turns on, and magic happens</strong>.</p>
<p>In Docker, the equivalent is:</p>
<pre><code class="language-bash">docker run coffee-maker
</code></pre>
<p>Translation? <strong>“Turn on my coffee machine container and start brewing.”</strong></p>
<p>But here's the thing—no one orders JUST coffee. Customers want a <strong>full experience</strong>: pastries, fresh juice, and a cozy vibe. Running a single Docker container is fine for one task, but what about when you need a <strong>whole team of containers working together</strong>?</p>
<hr />
<h2>Docker Compose = Running Your Entire Kitchen Like a Boss</h2>
<p>Imagine if your kitchen had <strong>zero coordination</strong>:</p>
<ul>
<li>The barista starts making coffee but there's no milk.</li>
<li>The baker finishes a croissant, but there's nowhere to put it because the plates haven't arrived yet.</li>
<li>The smoothie blender starts running... but no one put fruit in it.</li>
</ul>
<p>Total chaos, right? That's exactly what happens when you have multiple containers that don't know how to work together.</p>
<p>Enter <strong>Docker Compose</strong>, aka <strong>the kitchen manager of your IT dreams</strong>. Instead of manually turning on each appliance one by one, <strong>you write a simple file (<code>compose.yml</code>) that tells all the stations when and how to start working</strong>.
Then, with <strong>one command</strong>, your entire system boots up, perfectly in sync:</p>
<pre><code class="language-bash">docker compose up
</code></pre>
<p>Translation? <strong>"Wake up, kitchen! Let's do this!"</strong></p>
<hr />
<h2>How Does Docker Compose Keep Your Kitchen in Order?</h2>
<p>Imagine your restaurant serves <strong>a signature breakfast set</strong>:</p>
<ul>
<li>A fresh croissant (baked in the oven )</li>
<li>A cappuccino (made in the espresso machine ☕)</li>
<li>A smoothie (blended to perfection )</li>
</ul>
<p>Here's how Docker Compose makes sure everything runs smoothly:</p>
<h3>1 It Starts the Right Appliances First</h3>
<p>You can't make a cappuccino before heating the milk, right? Same in tech. Your <strong>databases must start before your app</strong>, otherwise, it crashes trying to find missing data.</p>
<p>In Docker Compose, we define <strong>dependencies</strong>, so containers know <strong>who needs to start first</strong>.</p>
<h3>2 It Connects Everything Automatically</h3>
<p>Your barista needs to <strong>talk to the baker</strong> to coordinate orders. Same with services in IT—<strong>your app needs to communicate with the database, payment system, and notification service</strong>.</p>
<p>Docker Compose <strong>links all containers together</strong>, so they can "chat" without extra setup.</p>
<h3>3 It Scales Up When Needed</h3>
<p>If your cafe gets super popular (hello, influencer magic ✨), you <strong>hire more baristas</strong> to handle orders. In Docker, if your website gets more traffic, you <strong>easily add more containers</strong> without breaking a sweat.</p>
<pre><code class="language-bash">docker compose scale coffee=3
</code></pre>
<p>Boom. <strong>Three baristas, no waiting in line.</strong></p>
<hr />
<h2>Why Should an IT Girl Care About Docker?</h2>
<p>Let's be real: <strong>if you're serious about tech, Docker is a game-changer</strong>.
Whether you're a <strong>developer, DevOps babe, or cloud queen</strong>, Docker saves time, reduces errors, and lets you focus on <strong>actual coding instead of fixing messy setups</strong>.</p>
<h3>With Docker, you can:</h3>
<p>✔ <strong>Run the same setup on ANY computer</strong> - no more “but it works on my laptop” drama.
✔ <strong>Test new features in seconds</strong> - spin up a new environment with <strong>one command</strong>.
✔ <strong>Easily switch between projects</strong> - each app gets its own contained world.
✔ <strong>Deploy apps like a pro</strong> - your code runs the same on any server, anywhere.</p>
<hr />
<h2>Final Thoughts: Own Your Tech Kitchen!</h2>
<p>Docker might seem complicated at first, but trust me—it's just <strong>Tupperware for your code</strong>. Once you <strong>start thinking in containers</strong>, managing apps becomes as easy as running your favorite cafe.</p>
<p><strong>IT Girl Tip:</strong> Want to practice? Start by containerizing something simple—like a personal website or a tiny database. Once you get the hang of it, <strong>scaling up will be a breeze!</strong></p>
<p>So, next time someone talks about Docker, just imagine <strong>your dream cafe running smoothly with a single command</strong>—and know that you, my tech queen, are running the kitchen. ✨</p>
<p><strong>Let's go build something amazing!</strong></p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Docker"/>
    <category term="Docker Compose"/>
    <category term="Containers"/>
  </entry>
  <entry>
    <title>DNS for IT Girls - How the Internet Works Like Magic</title>
    <link href="https://devops.pink/dns-for-it-girls-how-the-internet-works-like-magic/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/dns-for-it-girls-how-the-internet-works-like-magic/</id>
    <published>2025-03-15T00:00:00.000Z</published>
    <updated>2025-03-15T00:00:00.000Z</updated>
    <summary>Learn how DNS works, from hosts files to DNS servers, caching, and troubleshooting. This IT-girl guide makes networking easy, fun, and beginner-friendly!</summary>
    <content type="html"><![CDATA[<p>Hey, tech queens! ‍</p>
<p>Today, we're diving into <strong>DNS</strong>—the secret behind why you can just type <em>google.com</em> instead of some long, impossible-to-remember number. DNS makes the internet <strong>easy and user-friendly</strong>, and once you understand it, you'll feel like a total networking <strong>goddess</strong>!</p>
<hr />
<h2>What is DNS?</h2>
<p>DNS (<strong>Domain Name System</strong>) is like the <strong>translator of the internet</strong>. It turns <strong>human-friendly domain names</strong> (<em>web.yourcompany.net</em>) into <strong>machine-readable IP addresses</strong>.</p>
<p>Think of it like your phone contacts: instead of memorizing phone numbers, you just tap on a name. DNS does the same, but for websites.</p>
<p>Without DNS, you'd have to type <strong>10.0.0.25</strong> instead of <em>facebook.com</em>. Not cute, right?</p>
<hr />
<h2>The Hosts File: The Old-School Hack</h2>
<p>Before DNS, people manually assigned names to IPs using the <strong>/etc/hosts</strong> file (yeah, ancient times! ). But guess what? You can <strong>still</strong> use this trick today to override DNS settings on your machine!</p>
<h3>Pro Tip: Manually Map Names to IPs</h3>
<p>Let's say you have a database server with IP <strong>10.0.0.5</strong>, and you want to access it using the name <strong>database</strong>. Just add this line to your <strong>/etc/hosts</strong> file:</p>
<pre><code class="language-bash">10.0.0.5 database
</code></pre>
<p>Now, whenever you type <code>ping database</code>, your system will <strong>automatically</strong> connect to <strong>10.0.0.5</strong>, no matter what DNS says! #HackTheNetwork</p>
<hr />
<h2>Enter the DNS Server!</h2>
<p>Managing hostnames manually gets messy <strong>real quick</strong>, so that's where <strong>DNS servers</strong> come in! They <strong>centralize everything</strong>, so instead of keeping a giant hosts file, your system just <strong>asks a DNS server</strong> for the right IP.</p>
<p>For example, if your company's internal <strong>DNS server</strong> is at <strong>10.10.10.1</strong>, your laptop will query it whenever it needs to resolve a hostname. If the server doesn't know the answer, it <strong>forwards the request up the chain</strong> until it finds the right IP.</p>
<h3>Pro Tip: Set a Custom DNS Server</h3>
<p>To manually tell your system where to look for DNS resolutions, update the <strong>/etc/resolv.conf</strong> file like this:</p>
<pre><code class="language-bash">nameserver 10.10.10.1
</code></pre>
<p>Now, <strong>all DNS requests</strong> will go to <strong>10.10.10.1</strong> first.</p>
<hr />
<h2>Subdomains: The DNS Name Tree</h2>
<p>Ever wondered why we have <em>maps.yourcompany.net</em>, <em>mail.yourcompany.net</em>, and <em>drive.yourcompany.net</em>? These are <strong>subdomains</strong>, and they help organize different services inside a company or website. ✨</p>
<p>Example DNS setup for a company:</p>
<ul>
<li><strong>web.yourcompany.net</strong> → Main website</li>
<li><strong>db.yourcompany.net</strong> → Database server</li>
<li><strong>mail.yourcompany.net</strong> → Email services</li>
</ul>
<p>DNS ensures that when users type these names, they are sent to the <strong>correct servers</strong>. It's basically the <strong>road sign system of the internet!</strong></p>
<hr />
<h2>DNS Caching: How the Internet Gets Faster</h2>
<p>Every time you visit a website, your system <strong>caches</strong> (stores) the DNS result so it doesn't have to ask again. This <strong>speeds things up</strong>  but can sometimes cause problems when IPs change.</p>
<h3>How to Clear Your DNS Cache</h3>
<p>If a website stops loading properly, refreshing the DNS cache might help:</p>
<p>️ <strong>On Windows:</strong></p>
<pre><code class="language-bash">ipconfig /flushdns
</code></pre>
<p><strong>On Mac/Linux:</strong></p>
<pre><code class="language-bash">sudo systemd-resolve --flush-caches
</code></pre>
<p>Now your system will request fresh DNS info instead of using old data.</p>
<hr />
<h2>Public vs Private DNS: Who Controls the Internet?</h2>
<p>If your DNS server <strong>doesn't know</strong> an answer, it <strong>forwards the request</strong> to <strong>public DNS servers</strong> like:</p>
<p>✅ <strong>Google DNS</strong> → <code>8.8.8.8</code><br />
✅ <strong>Cloudflare DNS</strong> → <code>1.1.1.1</code><br />
✅ <strong>OpenDNS</strong> → <code>208.67.222.222</code></p>
<p>But for <strong>internal company networks</strong>, private DNS servers <strong>keep things secure</strong>. For example, if you work at <em>yourcompany.net</em>, you don't want <strong>random strangers</strong> resolving your internal servers!</p>
<hr />
<h2>Recap: DNS is the GPS of the Internet!</h2>
<p>Now you know that <strong>DNS</strong> is the backbone of the web—it translates names into IPs, manages subdomains, caches results for speed, and allows you to <strong>override settings when needed</strong>.</p>
<h3>Quick Cheat Sheet:</h3>
<p>✅ <strong>/etc/hosts</strong> → Manually map names to IPs<br />
✅ <strong>/etc/resolv.conf</strong> → Set your preferred DNS server<br />
✅ <strong>ping, nslookup, dig</strong> → DNS troubleshooting tools<br />
✅ <strong>ipconfig /flushdns</strong> → Clear DNS cache (Windows)<br />
✅ <strong>systemd-resolve --flush-caches</strong> → Clear DNS cache (Linux/Mac)</p>
<p>You're officially a <strong>DNS queen</strong> now!  Have you ever played around with your DNS settings? Let's chat in the comments! ✨</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Networking"/>
    <category term="DNS"/>
    <category term="Beginners"/>
  </entry>
  <entry>
    <title>Linux for Beginners - Essential Commands Every IT Girl Must Know</title>
    <link href="https://devops.pink/linux-for-beginners-essential-commands-every-it-girl-must-know/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/linux-for-beginners-essential-commands-every-it-girl-must-know/</id>
    <published>2025-03-10T00:00:00.000Z</published>
    <updated>2025-03-10T00:00:00.000Z</updated>
    <summary>Master Linux commands &amp; boost your IT skills! Learn essential commands for navigating, managing files &amp; running processes like a pro.</summary>
    <content type="html"><![CDATA[<p>Hey, lovely tech queens! ‍✨</p>
<p>If you're stepping into the <strong>world of Linux</strong>, welcome to the <em>coolest club ever</em>!
I know, the command line can look super intimidating at first (been there, freaked out ), but trust me—once you get the hang of it, you'll feel <strong>like a total hacker goddess</strong>.</p>
<p>Today, I'm sharing my <strong>ultimate Linux cheat sheet</strong>—the <strong>basic commands</strong> every IT girl needs to master. These will help you <strong>navigate, manage files, and work like a pro</strong>. Let's dive in!</p>
<hr />
<h2>First Things First: Why Even Bother with Linux?</h2>
<p>So, why are we talking about Linux when macOS and Windows exist? Because <strong>real IT girls</strong> know that:</p>
<p>✔️ <strong>Most servers run on Linux</strong>, so if you dream of a tech career, you NEED this.<br />
✔️ <strong>Developers and cybersecurity pros swear by it</strong>—like, ethical hacking? Linux is your BFF.<br />
✔️ <strong>It's free, open-source, and powerful</strong>—total boss babe energy.</p>
<p>And let's be real—nothing screams <em>I know my sh</em>t* like typing commands in a black terminal.</p>
<hr />
<h2>Getting Started: Open That Terminal!</h2>
<p>Before we slay the Linux game, let's <strong>open the terminal</strong>:</p>
<ul>
<li><strong>On Linux:</strong> <code>Ctrl + Alt + T</code></li>
<li><strong>On Mac:</strong> Use "Terminal" from Spotlight (<code>Cmd + Space</code>, then type “Terminal”).</li>
<li><strong>On Windows:</strong> Install <strong>WSL (Windows Subsystem for Linux)</strong> or use <strong>Git Bash</strong>.</li>
</ul>
<p>Alright, <strong>let's get into the commands</strong> that will make you feel like a total IT girl!</p>
<hr />
<h2>Navigating Like a Pro: Moving Around Folders</h2>
<p>The first thing you need to learn is <strong>how to navigate your system</strong>.
Forget clicking around—let's <strong>move like a boss</strong> in the terminal.</p>
<h3>1 Where Am I? (Check Current Directory)</h3>
<pre><code class="language-bash">pwd
</code></pre>
<p>This tells you which folder you're in. Super useful if you ever feel lost.</p>
<h3>2 What's Inside This Folder? (List Files)</h3>
<pre><code class="language-bash">ls
</code></pre>
<p>This shows all files and folders in the current directory.</p>
<p><strong>Pro tip:</strong></p>
<ul>
<li>Use <code>ls -l</code> for more details (file size, date, owner).</li>
<li>Use <code>ls -a</code> to see hidden files (yes, Linux hides stuff from you).</li>
</ul>
<h3>3 Moving Between Folders (Change Directory)</h3>
<pre><code class="language-bash">cd foldername
</code></pre>
<p>Moves you into a folder.</p>
<p>Want to <strong>go back</strong>?</p>
<pre><code class="language-bash">cd ..
</code></pre>
<p>Moves <strong>up</strong> one level.</p>
<p>Or just type:</p>
<pre><code class="language-bash">cd ~
</code></pre>
<p>Takes you straight to your <strong>home directory</strong>.</p>
<p>✨ <em>Think of these commands as teleporting through your files. No more aimless clicking!</em></p>
<hr />
<h2>File &amp; Folder Magic: Creating, Moving &amp; Deleting</h2>
<p>Alright, now that we can <strong>move around</strong>, let's <strong>start making things happen</strong>!</p>
<h3>4 Create a New Folder (mkdir)</h3>
<pre><code class="language-bash">mkdir myfolder
</code></pre>
<p>Boom! A new folder is born.</p>
<p><strong>Pro tip:</strong></p>
<ul>
<li>Want to create multiple nested folders? Use <code>mkdir -p parent/child/grandchild</code>.</li>
</ul>
<h3>5 Create a New File (touch)</h3>
<pre><code class="language-bash">touch myfile.txt
</code></pre>
<p>Creates an empty file. Perfect for testing.</p>
<h3>6 Move or Rename a File (mv)</h3>
<pre><code class="language-bash">mv oldname.txt newname.txt
</code></pre>
<p>Works for <strong>renaming</strong> files AND <strong>moving</strong> them.</p>
<p><strong>Example:</strong> Move a file into a folder:</p>
<pre><code class="language-bash">mv myfile.txt myfolder/
</code></pre>
<p>Now it's inside <em>myfolder</em>. So neat!</p>
<h3>7 Copy a File (cp)</h3>
<pre><code class="language-bash">cp myfile.txt copyfile.txt
</code></pre>
<p>Now you have a duplicate!</p>
<p>Want to copy a <strong>whole folder</strong>?</p>
<pre><code class="language-bash">cp -r myfolder newfolder
</code></pre>
<p>The <code>-r</code> flag copies everything inside too!</p>
<h3>8 Delete a File (rm)</h3>
<pre><code class="language-bash">rm myfile.txt
</code></pre>
<p>Bye-bye, file!</p>
<p><strong>Be super careful!</strong> If you use:</p>
<pre><code class="language-bash">rm -r myfolder
</code></pre>
<p>It deletes the entire folder + its contents. <strong>No undo!</strong></p>
<hr />
<h2>Reading &amp; Editing Files</h2>
<p>Alright, let's check what's <strong>inside</strong> our files.</p>
<h3>9 Read a File (cat)</h3>
<pre><code class="language-bash">cat myfile.txt
</code></pre>
<p>Shows the contents of a file instantly.</p>
<p><strong>Pro tip:</strong></p>
<ul>
<li>
<p>If the file is <strong>too long</strong>, use:</p>
<pre><code class="language-bash">less myfile.txt
</code></pre>
<p>This lets you <strong>scroll</strong> through it. Press <code>q</code> to exit.</p>
</li>
</ul>
<h3>10 Edit a File (nano)</h3>
<pre><code class="language-bash">nano myfile.txt
</code></pre>
<p>Opens a simple text editor inside the terminal.</p>
<hr />
<h2>Running Programs &amp; Managing Processes</h2>
<h3>Check Running Processes</h3>
<pre><code class="language-bash">ps aux
</code></pre>
<p>Shows all running programs.</p>
<h3>Kill a Stuck Program</h3>
<pre><code class="language-bash">kill PID
</code></pre>
<p>Or use:</p>
<pre><code class="language-bash">pkill -f process_name
</code></pre>
<p>This kills the process <strong>by name</strong> (super handy!).</p>
<hr />
<h2>Bonus IT Girl Tricks!</h2>
<h3>Redirecting Output: &gt; vs &gt;&gt;</h3>
<ul>
<li><code>echo "Hello" &gt; file.txt</code> <strong>overwrites</strong> the file.</li>
<li><code>echo "Hello" &gt;&gt; file.txt</code> <strong>adds</strong> text to the file without deleting old content.</li>
</ul>
<h3>View Command History</h3>
<pre><code class="language-bash">history
</code></pre>
<p>Lists all commands you've used—no more "What was that command again?" moments!</p>
<h3>Find Any File</h3>
<pre><code class="language-bash">find / -name "filename"
</code></pre>
<p>Searches for a file anywhere on your system.</p>
<p>Want something <strong>faster</strong>?</p>
<pre><code class="language-bash">locate filename
</code></pre>
<p>But first, run:</p>
<pre><code class="language-bash">sudo updatedb
</code></pre>
<p>This updates the file database for <code>locate</code>.</p>
<hr />
<h2>Final Thoughts: Own That Terminal, Queen!</h2>
<p>So, my fellow <strong>IT girl</strong>, this is your <strong>Linux survival kit</strong>. These commands will help you <strong>navigate like a pro, manage files, and even kill frozen programs like a boss</strong>.</p>
<p><strong>Your next steps:</strong></p>
<p>✅ <strong>Practice these commands daily.</strong><br />
✅ <strong>Start using Linux as your main OS (if possible).</strong><br />
✅ <strong>Experiment &amp; break things—just don't delete your whole system!</strong></p>
<p>And remember, <strong>every tech queen starts somewhere</strong>—the key is to <strong>keep learning</strong>.</p>
<p>Got questions? Comment below, and let's geek out together!</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Linux"/>
    <category term="CLI"/>
    <category term="Beginners"/>
  </entry>
  <entry>
    <title>Docker for Girls - Understanding docker ps Once and For All</title>
    <link href="https://devops.pink/docker-for-girls-understanding-docker-ps-once-and-for-all/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/docker-for-girls-understanding-docker-ps-once-and-for-all/</id>
    <published>2025-03-07T00:00:00.000Z</published>
    <updated>2025-03-07T00:00:00.000Z</updated>
    <summary>Learn docker ps easily! This fun and beginner-friendly guide breaks down the Docker command to list, filter, and inspect containers.</summary>
    <content type="html"><![CDATA[<p>Hey girls!</p>
<p>If you're as passionate about IT and Docker as I am but sometimes find it a bit complicated, don't worry! Today, I'll explain the super-important docker ps command in a way that anyone can understand!</p>
<hr />
<h2>What is <code>docker ps</code>?</h2>
<p>This command shows all the containers on your computer. It tells you which ones are running, which ones are stopped, and what their settings are. Think of <code>docker ps</code> as your list of all containers—just like a list of open tabs in your browser. ️</p>
<hr />
<h2>When Should You Use <code>docker ps</code>?</h2>
<p>You use <code>docker ps</code> when you want to:</p>
<ul>
<li>See which containers are currently running.</li>
<li>Find out which containers have stopped.</li>
<li>Get the ID or name of a container.</li>
<li>Check which ports are open.</li>
<li>View the size of a container.</li>
<li>Check if a container is healthy (yes, containers can have bad days too!).</li>
</ul>
<hr />
<h2>How to Use <code>docker ps</code> (Examples)</h2>
<h3>The Simplest Command:</h3>
<pre><code class="language-bash">docker ps
</code></pre>
<p>Shows <strong>only running</strong> containers.</p>
<h3>Want to See All Containers, Even Stopped Ones?</h3>
<pre><code class="language-bash">docker ps -a
</code></pre>
<p>Now you can see both running and stopped containers. The <em>STATUS</em> column will show why a container stopped (e.g., due to an error or just being turned off).</p>
<h3>How to View the Last Created Container?</h3>
<pre><code class="language-bash">docker ps --latest
</code></pre>
<p>Great for checking if the most recently created container is working properly.</p>
<h3>How to Check How Much Space a Container is Using?</h3>
<pre><code class="language-bash">docker ps -s
</code></pre>
<p>This helps when your disk space is running low.</p>
<h3>How to See Only Container IDs?</h3>
<pre><code class="language-bash">docker ps -q
</code></pre>
<p>Useful when you need container IDs without extra details.</p>
<hr />
<h2>Filtering <code>docker ps</code></h2>
<p>To quickly find the container you need, use filters:</p>
<p>Find a container with a specific label:</p>
<pre><code class="language-bash">docker ps --filter label=app=my-app
</code></pre>
<p>Show containers created before a specific one:</p>
<pre><code class="language-bash">docker ps --filter before=my-app-container
</code></pre>
<p>Find containers using a specific volume:</p>
<pre><code class="language-bash">docker ps --filter volume=my-volume
</code></pre>
<p>See containers in a specific network:</p>
<pre><code class="language-bash">docker ps --filter network=my-network
</code></pre>
<hr />
<h2>How to Change <code>docker ps</code> Output?</h2>
<p>By default, <code>docker ps</code> outputs a table, but you can customize what is displayed:</p>
<pre><code class="language-bash">docker ps --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}'
</code></pre>
<p>This will show only the container ID, image, and status.</p>
<p>Want JSON format? Easy:</p>
<pre><code class="language-bash">docker ps --format json
</code></pre>
<hr />
<h2>Pro Tips!</h2>
<p>✨ Don't forget about <code>-a</code>: If a container stops, <code>docker ps</code> won't show it by default, so use <code>docker ps -a</code>.<br />
✨ <strong>Set up your favorite commands</strong>: For convenience, create aliases for frequently used commands.<br />
✨ <strong>Monitor container sizes</strong>: Keep only the necessary containers to avoid wasting disk space.</p>
<hr />
<h2>Conclusion</h2>
<p>The <code>docker ps</code> command is your go-to tool for managing containers. Now you know how to check which containers are running, which have stopped, and how to filter them. Easy, right?</p>
<p>I hope this guide helped! If you have any questions, feel free to ask—I'm always happy to chat about Docker.</p>
<p>See you soon, IT girl!</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Docker"/>
    <category term="Containers"/>
    <category term="CLI"/>
    <category term="Beginners"/>
  </entry>
  <entry>
    <title>Mastering Terraform Tags Like a True IT Queen</title>
    <link href="https://devops.pink/mastering-terraform-tags-like-a-true-it-queen/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/mastering-terraform-tags-like-a-true-it-queen/</id>
    <published>2025-03-04T00:00:00.000Z</published>
    <updated>2025-03-04T00:00:00.000Z</updated>
    <summary>Learn how to master Terraform tags for cloud resource management, automation, and cost tracking. Discover best practices, default tags, and merging strategies!</summary>
    <content type="html"><![CDATA[<p>Hey girls!</p>
<p>If you're as obsessed with Infrastructure as Code (IaC) as I am, then you know that Terraform is THE tool to have in your IT arsenal. And if you're working with cloud resources, you've probably heard about <strong>tags</strong> - those little key-value labels that help you organize, track expenses, and automate processes.</p>
<p>But let's be honest: tags can sometimes feel like a necessary evil, especially when you're managing multiple cloud environments.</p>
<p>Don't worry, darling! In this post, we'll break down Terraform tags: why you need them, how to use them, and the best practices to follow. So grab your favorite coffee ☕ and let's dive in!</p>
<hr />
<h2>What Are Terraform Tags?</h2>
<p>Think of Terraform tags as little stickers you can attach to cloud resources to <strong>keep things organized and manageable</strong>. They are <strong>key-value pairs</strong> that allow you to classify resources by purpose, environment, or owner.</p>
<p>Example:</p>
<pre><code class="language-hcl">tags = {
  Environment = "Production"
  Owner       = "IT Girl Dev Team"
  Project     = "CoolNewApp"
}
</code></pre>
<p>Why do you need this? Because proper tagging makes resource management easier, helps automate processes, and controls access. Plus, it keeps your infrastructure <strong>structured and aesthetic</strong> - and we don't want a messy cloud, do we? ❌</p>
<hr />
<h2>Tags vs. tags_all: What's the Difference?</h2>
<p>Terraform has two types of tags: <strong>tags</strong> and <strong>tags_all</strong>. They sound similar but serve different purposes:</p>
<ul>
<li><strong>tags</strong> - The tags you define in your Terraform code.</li>
<li><strong>tags_all</strong> - A read-only attribute that Terraform pulls from the resource itself.</li>
</ul>
<p>Example (referencing tags in Azure):</p>
<pre><code class="language-hcl">azurerm_virtual_network.example.tags_all
</code></pre>
<hr />
<h2>Why Should You Use Tags?</h2>
<p>Tags aren't just for aesthetics (although we love that too ). Here are some key reasons why tagging is essential:</p>
<h3>Organization</h3>
<p>Imagine having thousands of resources in your AWS account without tags. Total chaos, right? Tags help group resources by <strong>environment, project, or team</strong>.</p>
<p>Example:</p>
<pre><code class="language-hcl">tags = {
  env     = "staging"
  owner   = "DevOps Team"
  purpose = "testing"
}
</code></pre>
<h3>Cost Management</h3>
<p>Cloud bills can be terrifying , but Terraform tags help you track where your money is going.</p>
<p>Example:</p>
<pre><code class="language-hcl">tags = {
  cost_center = "Marketing Analytics"
}
</code></pre>
<h3>Automation</h3>
<p>You know how much I love automation! Tags allow you to manage deployments, shut down unnecessary resources, and set up backups.</p>
<p>Example:</p>
<pre><code class="language-hcl">tags = {
  auto_shutdown = "true"
  deploy        = "true"
}
</code></pre>
<h3>Access Control</h3>
<p>You can configure tags to restrict access to resources using AWS IAM policies.</p>
<p>Example:</p>
<pre><code class="language-hcl">tags = {
  Environment = "Development"
}
</code></pre>
<hr />
<h2>How to Add Tags to Terraform Resources</h2>
<p>It's super simple! Just use the <code>tags</code> attribute inside the resource block.</p>
<p>Example:</p>
<pre><code class="language-hcl">resource "aws_instance" "my_instance" {
  tags = {
    Environment = "Production"
  }
}
</code></pre>
<h3>Want to Add Multiple Tags? Easy!</h3>
<pre><code class="language-hcl">tags = {
  Environment = "Development"
  Owner       = "Leia Organa"
  Department  = "Rebel Alliance"
}
</code></pre>
<hr />
<h2>What Are Terraform Default Tags?</h2>
<p><strong>Default Tags</strong> are automatic tags applied to ALL resources without having to duplicate them in every block.</p>
<p>Example:</p>
<pre><code class="language-hcl">variable "common_tags" {
  type = map(string)
  default = {
    Environment = "Development"
  }
}
</code></pre>
<p>Then, just use them like this:</p>
<pre><code class="language-hcl">tags = var.common_tags
</code></pre>
<h3>How to Override Default Tags?</h3>
<p>Use the <code>merge()</code> function to combine default and custom tags.</p>
<p>Example:</p>
<pre><code class="language-hcl">resource "aws_instance" "my_instance" {
  tags = merge(
    var.common_tags,
    {
      Name = "MyAwesomeServer"
    }
  )
}
</code></pre>
<hr />
<h2>How to Ignore Tag Changes in Terraform?</h2>
<p>If external systems modify your tags (_Azure Databricks, I see you _), tell Terraform to ignore them!</p>
<p>Example:</p>
<pre><code class="language-hcl">resource "aws_instance" "my_instance" {
  lifecycle {
    ignore_changes = [tags]
  }
}
</code></pre>
<p>Or ignore them at the provider level:</p>
<pre><code class="language-hcl">provider "aws" {
  ignore_tags = ["CostCenter"]
}
</code></pre>
<hr />
<h2>Best Practices for Terraform Tags</h2>
<p>Tips to keep your cloud tagging strategy clean and effective:</p>
<p>✔ <strong>Be consistent</strong>  - Use the same key names across resources.<br />
✔ <strong>Document your tags</strong>  - Define what each tag means.<br />
✔ <strong>Automate tagging</strong> ⚙️ - Use Terraform modules.<br />
✔ <strong>Use Default Tags</strong> ✅ - Follow the DRY (Don't Repeat Yourself) principle.</p>
<hr />
<h2>Level Up Your Terraform with Spacelift</h2>
<p>Want a flawless GitOps process? Try <strong>Spacelift</strong>! It makes Terraform even better with:</p>
<p>✨ <strong>Security policies (OPA)</strong><br />
✨ <strong>Multi-IaC support (Terraform + Kubernetes + Ansible)</strong><br />
✨ <strong>Self-service infrastructure</strong> ‍♀️</p>
<hr />
<h2>Conclusion</h2>
<p>Terraform tags may seem small, but they make a <strong>huge difference</strong> in cloud resource management. Start using them correctly, and your future IT-self will thank you!</p>
<p>Share your favorite Terraform hacks in the comments or on Twitter!</p>
<p>Until next time, keep slaying the IT world!</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Terraform"/>
    <category term="IaC"/>
    <category term="Tagging"/>
  </entry>
  <entry>
    <title>AWS AI/ML - The Ultimate Guide for IT Girls</title>
    <link href="https://devops.pink/aws-ai-ml-the-ultimate-guide-for-it-girls/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/aws-ai-ml-the-ultimate-guide-for-it-girls/</id>
    <published>2025-02-28T00:00:00.000Z</published>
    <updated>2025-02-28T00:00:00.000Z</updated>
    <summary>Unlock AWS AI/ML! Discover how Amazon&apos;s AI tools like SageMaker, Lex, and Polly automate tasks, enhance CX, and drive innovation—no coding needed!</summary>
    <content type="html"><![CDATA[<p>Hey, my tech-savvy girls!</p>
<p>‍ If you're like me and <strong>obsessed with IT and machine learning</strong>, let's break down <strong>AWS AI/ML services</strong>, which help companies (and even individuals) use <strong>artificial intelligence</strong> without all the hassle!</p>
<p>⚡ AWS is <strong>like Netflix for IT</strong>, but instead of movies, it's a massive ecosystem of tools that let businesses <strong>automate processes, analyze data, create chatbots, and even turn text into lifelike speech</strong>!</p>
<p>Today, I'll break down <strong>everything in the most detailed and easy-to-understand way</strong>, so that by the end of this article, you'll <strong>feel like an expert!</strong></p>
<hr />
<h2>AWS: The Magical Toolbox for IT Girls</h2>
<p>AWS is <strong>Amazon's global cloud platform</strong>, which allows businesses and developers to use a wide range of technologies <strong>on a subscription basis</strong>, without needing to build their <strong>own data centers</strong>.</p>
<p>How does it work?</p>
<p>1️⃣ You log into AWS, pick the service you need, and start using it.<br />
2️⃣ Everything runs in the cloud, so you don't need to worry about managing servers.<br />
3️⃣ AWS automates all processes and gives you <strong>ready-made AI/ML solutions</strong>.</p>
<p>AWS offers <strong>a TON of services</strong>, and now I'll break down <strong>the most interesting and useful ones!</strong></p>
<hr />
<h2>AWS AI/ML is Like an Amusement Park: Let's Ride!</h2>
<h3>1. Amazon SageMaker - The Queen of Machine Learning</h3>
<p><strong>What is it?</strong></p>
<p>Amazon SageMaker is <strong>the most powerful AWS tool for machine learning</strong>. It lets you <strong>build, train, and deploy ML models</strong> without needing <strong>deep programming knowledge</strong>.</p>
<p><strong>How does it work?</strong></p>
<p>✔️ You choose an ML model (or use a prebuilt one).<br />
✔️ Upload data (e.g., last year's sales for an online store).<br />
✔️ SageMaker trains the model and makes predictions.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Finance</strong> - predicts stock price movements.<br />
✅ <strong>Weather forecasting</strong> - analyzes temperature trends.<br />
✅ <strong>E-commerce</strong> - recommends products to customers.<br />
✅ <strong>Fraud detection</strong> - identifies suspicious bank transactions.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>If you're new to ML, SageMaker <strong>automates everything</strong>—just upload data, and it does the magic for you! ✨</p>
<hr />
<h2>2. Amazon Lex - Smart Chatbots &amp; Virtual Assistants</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Lex is an <strong>AI service for creating smart chatbots</strong> and virtual assistants <strong>like Alexa or Siri</strong>.</p>
<p><strong>How does it work?</strong></p>
<p>✔️ Uses <strong>Natural Language Processing (NLP)</strong> to understand what users are saying.<br />
✔️ Processes <strong>both text and voice</strong> commands.<br />
✔️ Works based on <strong>intents</strong>—you set up sample phrases, and the bot learns to respond.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Customer service chatbots</strong> - answer FAQs without human agents.<br />
✅ <strong>Virtual assistants</strong> - Alexa-style bots for businesses.<br />
✅ <strong>Data search bots</strong> - find information quickly based on user queries.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>Want to <strong>create your own chatbot</strong>? Lex helps you do it <strong>without complex coding!</strong></p>
<hr />
<h2>3. Amazon Polly - The AI Voice Generator (Talking Robot)</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Polly is an <strong>AI tool that turns text into lifelike speech</strong>!</p>
<p><strong>How does it work?</strong></p>
<p>✔️ You type in a text.<br />
✔️ Polly reads it <strong>in a natural-sounding voice</strong> (male, female, child, and even with accents!).<br />
✔️ You can adjust <strong>tone, speed, and emotions</strong>.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Audiobooks &amp; articles</strong><br />
✅ <strong>Voiceovers for videos &amp; ads</strong><br />
✅ <strong>Accessibility for visually impaired users</strong><br />
✅ <strong>Smart voice assistants</strong> ‍♀️</p>
<p><strong>IT Girl Tip:</strong></p>
<p>If you have a <strong>YouTube channel or TikTok</strong>, Polly can <strong>automatically voiceover your scripts!</strong></p>
<hr />
<h2>4. Amazon Rekognition - AI for Facial &amp; Object Detection</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Rekognition is <strong>an AI system that analyzes images and videos</strong> to detect <strong>people, objects, and even emotions</strong>!</p>
<p><strong>How does it work?</strong></p>
<p>✔️ Recognizes <strong>faces</strong> and <strong>objects</strong>.<br />
✔️ Detects <strong>human emotions</strong>.<br />
✔️ Can <strong>analyze live video streams</strong>.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Security</strong> - surveillance cameras automatically recognize faces.<br />
✅ <strong>Content moderation</strong> - filters out inappropriate images.<br />
✅ <strong>Marketing analytics</strong> - studies customer reactions to ads.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>If you work in <strong>cybersecurity or UX design</strong>, Rekognition can <strong>automate visual content analysis</strong>!</p>
<hr />
<h2>5. Amazon Textract - AI-Powered Document Scanning</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Textract <strong>extracts text, tables, and forms from scanned documents</strong> and images.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Finance</strong> - analyzing invoices &amp; receipts.<br />
✅ <strong>Healthcare</strong> - digitizing medical records.<br />
✅ <strong>Legal</strong> - automating document review.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>If you have <strong>a pile of paperwork</strong>, Textract can <strong>turn it into searchable digital data!</strong></p>
<hr />
<h2>6. Amazon Translate - AI-Powered Language Translator</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Translate is <strong>AWS's AI-powered translation tool</strong> that translates <strong>text in real time</strong>.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Website &amp; app localization</strong>.<br />
✅ <strong>Business document translation</strong>.<br />
✅ <strong>Social media &amp; comment analysis</strong>.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>Need to <strong>quickly translate</strong> a large amount of text? Amazon Translate does it <strong>in seconds</strong>!</p>
<hr />
<h2>7. Amazon Transcribe - Automatic Speech-to-Text</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Transcribe <strong>turns spoken words into text automatically!</strong></p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Subtitles for videos</strong><br />
✅ <strong>Lecture &amp; interview transcriptions</strong></p>
<p><strong>IT Girl Tip:</strong></p>
<p>A <strong>must-have tool</strong> for bloggers, journalists, and students!</p>
<hr />
<h2>8. Amazon Kendra - The AI-Powered Search Engine</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Kendra is <strong>like Google for your company's internal files</strong>—it helps businesses quickly find documents, reports, and emails.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Corporate search</strong> - fast retrieval of policies, reports, and knowledge base articles.<br />
✅ <strong>Customer support</strong> - quickly pulls up relevant FAQs.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>If you work with <strong>a lot of PDFs &amp; reports</strong>, Kendra <strong>automates searching &amp; organizing</strong>!</p>
<hr />
<h2>9. Amazon Comprehend - AI-Powered Text Analysis</h2>
<p><strong>What is it?</strong></p>
<p>Amazon Comprehend <strong>reads and understands text like a human</strong>, detecting emotions, key topics, and relationships between words.</p>
<p><strong>Where is it used in real life?</strong></p>
<p>✅ <strong>Customer sentiment analysis</strong> - understand what users feel about a product.<br />
✅ <strong>Social media monitoring</strong> - track trends &amp; user reactions.</p>
<p><strong>IT Girl Tip:</strong></p>
<p>Perfect if you work with <strong>customer reviews, social media comments, or support tickets</strong>!</p>
<p><strong>That's it!</strong> Now you know <strong>everything about AWS AI/ML</strong>!</p>
<p>Which service are you most excited to try?</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="AWS"/>
    <category term="AI"/>
    <category term="ML"/>
    <category term="Cloud Computing"/>
  </entry>
  <entry>
    <title>Mastering archive_file in Terraform Like a Pro</title>
    <link href="https://devops.pink/mastering-archive-file-in-terraform-like-a-pro/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/mastering-archive-file-in-terraform-like-a-pro/</id>
    <published>2025-02-27T00:00:00.000Z</published>
    <updated>2025-02-27T00:00:00.000Z</updated>
    <summary>Learn how to use Terraform&apos;s archive_file to create ZIP &amp; TAR archives for AWS, Kubernetes, and Azure. Get step-by-step guides and troubleshooting tips!</summary>
    <content type="html"><![CDATA[<p>Hey friends!  If you're as obsessed with Terraform as I am (because who doesn't love automating infrastructure the chic way?!), then you NEED to know about the <code>archive_file</code> data source. It's basically your bestie for packaging files into ZIP or TAR formats, making deployments effortless. No more manual zipping—Terraform does it for you.</p>
<p>Today, I'm breaking down everything you need to know about <code>archive_file</code>, how to create archives from single or multiple files, and troubleshooting tips because we all know tech can be a little moody sometimes.</p>
<hr />
<h2>What is <code>archive_file</code> in Terraform?</h2>
<p>Think of <code>archive_file</code> as the glam squad for your code—it takes your files and bundles them into neat little ZIP or TAR packages. Super useful for:</p>
<p>✨ Deploying AWS Lambda functions (which require zipped code!)
✨ Packaging Kubernetes manifests or Helm charts
✨ Bundling files before uploading to S3, Azure Storage, or Google Cloud Storage</p>
<p>Here's how you set it up:</p>
<pre><code class="language-hcl">data "archive_file" "example" {
  type        = "zip"              # Options: zip, tar, tgz
  source_dir  = "path/to/source"   # Directory to compress
  output_path = "path/to/output.zip" # Destination of the archive
}
</code></pre>
<p>Or, if you're working with just one file:</p>
<pre><code class="language-hcl">data "archive_file" "example_file" {
  type        = "zip"
  source_file = "path/to/file.txt"
  output_path = "path/to/output.zip"
}
</code></pre>
<p><strong>Pro Tip:</strong> Use <code>source_dir</code> for entire folders and <code>source_file</code> for single files—but NOT both in the same block. Terraform's picky like that.</p>
<hr />
<h2>Creating an Archive from a Single File</h2>
<p>Let's say you need to ZIP up a single file (hello, AWS Lambda deployments!). It's super simple:</p>
<pre><code class="language-hcl">data "archive_file" "example" {
  type        = "zip"
  source_file = "example.txt"
  output_path = "example.zip"
}

output "archive_checksum" {
  value = data.archive_file.example.output_base64sha256
}
</code></pre>
<p>This <code>output_base64sha256</code> is a SHA-256 checksum to make sure your file stays intact. You don't <em>need</em> it, but it's a nice way to keep things in check. ✅</p>
<h3>Example: Zipping a Python Script for AWS Lambda</h3>
<p>Say you have <code>lambda_function.py</code> and need to deploy it to AWS Lambda:</p>
<pre><code class="language-hcl">data "archive_file" "lambda_zip" {
  type        = "zip"
  source_file = "lambda_function.py"
  output_path = "lambda_function.zip"
}
</code></pre>
<p>Then use it in your Lambda function:</p>
<pre><code class="language-hcl">resource "aws_lambda_function" "my_lambda" {
  function_name    = "my_lambda_function"
  role             = aws_iam_role.lambda_role.arn
  runtime          = "python3.8"
  handler          = "lambda_function.lambda_handler"

  filename         = data.archive_file.lambda_zip.output_path
  source_code_hash = data.archive_file.lambda_zip.output_base64sha256
}
</code></pre>
<p>✨ <strong>Heads up!</strong> If your function has dependencies, you need to zip the whole folder, not just the script.</p>
<hr />
<h2>Creating Archives from Multiple Files</h2>
<p>Ugh, I wish Terraform let us specify multiple files directly, but no, it's a diva.  The workaround? Gather files in a temp folder first:</p>
<pre><code class="language-hcl">resource "terraform_data" "prepare_files" {
  provisioner "local-exec" {
    command = &lt;&lt;EOT
mkdir -p temp_folder
cp ${path.module}/file1.txt temp_folder/
cp ${path.module}/file2.txt temp_folder/
cp ${path.module}/file3.txt temp_folder/
EOT
  }
}

data "archive_file" "multiple_files" {
  type        = "zip"
  source_dir  = "${path.module}/temp_folder"
  output_path = "${path.module}/multiple_files.zip"
  depends_on  = [terraform_data.prepare_files]
}
</code></pre>
<p>If you just want to archive an entire directory:</p>
<pre><code class="language-hcl">data "archive_file" "example" {
  type        = "zip"
  source_dir  = "${path.module}/my_folder"
  output_path = "${path.module}/example.zip"
}
</code></pre>
<hr />
<h2>Uploading an Archive to Azure Storage</h2>
<p>For my Azure girls , here's how to compress a folder and upload it to an Azure Storage Blob:</p>
<pre><code class="language-hcl">data "archive_file" "app_package" {
  type        = "zip"
  source_dir  = "${path.module}/my_app_folder"
  output_path = "${path.module}/app_package.zip"
}
</code></pre>
<p>Now, create a storage account and upload it:</p>
<pre><code class="language-hcl">resource "azurerm_storage_blob" "example" {
  name                   = "app_package.zip"
  storage_account_name   = azurerm_storage_account.example.name
  storage_container_name = azurerm_storage_container.example.name
  type                   = "Block"
  source                 = data.archive_file.app_package.output_path

  depends_on = [data.archive_file.app_package]
}
</code></pre>
<hr />
<h2>Troubleshooting archive_file Issues</h2>
<p>Terraform acting up? Here's how to fix common <code>archive_file</code> headaches:</p>
<p>1️⃣ <strong>Incorrect Source Path</strong> → Check your file paths! Use <code>${path.module}</code> to avoid mistakes.<br />
2️⃣ <strong>Missing zip Utility</strong> → Terraform needs <code>zip</code> installed. Fix it with:</p>
<ul>
<li><strong>Linux:</strong> <code>sudo apt install zip</code></li>
<li><strong>macOS:</strong> <code>brew install zip</code></li>
<li><strong>Windows:</strong> Ensure <code>zip.exe</code> is in your PATH.</li>
</ul>
<p>3️⃣ <strong>Files Not Updating?</strong> → Terraform won't detect changes inside <code>source_dir</code>. Use <code>filemd5()</code> like this:</p>
<pre><code class="language-hcl">output "archive_hash" {
  value = filemd5(data.archive_file.example.output_path)
}
</code></pre>
<p>4️⃣ <strong>Permission Issues</strong> → If AWS Lambda or Docker throws permission errors, chmod your files before zipping:</p>
<pre><code class="language-bash">chmod +x my_script.sh
</code></pre>
<p>5️⃣ <strong>Wrong Paths in Modules</strong> → Always use <code>${path.module}</code>, not <code>${path.root}</code>!</p>
<hr />
<h2>Key Takeaways</h2>
<p><code>archive_file</code> is a Terraform essential for packaging files before deployment.<br />
Use <code>source_file</code> for one file and <code>source_dir</code> for entire folders.<br />
Troubleshoot common issues with paths, permissions, and missing utilities.</p>
<p>Terraform is fun (and powerful), so go forth and automate like the IT queen you are! ‍✨</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="Terraform"/>
    <category term="IaC"/>
    <category term="Automation"/>
  </entry>
  <entry>
    <title>DevOps for IT Girls - Deploying Like a Queen</title>
    <link href="https://devops.pink/devops-for-it-girls-deploying-like-a-queen/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/devops-for-it-girls-deploying-like-a-queen/</id>
    <published>2025-01-09T00:00:00.000Z</published>
    <updated>2025-01-09T00:00:00.000Z</updated>
    <summary>Master DevOps the IT Girl Way! Learn Docker, Kubernetes, CI/CD &amp; more in this fun, beginner-friendly guide. Automate &amp; deploy like a pro!</summary>
    <content type="html"><![CDATA[<p>Hey, tech beauties!</p>
<p>If DevOps sounds like a complicated, dry topic, then <strong>you've never had it explained the right way!</strong> Think of it as the ultimate <strong>self-care routine for your code</strong>—from writing it, to deploying it, to making sure it always runs smoothly.</p>
<p>Today, we're going through <strong>the entire DevOps cycle</strong> in a way that's easy, fun, and totally <strong>girl-coded</strong>—with an example we all understand: <strong>skincare &amp; beauty!</strong></p>
<hr />
<h2>Step 1: You Have an Idea—Now What?</h2>
<p>Let's say you want to create <strong>a smart skincare recommendation app</strong>. You enter your skin type, age, and season, and boom—it suggests the perfect skincare routine. Genius, right?</p>
<p>You open <strong>VS Code</strong>, spend a few hours coding (we don't sleep, we debug ️), and <strong>it works!</strong></p>
<p>But wait… only <em>you</em> can see it. <strong>How do we make it available to the world?</strong></p>
<hr />
<h2>Step 2: Packaging It Up (Docker)</h2>
<p>Here's the first <strong>DevOps rule</strong>: <em>Just because it works on your laptop doesn't mean it'll work anywhere else.</em></p>
<p>Think of your code like <strong>skincare products</strong>. If you're traveling, you wouldn't just throw your creams, serums, and SPF loose into your suitcase, right? <strong>You'd pack them neatly in a travel bag</strong> to keep everything organized and secure.</p>
<p>That's exactly what <strong>Docker</strong> does for your app:</p>
<p>✅ <strong>Packs your code and all dependencies</strong> together<br />
✅ <strong>Ensures it runs the same way</strong> anywhere—your laptop, a server, or the cloud<br />
✅ <strong>Eliminates the “but it works on my machine!” excuse</strong></p>
<p>Now, wherever your app goes, it's ready to glow ✨.</p>
<hr />
<h2>Step 3: Setting Up the Right Space (Terraform)</h2>
<p>Okay, now your app is inside its <strong>cute little Docker container</strong>—but where do you run it? You need <strong>a server</strong>.</p>
<p>This is where <strong>Terraform</strong> comes in. If Docker is your <strong>travel bag</strong>, Terraform is <strong>your perfectly organized vanity shelf</strong>, making sure everything is set up <strong>just the way you like it</strong>.</p>
<p>Terraform helps by:</p>
<p>✨ <strong>Creating servers automatically</strong> (no manual clicking in cloud dashboards)<br />
✨ <strong>Ensuring they always have the right settings</strong> (memory, CPU, storage)<br />
✨ <strong>Making it easy to scale when traffic grows</strong></p>
<p>Instead of setting up a new server manually every time, <strong>Terraform does it for you—perfectly, every time</strong>.</p>
<hr />
<h2>Step 4: Organizing Everything (Ansible)</h2>
<p>Great, you've got a server—but it's <strong>completely empty</strong>. No software, no setup, nothing. It's like getting a <strong>brand-new vanity table</strong> with no products on it.</p>
<p>This is where <strong>Ansible</strong> comes in.</p>
<p>Imagine you have a <strong>list of must-have skincare products</strong> (cleanser, moisturizer, SPF, serum). You always arrange them in the same order on your vanity <strong>so everything is easy to find</strong>.</p>
<p>That's what <strong>Ansible</strong> does for your server:</p>
<p>✅ <strong>Installs all the software it needs</strong> (Docker, libraries, tools)<br />
✅ <strong>Configures everything automatically</strong><br />
✅ <strong>Makes sure every new server is set up exactly the same way</strong></p>
<hr />
<h2>Step 5: Automating Updates (CI/CD)</h2>
<p>You decide to add a new feature: your app <strong>now suggests skincare based on the weather</strong> (because let's be real—your routine is different for winter vs. summer!).</p>
<p>But updating your app <strong>manually</strong> every time you make a change? <strong>Girl, no.</strong></p>
<p>That's why we use <strong>CI/CD (Continuous Integration / Continuous Deployment)</strong>:</p>
<p>✅ You <strong>push your new code</strong> to <strong>GitHub</strong><br />
✅ <strong>CI/CD tools (GitHub Actions, GitLab CI/CD, Jenkins)</strong> automatically test, build, and deploy it<br />
✅ Your app updates <strong>without you lifting a finger</strong></p>
<p>It's like a <strong>beauty subscription box</strong>—new products show up at your door every month, without you having to reorder them.</p>
<hr />
<h2>Step 6: Monitoring Performance (Prometheus &amp; Grafana)</h2>
<p>Your app is live, but how do you <strong>know if it's running smoothly?</strong></p>
<p>Meet <strong>Prometheus &amp; Grafana</strong>, your app's <strong>skincare tracker</strong>.</p>
<p><strong>Prometheus</strong> collects data (server health, errors, traffic, performance)<br />
<strong>Grafana</strong> turns it into <strong>beautiful dashboards &amp; alerts</strong></p>
<p>Just like tracking your skincare routine helps you know <strong>when to hydrate more or change products</strong>, monitoring tools <strong>help prevent app crashes before users even notice</strong>.</p>
<hr />
<h2>The Full DevOps Cycle—Beauty Edition</h2>
<p>So, let's put it all together:</p>
<p>1️⃣ <strong>Write the code</strong> ️ <em>(find your perfect skincare routine)</em><br />
2️⃣ <strong>Package it in Docker</strong>  <em>(store products in a beauty bag for easy travel)</em><br />
3️⃣ <strong>Deploy infrastructure with Terraform</strong>  <em>(set up a perfectly organized vanity shelf)</em><br />
4️⃣ <strong>Set up servers with Ansible</strong>  <em>(arrange your skincare in the right order)</em><br />
5️⃣ <strong>Automate updates with CI/CD</strong>  <em>(subscribe to beauty boxes so you always get the latest products)</em><br />
6️⃣ <strong>Monitor everything with Prometheus &amp; Grafana</strong>  <em>(track your skincare results and adjust as needed)</em></p>
<p>Now, your app <strong>deploys automatically, scales seamlessly, and never crashes unexpectedly</strong>. That's what I call <strong>effortless beauty… and DevOps magic!</strong> ✨</p>
<hr />
<h2>Final DevOps Girl Tips</h2>
<p><strong>Learn step by step:</strong> Start with <strong>Docker</strong>, then move to <strong>CI/CD</strong>, then <strong>Kubernetes</strong>. No need to learn everything in one day!</p>
<p>⚡ <strong>Automate everything:</strong> The less manual work, the more time for <strong>innovation (or coffee &amp; skincare )</strong>.</p>
<p><strong>Stay updated:</strong> DevOps is always evolving—<strong>follow IT girl bloggers, Twitter devs, and tech conferences</strong> to stay ahead.</p>
<p>And most importantly, <strong>don't be afraid!</strong> DevOps isn't scary—it's just <strong>a well-organized self-care routine for your apps.</strong></p>
<p>So go out there and <strong>deploy like a queen</strong>! ✨</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="DevOps &amp; Cloud"/>
    <category term="DevOps"/>
    <category term="GitOps"/>
    <category term="Automation"/>
  </entry>
  <entry>
    <title>Top Machine Learning YouTube Courses to Fuel Your Tech Passion</title>
    <link href="https://devops.pink/top-machine-learning-youtube-courses-to-fuel-your-tech-passion/" rel="alternate" type="text/html"/>
    <id>https://devops.pink/top-machine-learning-youtube-courses-to-fuel-your-tech-passion/</id>
    <published>2024-05-05T00:00:00.000Z</published>
    <updated>2024-05-05T00:00:00.000Z</updated>
    <summary>This guide offers a complete pathway for learners at every stage of their machine learning and deep learning journey, helping you navigate and excel in the evolving world of tech.</summary>
    <content type="html"><![CDATA[<p>Hey there, code cuties!  Today, I'm totally thrilled to share with you all something that's super close to my heart—your ultimate guide to slaying the tech world with the best Machine Learning and Deep Learning courses you can find on YouTube!  Whether you're a total newbie or a seasoned pro looking to spice up your skill set, I've curated just the right playlists to keep your tech game on point. Let's dive into this digital adventure together! ✨</p>
<hr />
<h2>Foundational Machine Learning Courses</h2>
<ol>
<li><strong>Starting Strong</strong>: Kick off your journey with the <a href="https://www.youtube.com/playlist?list=PL05umP7R6ij35ShKLDqccJSDntugY4FQT">Introduction to Machine Learning (Tübingen)</a>. It's like the beginner's bible—think regression, classification, and sparking those aha! moments.</li>
<li><strong>Deep Dive into Data</strong>: Get cozy with data in <a href="https://www.youtube.com/playlist?list=PL05umP7R6ij2XCvrRzLokX6EoHWaGA2cC">Statistical Machine Learning (Tübingen)</a>. It's all about unlocking the secrets of algorithms and learning paradigms.</li>
<li><strong>Master the Basics</strong>: With <a href="https://www.youtube.com/playlist?list=PLzrCXlf6ypbxS5OYOY3EN_0u2fDuIT6Gt">Machine Learning Lecture (Stefan Harmeling)</a>, you'll grasp the essentials from Bayes' rule to Gaussian Processes. Total game-changer!</li>
<li><strong>Full Spectrum Learning</strong>: The <a href="https://www.youtube.com/playlist?list=PLD63A284B7615313A">Caltech CS156: Learning from Data</a> course is a gem, covering everything from the basics to support vector machines. Prepare to be amazed!</li>
<li><strong>Hands-On Hero</strong>: For those who love getting their hands dirty, <a href="https://www.youtube.com/playlist?list=PL2UML_KCiC0UlY7iCQDSiGDMovaupqc83">Applied Machine Learning</a> teaches the nitty-gritty of optimization and regularization. It's practical magic! ✨</li>
</ol>
<hr />
<h2>Deep Learning Exploration</h2>
<ol>
<li><strong>Beginner's Luck</strong>: Start your deep learning quest with <a href="https://www.youtube.com/playlist?list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI">Introduction to Deep Learning (MIT)</a>. It's perfect for babes stepping into the tech scene.</li>
<li><strong>Technique Treasure Trove</strong>: The <a href="https://www.youtube.com/playlist?list=PL_iWQOsE6TfVmKkQHucjPAoRtIJYt8a5A">Deep Learning: CS 182</a> course will have you mastering everything from error analysis to imitation learning. Unlock your potential!</li>
<li><strong>Nerd Out with Neural</strong>: Dive deep with <a href="https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ">Neural Networks: Zero to Hero</a> by Andrej Karpathy. It's your backstage pass to the neural network show!</li>
<li><strong>Creativity Meets AI</strong>: Explore how AI transforms art in <a href="https://www.youtube.com/playlist?list=PLCpMvp7ftsnIbNwRnQJbDNRqO6qiN3EyH">MIT: Deep Learning for Art, Aesthetics, and Creativity</a>. Perfect for when your inner artist meets your inner coder!</li>
<li><strong>Unsupervised Learning Adventures</strong>: Get intrigued by the mysteries of AI with <a href="https://www.youtube.com/playlist?list=PLwRJQ4m4UJjPiJP3691u-qWwPGVKzSlNP">Deep Unsupervised Learning</a>. Discover what lurks behind the data! ️‍♀️</li>
</ol>
<hr />
<h2>Specialized Courses in Machine Learning</h2>
<ol>
<li><strong>Healing with AI</strong>: The <a href="https://www.youtube.com/playlist?list=PLUl4u3cNGP60B0PQXVQyGNdCyCTDU1Q5j">MIT 6.S897: Machine Learning for Healthcare (2019)</a> melds ML with medicine. It's where tech meets tender loving care!</li>
<li><strong>Graph Gurus</strong>: For a graph-tastic experience, check out <a href="https://www.youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn">Machine Learning with Graphs (Stanford)</a>. From PageRank to graph neural networks, it's a must for data divas!</li>
<li><strong>Talk the AI Talk</strong>: Dive into <a href="https://www.youtube.com/playlist?list=PLoROMvodv4rOSH4v6133s9LFPRHjEmbmJ">CS224N: Natural Language Processing with Deep Learning</a> and learn how to teach machines to understand us. Finally, a tech that gets you!</li>
</ol>
<hr />
<h2>Practical and Real-World Applications</h2>
<ol>
<li><strong>Language Model Love</strong>: Learn to build with <a href="https://www.comet.com/site/llm-course/">LLMOps: Building Real-World Applications With Large Language Models</a>. Bring your code to life!</li>
<li><strong>From Lab to Fab</strong>: <a href="https://www.youtube.com/playlist?list=PL1T8fO7ArWlcWg04OgNiJy91PywMKT2lv">Full Stack Deep Learning</a> guides you through everything from model training to real-world deployment. Let's get those models runway-ready!</li>
</ol>
<hr />
<h2>Exploring Computer Vision and Reinforcement Learning</h2>
<ol>
<li><strong>See the Vision</strong>: Stanford's <a href="https://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv">CS231N: Convolutional Neural Networks for Visual Recognition</a> is perfect for spotting trends and techs in visual data. ️</li>
<li><strong>Decision Day</strong>: Unravel the secrets of AI decision-making with <a href="https://www.youtube.com/playlist?list=PLImtCgowF_ES_JdF_UcM60EXTcGZg67Ua">Reinforcement Learning (Polytechnique Montreal, Fall 2021)</a>. It's all about making smart choices!</li>
</ol>
<p>This lineup is literally your dream guide to becoming a tech queen! Whether you're just getting started or looking to level up, these courses are your golden tickets to the tech scene. Let's own this journey together, one algorithm at a time!</p>
<hr />
<p>&lt;div style={{ textAlign: "center", paddingBottom: "3rem", marginTop: "5rem" }}&gt;
&lt;p style={{ fontSize: "0.95rem", letterSpacing: "0.25em", textTransform: "uppercase", color: "#ffffff", margin: "0 0 8px 0", fontWeight: "900" }}&gt;
Tatiana Mikhaleva
&lt;/p&gt;
&lt;p style={{ fontSize: "0.75rem", letterSpacing: "0.2em", textTransform: "uppercase", color: "#D4537E", margin: "0 0 1rem 0" }}&gt;
Docker Captain  ·  IBM Champion  ·  AWS Community Builder
&lt;/p&gt;
&lt;p style={{ fontSize: "0.8rem", color: "#9B2D5A", margin: "0 0 2.5rem 0", fontStyle: "italic" }}&gt;
DevOps.Pink — cloud-native education for the agentic-AI era.
&lt;/p&gt;
&lt;div style={{ display: "flex", justifyContent: "center", gap: "1rem", flexWrap: "wrap" }}&gt;
&lt;a href="https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;YouTube&lt;/a&gt;
&lt;a href="https://devops.pink/discord" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;Discord&lt;/a&gt;
&lt;a href="https://www.linkedin.com/in/devopspink/" target="_blank" rel="noopener noreferrer" style={{ padding: "0.6rem 1.5rem", border: "1px solid #9B2D5A", color: "#D4537E", textDecoration: "none", fontWeight: "bold", textTransform: "uppercase", letterSpacing: "0.15em", fontSize: "0.8rem", borderRadius: "2px", transition: "all 0.3s ease" }}&gt;LinkedIn&lt;/a&gt;
&lt;/div&gt;
&lt;/div&gt;</p>
]]></content>
    <author>
      <name>Tatiana Mikhaleva</name>
    </author>
    <category term="AI &amp; MLOps"/>
    <category term="ML"/>
    <category term="YouTube"/>
    <category term="Courses"/>
  </entry>
</feed>