<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>DevOps.Pink</title><description>Signal over noise in cloud-native &amp; AI</description><link>https://devops.pink/</link><language>en</language><managingEditor>Tatiana Mikhaleva &lt;tatiana@devops.pink&gt;</managingEditor><webMaster>Tatiana Mikhaleva &lt;tatiana@devops.pink&gt;</webMaster><copyright>2026 Tatiana Mikhaleva. All rights reserved.</copyright><image><url>https://devops.pink/images/logos/devopspink-logo.svg</url><title>DevOps.Pink</title><link>https://devops.pink/</link></image><lastBuildDate>Thu, 30 Jul 2026 00:00:00 GMT</lastBuildDate><ttl>60</ttl><atom:link href="https://devops.pink/rss.xml" rel="self" type="application/rss+xml" xmlns:atom="http://www.w3.org/2005/Atom"/><item><title>The Terminal Was Never the Point: Managing Parallel AI Coding Agents</title><link>https://devops.pink/the-terminal-was-never-the-point-parallel-ai-coding-agents/</link><guid isPermaLink="true">https://devops.pink/the-terminal-was-never-the-point-parallel-ai-coding-agents/</guid><description>Claude Code, Codex, and Copilot agents now edit your repo in parallel, and a terminal shows one at a time. Why visual Git tooling became the control tower.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;For years, visual Git clients were treated as the tool you reached for if you could not handle the command line. Then the code started writing itself, and the argument quietly settled.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You give an AI agent a task (refactor the auth handlers, update the tests) and it goes off to work. While it runs, you start a second on something unrelated, then a third. Three agents are now editing your codebase in parallel, each in its own working directory, all at once. And your terminal, the tool you have trusted for years, can show you exactly one of them at a time.&lt;/p&gt;
&lt;p&gt;That small, ordinary moment is the end of a very old argument.&lt;/p&gt;
&lt;p&gt;For as long as software has had a culture, it has had a hierarchy of tools, and everyone who writes code knows its shape. Real engineers live in the terminal. They pipe, they script, they rebase from memory, and they treat the command line as the only honest interface to a machine. Everything else is paint over the real thing. A visual Git client, in that worldview, was never quite a serious tool. It was for people who preferred a picture to the raw command, and the clients that leaned into visualization wore a permanent backhanded compliment: &lt;em&gt;makes Git approachable, lowers the cognitive load, no terminal required.&lt;/em&gt; Said one way, praise. Said the way it usually was, a pat on the head.&lt;/p&gt;
&lt;p&gt;The command line partisans were not wrong about the terminal. They were wrong about where the work was going.&lt;/p&gt;
&lt;h2&gt;The assumption underneath the hierarchy&lt;/h2&gt;
&lt;p&gt;Give the command line its due, fully and once: for linear work, nothing has ever beaten it. You type one command, it does one thing, you see the result. No hidden state, no interpretation layer, nothing between your intent and the machine. For an engineer working a task by hand, one branch and one commit and one merge at a time, that directness is the whole point. Against it, a diagram of your repository really was optional. If you change one thing at a time, you can hold the state in your head.&lt;/p&gt;
&lt;p&gt;But that judgment rests on a single assumption, invisible because it was always true: the work is sequential. One human, doing one thing at a time.&lt;/p&gt;
&lt;p&gt;That assumption just stopped being true.&lt;/p&gt;
&lt;h2&gt;What parallel agents broke&lt;/h2&gt;
&lt;p&gt;The question in a lot of engineering teams has changed. It is no longer &quot;should I use an AI coding agent.&quot; It is &quot;how do I run more than one without losing track of what they are all doing.&quot;&lt;/p&gt;
&lt;p&gt;Let me be precise about the case I mean, because it is not the only one. Plenty of agent work is moving into ephemeral cloud environments and coming back as pull requests, and in that world the review dashboard, not the desktop, is where you watch. But that is not where most people are right now. Right now, millions of engineers run agents locally against real working directories on their own machines: Claude Code, Codex CLI, Copilot CLI, Gemini CLI. For them the visibility problem is not a forecast. It is Tuesday.&lt;/p&gt;
&lt;p&gt;Return to those three agents. The terminal shows you one. And yes, before anyone says it: you can tile five terminals with tmux, or zellij, or a split pane, and watch every log stream at once. But look at what that actually gives you. Five waterfalls of output. A log tells you what an agent is &lt;em&gt;saying&lt;/em&gt;. It does not tell you where that agent is in your codebase, what it has committed, or how its work relates to the other two. A multiplexer scales the output; it does not scale your grasp of the state. You are still reconstructing the real picture in your head, from scrolling text: who changed what, and whether it collides.&lt;/p&gt;
&lt;p&gt;This is not a failure of the terminal. It is doing exactly what it was built to do, representing linear work with total fidelity. The work simply stopped being linear. Agents produce parallel, overlapping, simultaneous output, and no linear interface represents parallel work well, no matter how skilled the driver or how many panes they have open.&lt;/p&gt;
&lt;h2&gt;The interface built for parallel work&lt;/h2&gt;
&lt;p&gt;Think about what an air traffic controller needs. Not one radio channel checked in sequence, one aircraft at a time; that collapses the instant there are five planes up. A controller needs one surface showing every aircraft at once: where each is, where it is heading, which needs attention now. The value is in seeing all of them together, in relation to each other.&lt;/p&gt;
&lt;p&gt;That is exactly what a linear interface cannot give you and a visual one always could. It is also exactly what got waved off as a crutch for years, because until now nobody needed to watch five things at once. One human working by hand never had five parallel streams to monitor. The moment the machines did the writing, and did it in parallel, the thing that looked like a convenience became a control tower.&lt;/p&gt;
&lt;p&gt;The tools built around visualization, it turns out, did not need to reinvent themselves for this moment. Their premise was already the one the moment demanded: you should be able to &lt;em&gt;see&lt;/em&gt; the state of your work, every branch and every commit and how they relate, on a single surface, instead of rebuilding it in your head from a scroll of output. That premise sat for years, filed under &quot;nice for people who find &lt;code&gt;git log&lt;/code&gt; intimidating.&quot; It turned out to be the right architecture for a future that had not arrived yet.&lt;/p&gt;
&lt;h2&gt;Managing parallel agents in practice&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gitkraken.com/&quot;&gt;GitKraken&lt;/a&gt; is the clearest example to reach for, partly because it made &lt;a href=&quot;/gitkraken-visual-dx/&quot;&gt;the most stubborn bet on visualization&lt;/a&gt; and partly because it has now extended that bet, feature by feature, straight into agent work. Read its recent additions not as a feature list but as a map of the specific ways parallel machine work goes wrong.&lt;/p&gt;
&lt;p&gt;The first problem is not knowing what is happening at all. Start an &lt;a href=&quot;https://www.gitkraken.com/features/agent-management&quot;&gt;agent session&lt;/a&gt; and GitKraken spins up an isolated working directory (a &lt;a href=&quot;https://git-scm.com/docs/git-worktree&quot;&gt;Git worktree&lt;/a&gt;), runs your setup, and launches the agent, all from one action instead of the old manual dance of creating the worktree, installing dependencies, and starting the agent by hand. Each session becomes a card on one surface, with live status: running, waiting on you, or done. The blind window-switching was the disease; a single board showing every agent&apos;s state is the cure.&lt;/p&gt;
&lt;p&gt;Worth being exact about that isolation, because it is easy to overclaim. A worktree gives each agent its own working directory but shares the repository&apos;s history. Main stays untouched until something is committed. It is not a sealed sandbox, and it is not meant to be one. It is the right level of isolation for managing parallel Git work, and nothing more is promised.&lt;/p&gt;
&lt;p&gt;The second problem is knowing &lt;em&gt;where&lt;/em&gt; the work is, not just that it exists. The commit graph now includes every active worktree, so each agent&apos;s branch sits in the graph beside all the others: what it has committed, and how those commits relate to everything else in the tree. That is the difference between a status light reading &quot;running&quot; and a map showing the actual position. The limit is worth stating plainly. Seeing three agents converge on the same auth module does not prevent the collision they are heading toward; no tool could stop that on its own. What it buys you is what logs never will: you watch the collision forming while there is still time to step in, instead of meeting it at merge time as a thousand-line pileup.&lt;/p&gt;
&lt;p&gt;The third problem is what to do with the output once an agent is done. A finished agent tends to dump one sprawling diff across a dozen files, and committing that as a single blob called &quot;update auth&quot; destroys the readability of your history. &lt;a href=&quot;https://help.gitkraken.com/gitkraken-desktop/gkd-gitkraken-ai/&quot;&gt;Commit Composer&lt;/a&gt; restructures that machine output into clean, logical commits before it reaches a teammate. You are giving human shape to machine work, which is most of what the human is for now.&lt;/p&gt;
&lt;p&gt;And when a branch does &lt;a href=&quot;/git-merge-conflicts-for-beginners-what-to-do-when-your-branches-have-beef/&quot;&gt;collide with main&lt;/a&gt;, Auto-resolve with AI proposes a context-aware resolution and explains its reasoning, so you accept it, adjust it, or take over. It clears the rote line-by-line analysis; you keep the final call. It will not untangle a semantic conflict, where one agent&apos;s logic breaks another&apos;s in ways no merge tool resolves, but it removes the mechanical noise so your attention is free for the part that actually needs a human.&lt;/p&gt;
&lt;p&gt;None of that is a new idea. It is the same premise, the state of the work visible on one surface, meeting a moment when the work turned parallel and fast and hard to hold in your head.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Commit Composer and Auto-resolve with AI are part of &lt;a href=&quot;https://www.gitkraken.com/features/git-ai&quot;&gt;GitKraken AI&lt;/a&gt;, which requires a paid GitKraken plan; both are currently in preview.)&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;The argument was never about taste&lt;/h2&gt;
&lt;p&gt;Underneath the posturing about who counts as a real engineer, the whole fight was about one thing: which shape of work your tools are built to serve. When the work was one human doing one thing at a time, the linear interface was ideal and the visual layer optional. Now that it is many machines doing many things at once, a linear interface cannot represent it, and the surface that shows everything at once stops being a convenience and becomes the only way to stay in control.&lt;/p&gt;
&lt;p&gt;The terminal keeps the ground it always ruled: pointed, deterministic, one-shot commands. It will be on every serious machine for the rest of our careers. It did not lose; it has a boundary, and the boundary is where linear work ends.&lt;/p&gt;
&lt;p&gt;The crutch argument was never really about tools but about work: the belief that serious work is sequential and solitary and lives at a prompt. That belief held for as long as the work did. It stopped holding the day the machines started writing in parallel. Betting on a full view of everything at once looked like overkill for years. It turned out to describe exactly how we work now.&lt;/p&gt;
&lt;p&gt;The terminal was never the point. Seeing the work was. It just took the machines writing the code for everyone to notice.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>AI</category><category>AI Agents</category><category>Git</category><category>Version Control</category><category>DevOps</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>The Runbook You Didn&apos;t Write Is Already Running in Production</title><link>https://devops.pink/the-runbook-you-didnt-write-vendor-ai-agent-skills/</link><guid isPermaLink="true">https://devops.pink/the-runbook-you-didnt-write-vendor-ai-agent-skills/</guid><description>Your vendor&apos;s opinion of how to run their product now ships as an executable AI agent skill. Six places it breaks in production, and six questions to ask first.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Your vendors now ship opinions about how their products should be operated. The opinions are executable, and almost nobody is reading them.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Somewhere in your stack, a procedure now runs against production that nobody on your team wrote, reviewed, or can see. It came from a vendor, packaged as a skill for an AI agent, and it encodes their view of how their product should be operated: which signals to check, what counts as broken, what to do about it. It arrived with an install command. It did not arrive with a pull request.&lt;/p&gt;
&lt;p&gt;You can watch this happening in the open. Open Anthropic&apos;s plugin directory and scroll. Not the community catalog. The official one, the list Anthropic curates itself. More than 250 entries at the time of writing.&lt;/p&gt;
&lt;p&gt;AWS is there, with roughly a dozen plugins, most of them authored by Amazon Web Services directly. Azure is there. GitLab, covering repositories, merge requests and CI/CD pipelines. HashiCorp&apos;s Terraform. Oracle. Vercel, managing deployments, builds, logs and domains. Netlify, covering functions, edge functions, blobs, database and image CDN. Render ships skills, an agent, slash commands and a validation hook for &lt;code&gt;render.yaml&lt;/code&gt;. Railway covers project setup, deploys, networking, monitoring — and troubleshooting. PagerDuty scores your pre-commit diffs against historical incident data. SonarQube enforces itself inside the agent coding loop.&lt;/p&gt;
&lt;p&gt;Pulumi is not in that catalog, and the absence turns out to be more interesting than the presence would have been. Pulumi ships its skills anyway: through its own plugin marketplace, and through a cross-platform CLI that follows the open Agent Skills specification, reaching Claude Code, Cursor, Copilot, VS Code, Codex and Gemini CLI. We will come back to Pulumi, because Pulumi is where the shape of this gets clearest.&lt;/p&gt;
&lt;p&gt;Let me be precise about what is new here, because &quot;AI does ops now&quot; is not a new headline, and until recently it mostly meant autocomplete for YAML: a faster way to write the config a human still reviewed. That is not this.&lt;/p&gt;
&lt;p&gt;This piece is an analysis of what a dozen vendors shipped in the space of a few months, and of what none of them addressed. Every technical claim below comes from a vendor&apos;s own documentation, their own published writing, or the public record. The argument does not need me to be right about anything. It needs them to have been quiet about the same six questions. They were.&lt;/p&gt;
&lt;h2&gt;What changed, in plain terms&lt;/h2&gt;
&lt;p&gt;Here is how it used to work.&lt;/p&gt;
&lt;p&gt;A company bought a tool: a database, a cloud service, a CI system. The engineers read the vendor&apos;s documentation. Then they wrote their own runbook, the procedure for what to check, in what order, when that tool misbehaved. That runbook lived in the repository. A colleague reviewed it. It was version-controlled, argued over, and owned by the team.&lt;/p&gt;
&lt;p&gt;Here is how it works now.&lt;/p&gt;
&lt;p&gt;The vendors (AWS, GitLab, Vercel, Pulumi and the rest) ship ready-made plugins and &quot;skills&quot; for AI agents like Claude or Copilot. You describe the problem in a chat. The agent reads it, decides how to diagnose it, and applies the fix to the running system, following logic the vendor wrote, not you.&lt;/p&gt;
&lt;p&gt;The runbook used to be something you wrote. Now it arrives from the vendor, pre-written, and it executes. That is the whole shift, and everything below follows from it.&lt;/p&gt;
&lt;h2&gt;Access is not the same as a procedure&lt;/h2&gt;
&lt;p&gt;This distinction matters more than anything else in the piece, so let me borrow the clearest statement of it I have found. It comes, tellingly, from a vendor&apos;s own blog rather than from a critic.&lt;/p&gt;
&lt;p&gt;A post on Pulumi&apos;s blog draws the line: MCP servers give Claude access to things; skills teach Claude how to think about things. Different jobs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An MCP server is a door.&lt;/strong&gt; It says: here are my endpoints, here is what you may call. Your team still decides what to do with them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A skill is a procedure.&lt;/strong&gt; It says: here is how you diagnose me, in this order, checking these signals, escalating at this threshold.&lt;/p&gt;
&lt;p&gt;The same Pulumi post is explicit about why they ship them: generic AI assistance produces code that looks reasonable but breaks the conventions the community learned the hard way, so the skills teach Claude those conventions.&lt;/p&gt;
&lt;p&gt;Read that twice, with an operator&apos;s ear. The vendor is not shipping you tools. They are shipping you their opinion, in a form that runs. They said so themselves, in their own marketing, as a feature. And they are right that it is a feature.&lt;/p&gt;
&lt;h2&gt;What this replaces&lt;/h2&gt;
&lt;p&gt;Think about what the old runbook actually was.&lt;/p&gt;
&lt;p&gt;You worked out what mattered in your environment, which is never quite what mattered in theirs. You wrote it down. It went through code review. When it was wrong in the middle of the night, you fixed it, and the fix was yours.&lt;/p&gt;
&lt;p&gt;That runbook was an artifact of your team&apos;s understanding. It was, in a real sense, the thing your platform team was.&lt;/p&gt;
&lt;p&gt;Now consider a vendor-shipped skill called something like &lt;code&gt;/troubleshoot&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;It encodes a definition of what troubleshooting that product means. Which signals to check. In which order. What counts as normal. What counts as a problem worth escalating. Someone decided all of that.&lt;/p&gt;
&lt;p&gt;Not you.&lt;/p&gt;
&lt;p&gt;And vendors deciding is not the new part. Vendors have always had opinions, and they published them as docs, where a senior engineer read the advice and discarded the two-thirds that did not apply to their environment. That adaptation step has been removed from the loop. The opinion is no longer a document you read. It is a procedure that runs.&lt;/p&gt;
&lt;h2&gt;The honest case for it&lt;/h2&gt;
&lt;p&gt;I am not going to write the skeptic&apos;s column. The skeptic&apos;s column is easy and mostly wrong, and if I skip this section the rest of the piece is worthless.&lt;/p&gt;
&lt;p&gt;The vendor&apos;s runbook is better than yours. At least on day one. They know their own failure modes. They know which metric actually predicts trouble and which three are decorative. Your first runbook is a guess assembled from their docs and a Stack Overflow thread. Theirs is the accumulated support load of every customer who ever paged them.&lt;/p&gt;
&lt;p&gt;Onboarding collapses. The gap between &quot;we bought this&quot; and &quot;we can operate this in the middle of the night&quot; has historically been measured in weeks of a senior engineer&apos;s time.&lt;/p&gt;
&lt;p&gt;It travels. The failure mode this fixes is the one the ecosystem calls tribal knowledge. One engineer works out the smart diagnostic sequence, and it lives in their head and a Slack thread of partial screenshots. New hires inherit an empty config directory. A packaged skill set is that knowledge, versioned and installable.&lt;/p&gt;
&lt;p&gt;It is simply a better interface. Natural language is not magic; remembering which of forty subcommands and which flag combination was never a good use of human memory.&lt;/p&gt;
&lt;p&gt;All of that is real. Which is exactly why the next part matters.&lt;/p&gt;
&lt;h2&gt;Where it breaks&lt;/h2&gt;
&lt;p&gt;Six places. None has a clean answer yet, and I have not seen a vendor address any of them in a launch post.&lt;/p&gt;
&lt;h3&gt;1. The agent fixes production, and GitOps deletes the fix&lt;/h3&gt;
&lt;p&gt;Start with the one that is mechanical rather than philosophical, because it is the one that bites first.&lt;/p&gt;
&lt;p&gt;If your platform runs on GitOps (and for a large share of teams now, it does), the repository is the source of truth. Not the cluster. The cluster is a projection of the repository, reconciled continuously.&lt;/p&gt;
&lt;p&gt;Now put an agent in that picture. At night, a vendor&apos;s &lt;code&gt;/troubleshoot&lt;/code&gt; skill works out what is wrong and edits live state to fix it: the replica count, the image tag, the config of a resource Git declares. Not a restart the deployment would undo on its own; a change to something the repository has an opinion about.&lt;/p&gt;
&lt;p&gt;Self-heal is not on by default; changes made to the live cluster do not trigger a sync unless you opt in. But with &lt;code&gt;selfHeal: true&lt;/code&gt;, drift between Git and the cluster is simply corrected. The controller does not know or care that a model made the change with good intentions. It sees exactly what it sees when a panicking engineer runs &lt;code&gt;kubectl&lt;/code&gt; against prod: live state that disagrees with declared state.&lt;/p&gt;
&lt;p&gt;So the agent fixes production, and the platform reverts the fix, because the fix was never in Git. How quickly depends on your configuration. That it happens does not. This is a failure mode you assemble rather than a default: it needs &lt;code&gt;selfHeal: true&lt;/code&gt;, an agent with write access, and the freedom to act unsupervised. Three switches you turn on yourself. The point is that nothing in the tooling pushes back when you line them up, and plenty of teams will.&lt;/p&gt;
&lt;p&gt;There is a sharper edge too, straight from &lt;a href=&quot;https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/&quot;&gt;Argo CD&apos;s own documentation&lt;/a&gt;: rollback cannot be performed against an application with automated sync enabled. The escape hatch is not sealed (you disable auto-sync, roll back, re-enable), but it now has an extra step, and you are taking it under time pressure, in the middle of the night, on a system you did not just watch change.&lt;/p&gt;
&lt;p&gt;But the revert is not the worst part. The agent&apos;s fix is not just undone. It is unrecorded. It never became a commit. No diff, no review, no history. The one artifact the whole organization trusts has no idea any of it happened. Your source of truth is now, precisely, not the truth.&lt;/p&gt;
&lt;h3&gt;2. The catalog disagrees with itself&lt;/h3&gt;
&lt;p&gt;The same tension is visible one level up, in who ships what.&lt;/p&gt;
&lt;p&gt;This is the contradiction Pulumi embodies most cleanly. Its whole thesis is that infrastructure is code: versioned, reviewed, living in a repository. And it now ships agent skills that operate that same infrastructure conversationally, distributed to six platforms as something it plainly considers core, not a side integration.&lt;/p&gt;
&lt;p&gt;But the problem is not Pulumi&apos;s alone. Everyone owns it, and the cleanest evidence sits in the catalog I opened at the top of this piece.&lt;/p&gt;
&lt;p&gt;Two entries, a few lines apart in the same file. &lt;code&gt;aws-core&lt;/code&gt;, author field Amazon Web Services, offers skills to author infrastructure as code. &lt;code&gt;aws-agents-for-devsecops&lt;/code&gt;, author field Amazon Web Services, investigates incidents and runs penetration tests.&lt;/p&gt;
&lt;p&gt;One of those exists because the repository should decide. The other exists because, in the middle of an incident, something faster than a human should. I have not found a page on either that mentions the other.&lt;/p&gt;
&lt;p&gt;To be fair to AWS: their DevOps Agent investigates and recommends, and a human still applies the remediation. That is the responsible design, and most vendor agents today are read-heavy for exactly this reason. The mutation risk does not live in the vendor&apos;s own incident agent. It lives one layer over, in a coding agent that has your &lt;code&gt;kubectl&lt;/code&gt; credentials and a vendor&apos;s skill telling it what &quot;fix this&quot; means. And it lives in the trajectory, because every one of these products is moving in the same direction, and none of the vendors shipping the procedures is moving toward asking permission more often.&lt;/p&gt;
&lt;p&gt;And one vendor stayed out. Terraform, now &lt;a href=&quot;/ai-agent-needs-a-ceiling-not-a-better-prompt/&quot;&gt;an IBM product&lt;/a&gt;, taught a generation that the repository is the source of truth, and its catalog entry is an MCP server: a door, not a procedure. The one whose identity was built on &quot;the repository decides&quot; is the one that shipped no runbook. Read it as caution or as lag; either way it is the exception worth watching.&lt;/p&gt;
&lt;p&gt;The pattern is uniform. The same vendors selling &quot;the repository decides&quot; are selling &quot;the model decides, live.&quot; The controller is not broken; Argo CD reverting an out-of-band change is doing its job. That is the point. Both product lines work exactly as designed, and the designs disagree about who may change production. Nobody has reconciled them, and most teams will find out during an incident rather than a design review.&lt;/p&gt;
&lt;h3&gt;3. The audit log records the action, not the intent&lt;/h3&gt;
&lt;p&gt;Consider what the log looks like when a deploy was initiated by a model responding to the sentence &quot;the staging cluster looks unhappy, sort it out.&quot;&lt;/p&gt;
&lt;p&gt;The line reads: deployment updated, timestamp, actor. It is accurate. It is also nearly useless in a postmortem, because the thing you need to reconstruct is not what happened but why the system believed that was the right thing to do. The reasoning is not in the log. In most setups it is not anywhere. It evaporated with the session.&lt;/p&gt;
&lt;p&gt;The better incident agents do capture this. AWS&apos;s DevOps Agent, for one, keeps an investigation journal with its reasoning. But that discipline lives in the specialized agents, not in the coding agent holding your &lt;code&gt;kubectl&lt;/code&gt; credentials, and it is the coding agent that mutates state. We spent fifteen years building the discipline that every production change should be traceable to a reviewed, intentional decision. The audit trail was the enforcement mechanism. It still records changes perfectly. In the path that matters most, it has quietly stopped recording decisions.&lt;/p&gt;
&lt;h3&gt;4. You are running someone else&apos;s runbook without reviewing the diff&lt;/h3&gt;
&lt;p&gt;This is the one that should worry you most, and it is structural rather than hypothetical.&lt;/p&gt;
&lt;p&gt;Your runbook went through code review. That was the entire point: a second engineer read it before it could page anyone.&lt;/p&gt;
&lt;p&gt;The vendor&apos;s skills ship with the plugin. When the plugin updates, the procedures update. Ask yourself honestly: are you reviewing that diff? Is anyone on your team reading the changelog for the diagnostic logic that will run against your production system?&lt;/p&gt;
&lt;p&gt;The mechanics are not subtle. If your plugin reference tracks a branch or a moving commit, upstream changes arrive in your engineers&apos; sessions unannounced. That is not a criticism of anyone&apos;s design; it is how git works. But it means the vendor&apos;s operational logic is an unversioned dependency sitting in your production path, and the update lands without a pull request.&lt;/p&gt;
&lt;p&gt;There is a second problem underneath, and it is worse. A skill is a markdown file that the agent reads as instruction, not as data. Whatever is in it enters the model&apos;s context with the authority of a procedure. If that file is ever modified (upstream, in a dependency, by anyone with commit access to a repository you do not watch), the modification is not a config change you can diff in review. It is an instruction the agent will follow. The security literature has been shouting about prompt injection through tool descriptions and skill content for years. The industry response has been to ship more skills.&lt;/p&gt;
&lt;p&gt;The same literature has a name for the passive version of this risk: a rugpull, where a component that behaved one way when you vetted it behaves differently later. And it points at the mental-model problem underneath. Users experience this as connecting their agent to a service, when what they are actually doing is running someone else&apos;s code with their own credentials.&lt;/p&gt;
&lt;p&gt;Anthropic clearly sees this. Their plugin system will not let a plugin-shipped agent bring its own hooks, MCP servers or permission mode, documented as a deliberate security decision. Plugins can ship disabled by default, specifically for cases that add scope a user should consciously opt into. Their marketplace pins approved plugins to specific commits rather than tracking a branch.&lt;/p&gt;
&lt;p&gt;Those are good primitives. But they are primitives on the client side. They say nothing about whether your organization reviews your vendor&apos;s operational logic before it runs. Right now almost nobody does, because the review step never existed. There was never a vendor runbook to review.&lt;/p&gt;
&lt;h3&gt;5. Responsibility has no owner&lt;/h3&gt;
&lt;p&gt;An agent deployed the wrong thing in the middle of the night.&lt;/p&gt;
&lt;p&gt;You typed a sentence. A model interpreted it. A vendor wrote the skill the model invoked. A second vendor&apos;s platform executed it.&lt;/p&gt;
&lt;p&gt;Where does the postmortem land? That question is not philosophy. The incident review will ask it first, and there is currently no convention for answering it. &quot;The agent did it&quot; is not an answer any organization accepts twice.&lt;/p&gt;
&lt;p&gt;The uncomfortable version: the engineer who typed the sentence will absorb it, because they are the only human in the chain. That is not a stable arrangement. It is how you lose senior people.&lt;/p&gt;
&lt;h3&gt;6. If the runbook self-executes, what is the on-call rotation for?&lt;/h3&gt;
&lt;p&gt;If a vendor&apos;s skill investigates on its own, do you still need someone awake?&lt;/p&gt;
&lt;p&gt;Most teams will answer yes, of course, and then let the rotation atrophy, because the pager fires less often and the incentive to staff it decays.&lt;/p&gt;
&lt;p&gt;The failure case is subtler than the agent missing something. The agent handles the routine 90% competently, the humans lose their calibration on the system because they have not touched it in four months, and then the 10% arrives, and the person who picks up the page has never operated the thing unassisted.&lt;/p&gt;
&lt;p&gt;We have seen this film, and it is worth being precise about the ending, because the ending is not reassuring.&lt;/p&gt;
&lt;p&gt;This is an old problem wearing new clothes, and it is worth saying so plainly rather than presenting it as a discovery. In 1983, the cognitive psychologist Lisanne Bainbridge named it the irony of automation: automate most of a process but not all of it, and you have not removed the operator. You have handed them a job they can no longer do, because the skills to take over are exactly the ones the automation stopped them practicing.&lt;/p&gt;
&lt;p&gt;Aviation has spent the decades since failing to solve it, with far more pressure than we have. An FAA human factors report picked it up in 1996. In 2009, Air France 447 fell into the Atlantic after the autopilot handed control back to a crew short on hand-flying practice. Forty years, a regulator, mandatory training regimes, an industry where this failure mode kills people in visible numbers. Still unresolved. It is common enough by now to have its own review literature under titles like Ironies of Automation: Still Unresolved After All These Years.&lt;/p&gt;
&lt;p&gt;I raise this as calibration, not warning. If you are assuming platform engineering will work this out in a couple of release cycles, look at what it took aviation to not work it out. We have no regulator, no mandatory training, no shared incident database, and our failure mode costs a quarter&apos;s revenue rather than 228 lives, which means less pressure to solve it, not more.&lt;/p&gt;
&lt;h2&gt;What to ask before you turn it on&lt;/h2&gt;
&lt;p&gt;The advice circulating right now is uniform and correct as far as it goes: start read-only, scope write access carefully, use dedicated service accounts rather than your own credentials, never hand an agent write access to a production database. Take that advice. I have written about the enforcement half of it before: &lt;a href=&quot;/ai-agent-needs-a-ceiling-not-a-better-prompt/&quot;&gt;the ceiling&lt;/a&gt; that makes an agent physically unable to cross a line, and &lt;a href=&quot;/how-to-secure-ai-agents-production-framework/&quot;&gt;the six-phase framework&lt;/a&gt; for taking agents to production at all.&lt;/p&gt;
&lt;p&gt;But that advice addresses the access problem, and access is not the interesting problem here. Here is what I would ask a vendor before enabling their skills against anything that matters.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What is your update policy for these skills?&lt;/strong&gt; Do they follow the plugin version, or can I pin them independently? If I cannot pin them, your operational logic is an unversioned dependency in my production path.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Do procedure changes appear in your release notes?&lt;/strong&gt; The files are readable; they are markdown in a repository. The question is whether you treat a change to diagnostic logic as a documented release or as a silent commit. If your changelog does not mention skills, that is my answer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What does the audit record capture when the actor is a model?&lt;/strong&gt; Specifically: does it capture the prompt, the tool sequence and the reasoning, or just the resulting state change?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Which of these commands mutate?&lt;/strong&gt; Not &quot;which are dangerous&quot;. Which write. Give me the list, and give me a way to disable the mutating half without disabling the diagnostics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Can the agent roll back its own mutations?&lt;/strong&gt; And the harder half: does it know when it should? A rollback is a judgment, not a capability; something has to decide the intervention made things worse. If the answer is that a human steps in, be clear about what you are asking of that human. They are arriving at an undocumented state that a model produced and did not explain, under time pressure, at whatever hour this happens.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;What is your position when your skill causes an outage?&lt;/strong&gt; Not for the lawyers. I want to know whether you have thought about it at all.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If a vendor has good answers to all six, they have thought about this harder than most. I have not yet found one who has published answers to any. Not in a launch post, not in the docs. The conversation is happening elsewhere: lawyers are writing about the liability gap, insurers are excluding agent-related losses, regulators are naming autonomy and auditability as risks. The people shipping the procedures are not part of it yet.&lt;/p&gt;
&lt;p&gt;The runbook used to be the artifact of a team&apos;s understanding. It was slow to write, and it was ours.&lt;/p&gt;
&lt;p&gt;The new one arrives working, on day one, better than the one we would have written. That is a real gift, and I am not being sarcastic.&lt;/p&gt;
&lt;p&gt;But we should be clear about the trade. We are accepting a vendor&apos;s opinion about how their product should be operated, and we are accepting it in a form we do not read.&lt;/p&gt;
&lt;p&gt;That is not automatically wrong. Every dependency is a decision to trust someone else&apos;s judgment, and we make that decision a hundred times a day without agonizing. The difference is that code dependencies come with twenty years of convention: lockfiles, review, CVE feeds, SBOMs.&lt;/p&gt;
&lt;p&gt;For operational dependencies, we have a marketplace listing and an install command.&lt;/p&gt;
&lt;p&gt;Go read the skills your vendors shipped you this quarter. They are all markdown. It is a short read, and it is your production.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>AI</category><category>AI Agents</category><category>Security</category><category>GitOps</category><category>Platform Engineering</category><category>DevOps</category><category>MCP</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>The Industry Is Hiring DevRel for Yesterday</title><link>https://devops.pink/devrel-hiring-for-yesterday/</link><guid isPermaLink="true">https://devops.pink/devrel-hiring-for-yesterday/</guid><description>Developer Relations builds the AI future, then hires its advocates with 2012 HR scripts. Eight symptoms of DevRel hiring broken by fear, and the fix.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;We&apos;re building the future and hiring for the past. A field diagnosis of DevRel recruitment: eight symptoms, and the one fear underneath all of them.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Developer Relations is a young discipline with very old diseases. Right now the tech industry is building the infrastructure of the future: we&apos;re deploying Model Context Protocol (MCP) servers, wiring in &lt;a href=&quot;/ai-agent-needs-a-ceiling-not-a-better-prompt/&quot;&gt;autonomous AI agents&lt;/a&gt;, teaching models to hold complex context. And then, when it&apos;s time to hire the people who represent that work to the world, the process snaps back to 2012-era B2B marketing and HR screening from the age of the fax machine.&lt;/p&gt;
&lt;p&gt;We build autonomous systems, and then we make human advocates recite metrics from a script like first-generation chatbots.&lt;/p&gt;
&lt;p&gt;This is more than a broken hiring funnel. It&apos;s a diagnosis of an industry losing its best people, because senior professionals form their verdict on an employer inside the first five minutes of a call.&lt;/p&gt;
&lt;p&gt;Start with the word itself. &quot;DevRel&quot; and &quot;Developer Advocate&quot; mean something different at every company: evangelist at one, developer-experience engineer at the next, disguised support at a third, all under the same title. The label carries no information. A candidate applies half-blind and only learns what the job actually is somewhere in the interview loop. So this piece has to do what the postings don&apos;t: name its slice. Developer Relations is a wide umbrella (community, developer experience, documentation, advocacy), and what follows is about the advocacy end of it: the outward-facing role whose job is reach, and whose value is the hardest thing on that list to hire for. Below are the main symptoms, some absurd, some expensive, and at the end, the single disease they all trace back to.&lt;/p&gt;
&lt;h2&gt;Symptom 1. The dead tutorial, and the fear of storytelling&lt;/h2&gt;
&lt;p&gt;Imagine ordering the most authentic, spiciest dish on the menu, then asking the chef to leave out every spice, just to be safe, so nobody gets alarmed.&lt;/p&gt;
&lt;p&gt;That&apos;s how the corporate system treats a distinctive authorial voice. The company wants the market&apos;s attention but is afraid of the unconventional approach that actually earns it. And meanwhile it&apos;s still hiring people to write &quot;technical articles&quot; and record the hour-long live-configuration screencast: a camera on someone&apos;s terminal while they set something up in real time. That format is dead. Nobody finishes an hour of watching another person configure a tool; they open the docs, or they ask a model. And the traditional tutorial died with it: AI agents write code and documentation faster than any senior engineer, and they don&apos;t get tired doing it. The live, bare-handed demonstration is just as dated. In the age of AI-assisted work, watching someone perform a task raw, under a stopwatch, measures a skill nobody uses raw anymore.&lt;/p&gt;
&lt;p&gt;To cut through the banner-blindness of exhausted developers, you don&apos;t need instructions. You need high-signal narrative, with real craft in how it&apos;s told. Engineers stop for aesthetics, intrigue, a distinct voice, a bold visual choice, the things a machine still can&apos;t generate. A strong DevRel today isn&apos;t a programmer with a microphone. They&apos;re the bridge between complex engineering and human attention.&lt;/p&gt;
&lt;h2&gt;Symptom 2. Title arbitrage: support in disguise&lt;/h2&gt;
&lt;p&gt;You open a &quot;Senior Developer Advocate&quot; posting. Beautiful copy: evangelism, the voice of the developer. Then the interview reveals the actual job: you&apos;ll be jumping on calls with customers whose setup is broken, showing them where to click.&lt;/p&gt;
&lt;p&gt;That role has an honest title: Technical Support Engineer, Solutions Architect, or Customer Success Manager. The difference is fundamental. Support is reactive. It works with people who already bought and hit a wall, and it scales through hours worked. DevRel is proactive. It works with people who don&apos;t yet know you exist, and it scales through narrative and trust. Sometimes the swap is subtler than a ticket queue: they want the charisma, someone warm and articulate enough that customers who already signed don&apos;t drift away. But charm aimed at keeping existing accounts from churning is Customer Success, not Developer Relations. It&apos;s the same inversion: the function built to win people who&apos;ve never heard of you, pointed backward at the people you already have. Put &quot;DevRel&quot; on the label and fill the box with a ticket queue, and the function that was supposed to win you the market stays a gaping hole.&lt;/p&gt;
&lt;h2&gt;Symptom 3. Cross-ecosystem influence vs. the corporate silo&lt;/h2&gt;
&lt;p&gt;Picture a symphony conductor hired by a committee of an accountant, a facilities manager, and a security guard. Everyone asks questions from their own domain. Every question is reasonable on its own terms. None of them have anything to do with music.&lt;/p&gt;
&lt;p&gt;That&apos;s what happens when DevRel candidates are screened by managers who think entirely inside their own product&apos;s sales funnel. A marketer measures the world in MQLs. A sales leader looks for lead gen. Each asks the only question they know how to ask.&lt;/p&gt;
&lt;p&gt;But the value of a strong DevRel professional is built at the intersection of ecosystems: open-source foundations, enterprise platforms, independent communities that don&apos;t share a Slack or a cap table. The work is translation: turning engineering language into business value, and carrying trust from one community into another. That&apos;s the asset. And it&apos;s exactly the asset a funnel-shaped interview can&apos;t see, because it doesn&apos;t fit the funnel. So the conversation drifts to whether the candidate can optimize a sign-up button on a landing page, and the real capability goes unmeasured.&lt;/p&gt;
&lt;h2&gt;Symptom 4. Catechism instead of strategy&lt;/h2&gt;
&lt;p&gt;A driver who just won the championship sits down across from you, and you pass on him, because he couldn&apos;t sketch a carburetor diagram from memory. He has the results. He just didn&apos;t pass your theory test.&lt;/p&gt;
&lt;p&gt;The same scene plays out in DevRel hiring. A candidate with years of accumulated social capital sits down, and the first real question is: &quot;Name five metrics of DevRel success for our CEO.&quot; It&apos;s 2026. Any language model will produce an academically flawless list in three seconds: time-to-first-hello-world, API sign-ups, activation rate, NPS. &quot;Name five metrics&quot; tests exactly one skill: the ability to quote a textbook. A skill that AI has commoditized completely and for free.&lt;/p&gt;
&lt;p&gt;To be fair, companies don&apos;t ask this out of malice. They&apos;re tired of &quot;star evangelists&quot; who burn through travel budgets without moving the product a millimeter. But demanding that someone who carries real social capital recite the manual on how to measure it is screening out practitioners in favor of theorists.&lt;/p&gt;
&lt;h2&gt;Symptom 5. Spec work: the unpaid audition&lt;/h2&gt;
&lt;p&gt;At some point comes the request that sounds reasonable and isn&apos;t: &quot;Put together a short video on our product, so we can see your approach.&quot; For a candidate with no public work, a junior or a career-switcher, this is fair; there&apos;s nothing to evaluate, so you ask for a sample. But the same request lands very differently when it&apos;s aimed at someone whose entire craft is already public: a channel reaching tens of thousands of engineers, a body of published work, metrics anyone can open in a browser. Researching a product, scripting, shooting, and editing a single video is fifteen to thirty hours of specialized production. Asking for that unpaid, as a screening step, from someone whose portfolio is one click away, is spec work by another name: the practice design and writing communities named and rejected a decade ago. DevRel simply hasn&apos;t caught up.&lt;/p&gt;
&lt;p&gt;And it reveals the same disease as the metrics question: the company can&apos;t read a portfolio, so it falls back on a task it knows how to score. Worse, the filter is inverted. The people who agree to produce free spec work are, by definition, the ones with the least leverage and the least proof, the opposite of who the role needs. The strongest candidates decline, and the process quietly screens out exactly the signal it was meant to find.&lt;/p&gt;
&lt;p&gt;The synchronous version is bolder still: &quot;Share your screen and show us how you&apos;d present our product, right now.&quot; Same unpaid work on their product, extracted live and dressed up as a conversation, with &quot;show us how you&apos;d sell it&quot; quietly turning the interview into a request for free marketing.&lt;/p&gt;
&lt;h2&gt;Symptom 6. Startups: a full orchestra for the price of one violinist&lt;/h2&gt;
&lt;p&gt;A thirty-person startup posts a single opening: write the technical articles, edit the video, speak at conferences, run the Discord, support sales with demos. That&apos;s not a role. It&apos;s a full orchestra hired for the price of one violinist.&lt;/p&gt;
&lt;p&gt;It&apos;s the headcount of a five-person department, offered to one person. And the startup, whose product no one has heard of yet, runs the interview from a posture of &quot;prove you&apos;re worthy of us.&quot; A healthy business understands the math: at that stage, a strong DevRel who already holds the keys to established ecosystems brings more reputational capital to the company than the company brings to them. That conversation should happen between equals.&lt;/p&gt;
&lt;h2&gt;Symptom 7. The double bind: hired for reach, rejected for it&lt;/h2&gt;
&lt;p&gt;First they tell you the reach is the whole point: &quot;we need someone with a real audience.&quot; Then, in the same process, that reach is turned against you: &quot;But are you technically deep enough? You&apos;re really a content person, aren&apos;t you?&quot; The exact asset they screened for becomes the reason to pass.&lt;/p&gt;
&lt;p&gt;Underneath sits an engineering-purity test. To be clear: the technical depth is non-negotiable. A DevRel who can&apos;t follow the architecture, judge whether a technical claim holds up, or feel where engineers are really hurting is finished before they start. The question is how you measure that depth. Screening on &quot;years employed as a software engineer&quot; is a proxy, and a poor one: it passes people who shipped production code a decade ago but can&apos;t explain it, and it rejects people with current, demonstrable command of the technology who arrived by another road. The role is translation from end to end, taking complex systems and making engineers care, and translation demands real fluency on both sides. Someone who can make a distributed-systems concept land for tens of thousands of engineers is doing the other half of that work, not a lesser one. But the filter reads &quot;not an SWE&quot; and stops there.&lt;/p&gt;
&lt;h2&gt;Symptom 8. The invisible reporting line&lt;/h2&gt;
&lt;p&gt;Two &quot;Senior Developer Advocate&quot; postings can describe opposite jobs, and the thing that decides which is a single line the posting never shows you: who you report to.&lt;/p&gt;
&lt;p&gt;Report into marketing, and you&apos;ll be measured on MQLs and lead gen you don&apos;t control. Report into sales, and you&apos;re pre-sales with a quota under a friendlier name. Report into product or engineering, and you might actually shape the thing you advocate for, the one line where the role can succeed. The org chart decides the outcome before your first day, and it stays invisible until you&apos;re already inside.&lt;/p&gt;
&lt;p&gt;The same blind spot shows up in the room. It&apos;s common to move through an entire interview loop without meeting a single practicing DevRel, judged start to finish by people who have never done the job. That absence is upstream of everything else here: it&apos;s why the metrics catechism and the funnel questions feel reasonable to the people asking them. They&apos;re using the only rulers they have.&lt;/p&gt;
&lt;h2&gt;The disease beneath the symptoms&lt;/h2&gt;
&lt;p&gt;None of this is simple stupidity. It&apos;s fear.&lt;/p&gt;
&lt;p&gt;Developer Relations spent 2023 through 2025 being cut first and cut deepest. When budgets tighten, the discipline whose contribution is hardest to tie directly to revenue is the easiest line to remove. Nearly every company hiring DevRel today remembers doing exactly that, or watching a competitor do it.&lt;/p&gt;
&lt;p&gt;So they hire from fear. Fear is what turns a reasonable question into a catechism, a portfolio review into unpaid spec work, a senior conversation into &quot;prove you&apos;re worthy of us.&quot; Fear demands guarantees a young discipline can&apos;t yet give, then punishes it for not giving them. The symptoms above aren&apos;t eight separate failures. They&apos;re one anxiety wearing different masks: we had to cut this once, and we&apos;re terrified of being wrong again.&lt;/p&gt;
&lt;p&gt;And fear only ever looks in one direction: backward, at what it might lose. It&apos;s the same reflex that turns a DevRel hire into a retention job: guard the customers you have instead of reaching the ones you don&apos;t. A discipline whose entire purpose is forward motion, staffed by people told to stand still and protect the perimeter.&lt;/p&gt;
&lt;p&gt;The irony is that hiring from fear guarantees the outcome it&apos;s trying to avoid. Screen for safe answers and compliant hires, and you get advocates who produce safe, ignorable work, the exact thing that got the function cut in the first place.&lt;/p&gt;
&lt;h2&gt;What a sane hiring process looks like&lt;/h2&gt;
&lt;p&gt;To hire the people who actually move product growth, rebuild the process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A distribution audit instead of memorized metrics.&lt;/strong&gt; &quot;Show us your work from the last year. How do you build a high-signal story? What worked, what didn&apos;t, and why?&quot; You can&apos;t Google your way through that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A real launch, walked through live.&lt;/strong&gt; &quot;Take us through a launch you ran: how you built the communication, what worked, what didn&apos;t, what you&apos;d change.&quot; That tests strategic thinking, on real decisions with real numbers, without asking for free work on their product.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Community references.&lt;/strong&gt; Standing among architects, maintainers, and ecosystem leaders is the one signal in this profession that can&apos;t be forged.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In an era where any block of code, any paragraph, any list of metrics can be generated in seconds, human trust and attention have become the scarcest resources on the market. Neither can be measured by a question from an HR playbook. The companies that learn to recognize genuine social capital and real storytelling, the kind that lives outside the corporate script, will take the strategic advantage. The rest will keep hiring obedient straight-A students, and keep wondering why nobody notices their brilliant engineering.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>DevRel</category><category>Developer Advocacy</category><category>Hiring</category><category>Career</category><category>AI</category><category>Community</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>How to Secure AI Agents in Production: IBM&apos;s Six-Phase Framework</title><link>https://devops.pink/how-to-secure-ai-agents-production-framework/</link><guid isPermaLink="true">https://devops.pink/how-to-secure-ai-agents-production-framework/</guid><description>Teams secure AI agents like normal software, and production breaks. Here&apos;s IBM and Anthropic&apos;s six-phase framework for securing them, phase by phase.</description><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;The enforcement layer that gives an agent a hard ceiling (Vault, Sentinel, the rest) I &lt;a href=&quot;/ai-agent-needs-a-ceiling-not-a-better-prompt/&quot;&gt;covered already&lt;/a&gt;. This is the other half: the methodology IBM and Anthropic built to wrap around it. I read the whole guide. Here it is, phase by phase.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A prompt is not a security control. It is a wish.&lt;/p&gt;
&lt;p&gt;I keep meeting platform teams losing the same fight. They write careful system prompts. They add a stern &quot;never do X&quot; section. They version their tools. Then one Friday evening an agent reads the rule, agrees with it warmly, and reaches for production anyway. That is what probabilistic systems do under pressure.&lt;/p&gt;
&lt;p&gt;This is not a prompt-engineering problem. It is a category mistake. We are shipping a new kind of software, one that behaves a little differently every time it runs, on a playbook written for software that behaves the same way every time. So it breaks. The strange part is not that it breaks. It is that we keep acting surprised.&lt;/p&gt;
&lt;p&gt;In October 2025, IBM published a guide called &lt;a href=&quot;https://www.ibm.com/downloads/documents/us-en/1443d5dd174f42e6&quot;&gt;&lt;em&gt;Architecting Secure Enterprise AI Agents with MCP&lt;/em&gt;&lt;/a&gt;, verified by Anthropic. It finally names the gap and gives it a shape: a framework called the &lt;strong&gt;Agent Development Lifecycle&lt;/strong&gt;, six phases that stretch DevSecOps to fit stochastic, tool-using agents. I am an IBM Champion, and I have spent real hours inside this document. It is the clearest answer I have seen to the question every platform lead is now asking out loud: what does &quot;safe&quot; even mean when the thing you are shipping is non-deterministic?&lt;/p&gt;
&lt;p&gt;This is my walkthrough of the six phases. What each one means, where teams fall down, and the one that saves you if you only have budget for one.&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;fGKTfOGute8&quot;
title=&quot;How to Secure AI Agents in Production (IBM × Anthropic Framework)&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;Why the old playbook quietly stops working&lt;/h2&gt;
&lt;p&gt;Start with the assumption sitting under every CI/CD pipeline ever built: if it passed staging, it is safe to ship.&lt;/p&gt;
&lt;p&gt;That holds because normal code is deterministic. Same input, same output, forever. Pass the test once and you have passed it for good. That is why staging means something, why version control means something, why the whole apparatus of scanning and signing and gating does what it claims.&lt;/p&gt;
&lt;p&gt;Now look at what an agent actually is. Same prompt, same data, and the output is &lt;em&gt;probably&lt;/em&gt; close. Not guaranteed. And the agent does not just emit text. It chooses tools, in some order, and the order changes what it does next. Your attack surface is no longer the code you wrote. It is the full space of decisions the model might make at runtime with the tools you handed it.&lt;/p&gt;
&lt;p&gt;That is a different kind of system, and it fails in ways your pipeline was never built to catch: behavioral drift, prompt injection, tool misuse, autonomy that runs longer than anyone meant it to. Your pipeline misses all of it, because nobody ever asked it to look.&lt;/p&gt;
&lt;p&gt;So the useful question is not &quot;how do I write a better prompt.&quot; It is this: what do I build around the agent so that it physically cannot do the wrong thing for long? That is what the Agent Development Lifecycle answers.&lt;/p&gt;
&lt;h2&gt;The reframe that makes the rest click&lt;/h2&gt;
&lt;p&gt;Before the phases, one idea, because it reorders everything after it.&lt;/p&gt;
&lt;p&gt;An agent is not an app you ship and forget. It is a system you watch, bound, and keep honest. Security stops being the last gate before release and becomes a thread running through the whole life of the agent, from the day you sketch what it should do to the day you switch it off.&lt;/p&gt;
&lt;p&gt;That is uncomfortable for engineering culture, because we are trained to treat &quot;shipped&quot; as the finish line. With agents there is no finish line. The thing keeps deciding in production, and those decisions can drift for reasons that have nothing to do with your code: a model updated upstream, a tool added to its catalog, a slow change in how users phrase things. The agent that passed every test in March is not the same agent in September. Same weights, different behavior, because the world around it moved.&lt;/p&gt;
&lt;p&gt;So: six phases. Not a checklist you finish once, but a loop you keep running.&lt;/p&gt;
&lt;h2&gt;Phase 1: Plan&lt;/h2&gt;
&lt;p&gt;Most teams lose here, before a line of code exists.&lt;/p&gt;
&lt;p&gt;Two questions get settled in Plan, and both are awkward enough that people skip them and promise to sort it out later.&lt;/p&gt;
&lt;p&gt;First: how will you know the agent is doing the right thing? Not &quot;does it run.&quot; How do you &lt;em&gt;measure&lt;/em&gt; rightness. IBM&apos;s guide calls this evaluation-first, and it is the agent-world version of test-driven development. You design the evaluation before you build the agent, because if you build first and evaluate after, you end up grading your own homework, generously. The evaluation has to be a separate artifact, written down, with criteria you could defend to a skeptic.&lt;/p&gt;
&lt;p&gt;Second: how much freedom does the agent get? This is acceptable agency, the line between what the agent may decide alone and where a human has to sign. Most teams wave at it with &quot;we&apos;ll keep a human in the loop&quot; and never say which decisions actually cross the line. Write it down, and be specific. &lt;em&gt;The agent may draft and send mail to internal addresses on its own. It may not contact an external address without a human approving it.&lt;/em&gt; That specific.&lt;/p&gt;
&lt;p&gt;Skip Plan and every later phase is improvisation.&lt;/p&gt;
&lt;h2&gt;Phase 2: Code &amp;amp; Build&lt;/h2&gt;
&lt;p&gt;Short phase, one non-negotiable rule: a prompt change is a deploy.&lt;/p&gt;
&lt;p&gt;Most teams version their code like scripture and treat the prompt that steers the agent as a note in a Notion page. That is backwards. The prompt is the agent&apos;s program. The tool definitions are part of that program. Edit either and you have shipped a new version of the system, whether CI ran or not.&lt;/p&gt;
&lt;p&gt;So version prompts and tool definitions the way you version code. Diff them. Review them. Roll them back when they regress. Obvious on paper. Almost nobody does it on day one.&lt;/p&gt;
&lt;h2&gt;Phase 3: Test &amp;amp; Release&lt;/h2&gt;
&lt;p&gt;If you do only two phases well, do Plan and this one. Test &amp;amp; Release is the phase most teams skip, and the one that saves them.&lt;/p&gt;
&lt;p&gt;It gets skipped because it is expensive and it does not look like testing. Traditional QA asks whether the code does what you wrote. Agent testing asks how the agent &lt;em&gt;behaves&lt;/em&gt; under pressure, under attack, under inputs nobody planned for. Different muscle, and most orgs have not built it yet.&lt;/p&gt;
&lt;p&gt;Three things have to happen here.&lt;/p&gt;
&lt;p&gt;Red-teaming. You attack the agent on purpose. You feed it the most awkward, adversarial, malformed input you can invent and watch what it does. If it folds now, the lesson was cheap. If it folds in production, the lesson is expensive.&lt;/p&gt;
&lt;p&gt;Model-graded evaluation, the &quot;LLM as a judge&quot; pattern, one model scoring another. It is not flawless. It is far better than nothing, and it scales the way human review never will.&lt;/p&gt;
&lt;p&gt;A human with teeth. Not a rubber stamp. A person with the authority and the context to say no, after which the approved agent lands in a &lt;em&gt;trusted catalog&lt;/em&gt;: the governed list of agents allowed to act in your environment. Not in the catalog, does not run.&lt;/p&gt;
&lt;p&gt;This is where &quot;it passed staging&quot; finally dies, and good. Staging was never going to catch this one.&lt;/p&gt;
&lt;h2&gt;Phase 4: Deploy&lt;/h2&gt;
&lt;p&gt;Phase 4 asks a single question, and asking it honestly is the whole job: what is the blast radius?&lt;/p&gt;
&lt;p&gt;For deterministic software, deploy means the binary is live. For an agent, deploy means this thing is now making decisions in the world. The better mental model is not pushing code. It is putting the agent in a locked room first, and opening the door only once you have checked what it can reach from inside.&lt;/p&gt;
&lt;p&gt;This is where the framework extends DevSecOps instead of replacing it. Your container scanning, your image signing, your policy-as-code gates all stay. You add one class of check on top: the blast-radius check. If this agent goes rogue tomorrow, what is the worst it can do? You press Deploy only when the honest answer is &quot;break itself, and nothing else.&quot; If the answer is anything larger than itself, you are not ready. Narrow the permissions, isolate the resources, shorten the credentials, then ask again.&lt;/p&gt;
&lt;h2&gt;Phase 5: Operate&lt;/h2&gt;
&lt;p&gt;This is the heart of the framework, and the phase with the most architecture in it.&lt;/p&gt;
&lt;p&gt;In Operate, everything the agent does goes through one door: a secure MCP Gateway. Not ideally one door. Not mostly one door. One door. There is no other safe way to run an agent in production.&lt;/p&gt;
&lt;p&gt;That door does four jobs, and none is optional. It checks who is asking, because every request carries an identity and there are no anonymous agent calls. It hands out least-access permissions, exactly what the task needs and nothing spare. It enforces your rules, the rate limits and allow-lists and denied paths and time-of-day constraints your governance demands. And it logs all of it, every request and decision and response, which is the only way you reconstruct what happened when something goes wrong.&lt;/p&gt;
&lt;p&gt;While that runs, the agent itself sits boxed in a sandbox: an isolated execution environment with short-lived credentials that expire fast, instead of a password sitting in a &lt;code&gt;.env&lt;/code&gt; file forever. If the agent is compromised, the blast radius is the sandbox. Not your database. Not your cloud account.&lt;/p&gt;
&lt;p&gt;The temptation is to skip the gateway because it adds a little latency and feels like overkill for the proof-of-concept your team is poking at. Do not skip it. The gateway is the line between &quot;an experiment that escaped&quot; and &quot;a system you can defend.&quot;&lt;/p&gt;
&lt;h2&gt;Phase 6: Monitor&lt;/h2&gt;
&lt;p&gt;The shift in Monitor is simple to say and hard to do: you stop checking only whether the agent is up, and start watching how it thinks.&lt;/p&gt;
&lt;p&gt;For a normal service, monitoring is uptime, error rate, latency, a couple of business metrics. For an agent, monitoring means following the reasoning. What chain of thought got it to that decision? Which tools did it call, in what order? Did it get confused, double back, try something it should not have?&lt;/p&gt;
&lt;p&gt;And you watch for drift. An agent that behaved in March can start misbehaving in September with nothing in your code changed: the upstream model got patched, a tool&apos;s response format shifted, the questions users ask moved on. Drift is silent, and it is the thing that gets you if you are only watching error rates. The job here is to catch behavioral change before your users do, and that needs telemetry your current observability stack does not produce by default. Plan to extend it.&lt;/p&gt;
&lt;h2&gt;What I would actually do on Monday&lt;/h2&gt;
&lt;p&gt;If you read this far staring at your own fleet of agents, do not try to stand up all six phases at once. You will finish none of them.&lt;/p&gt;
&lt;p&gt;Pick Plan and Test &amp;amp; Release. Write down what your agent is allowed to decide on its own, then genuinely try to break it before it ships. Those two catch most of the pain. Layer the rest in over the following weeks.&lt;/p&gt;
&lt;p&gt;And stop building your own version of this from scratch. I keep meeting platform teams burning a senior engineer&apos;s whole quarter on a homegrown sandbox, a homegrown policy layer, a homegrown audit log, rebuilding (worse) what the industry has now assembled properly. That is unbillable R&amp;amp;D inside a company whose actual job is retail, or fintech, or streaming. The framework exists. The primitives exist. IBM&apos;s guide is free to read. Use them, and put your senior people back on the product.&lt;/p&gt;
&lt;h2&gt;One last reframe&lt;/h2&gt;
&lt;p&gt;The line I keep coming back to: an AI agent is not an app. It is a system that keeps deciding, in production, against a moving world, with the tools you gave it. So stop shipping it like an app. Build the loop around it, not just the artifact.&lt;/p&gt;
&lt;p&gt;The teams that win this next phase of the industry will not be the ones with the cleverest agent. They will be the ones who know, precisely, what their agent cannot do, and have the logs to prove it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>AI Agents</category><category>AI Security</category><category>Agentic AI</category><category>MCP</category><category>IBM</category><category>Anthropic</category><category>DevSecOps</category><category>Platform Engineering</category><category>ADLC</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Your AI Agent Doesn&apos;t Need a Better Prompt. It Needs a Ceiling</title><link>https://devops.pink/ai-agent-needs-a-ceiling-not-a-better-prompt/</link><guid isPermaLink="true">https://devops.pink/ai-agent-needs-a-ceiling-not-a-better-prompt/</guid><description>A prompt is not a security control. The Vault to Sentinel to MCP to watsonx Orchestrate stack that gives AI agents a hard ceiling — and why it&apos;s boringly good.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;I stopped writing safety rules into my agents&apos; system prompts. Here&apos;s the stack that replaced them, and why one acquisition just made the whole thing boring, in the best possible way.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every other post about &quot;safe AI agents&quot; lands in the same place. Write better guardrails into your prompt. Be more explicit. Add a &lt;em&gt;never do X&lt;/em&gt; section and a stern tone. I did exactly that for months. The problem shows up the first time an agent reads &quot;do not touch production without confirmation,&quot; agrees enthusiastically, and reaches for it anyway.&lt;/p&gt;
&lt;p&gt;So let me say the thing plainly. A prompt is not a security control. It&apos;s a wish.&lt;/p&gt;
&lt;p&gt;A language model is probabilistic by construction. When you write &quot;never spend more than the budget&quot; or &quot;never open a public port,&quot; you are not setting a hard limit. You are nudging a token predictor and hoping the nudge holds under pressure. It usually does. Until the one time it doesn&apos;t, on a Friday evening, against the &quot;unused&quot; database that turns out to be load-bearing for somebody&apos;s revenue. Autonomy without a hard boundary isn&apos;t innovation. It&apos;s catastrophe at machine speed.&lt;/p&gt;
&lt;p&gt;The interesting question was never &lt;em&gt;how do I make the agent smarter&lt;/em&gt;. It&apos;s &lt;em&gt;what can this agent physically not do, no matter what it decides&lt;/em&gt;. And the honest answer, for the first time, is: quite a lot. Most of it shipped in the last few months, and most of it now lives under one roof.&lt;/p&gt;
&lt;h2&gt;The boundary doesn&apos;t live in the prompt&lt;/h2&gt;
&lt;p&gt;So where does the boundary live, if not in the prompt? Over the last few months it moved down into the infrastructure layer. The clearest evidence is what HashiCorp shipped for native agentic identity in May 2026. The secrets handling is solid. But the part worth slowing down on is the authorization model, because it&apos;s what turns &lt;em&gt;please behave&lt;/em&gt; into &lt;em&gt;you can&apos;t&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Here it is, because it&apos;s the whole article. An agent&apos;s permitted action is the &lt;strong&gt;intersection of three policies&lt;/strong&gt;: the human it&apos;s acting for, the agent&apos;s own policy, and a &lt;em&gt;ceiling&lt;/em&gt; that nobody, human or machine, is allowed to cross. On top of that, the authorization is scoped to the specific request and expires with it.&lt;/p&gt;
&lt;p&gt;Read that twice. The agent never holds a standing key. It receives a temporary, request-shaped permission that is the &lt;em&gt;narrowest&lt;/em&gt; of what the human may do, what the agent may do, and what the ceiling allows. Traditional IAM was built for deterministic users doing predictable things. This is built for a non-deterministic actor that changes behavior at runtime every time it picks a different tool. Which is exactly the threat model everyone was hand-waving about a year ago.&lt;/p&gt;
&lt;p&gt;A few things fall out of this the moment you build on it instead of arguing with the model:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dynamic secrets instead of hardcoded ones.&lt;/strong&gt; The agent needs database access to refactor a schema? It never finds a password in a &lt;code&gt;.env&lt;/code&gt; file. Vault issues a short-lived, identity-bound credential that dies on a timer. If the agent hallucinates and dumps its credentials into a log, they&apos;re already worthless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every action is attributable.&lt;/strong&gt; In HashiCorp&apos;s validated pattern, the path &lt;code&gt;Web → Agent → MCP server → Vault&lt;/code&gt; carries one correlation identifier end to end. When something goes wrong, you don&apos;t ask &quot;what did the AI do.&quot; You pull the trace and see precisely whose authority the agent was borrowing, for which request, and what it touched.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Policy-as-code does the enforcing, not goodwill.&lt;/strong&gt; The agent can generate elegant, fast Terraform. If that Terraform creates an S3 bucket without encryption, Sentinel rejects the plan before it applies. The rule is enforced by a machine. It does not care how confident the model sounded.&lt;/p&gt;
&lt;p&gt;None of that is a better prompt. All of it is a wall.&lt;/p&gt;
&lt;h2&gt;What IBM quietly assembled&lt;/h2&gt;
&lt;p&gt;While the rest of the industry argued about how to make agents behave, IBM was buying the parts to make sure they can&apos;t misbehave. The cage already exists. One company just spent the last year bolting the bars together.&lt;/p&gt;
&lt;p&gt;IBM closed its $6.4 billion acquisition of HashiCorp in February 2025. At HashiConf 2025, HashiCorp&apos;s first conference as an IBM company, the direction stopped being abstract. MCP servers for Terraform, Vault, and Vault Radar gave AI agents a &lt;em&gt;governed&lt;/em&gt;, role-scoped, auditable way to act on infrastructure, instead of handing them broad API tokens and praying. Then in May 2026, Vault shipped the native three-policy agentic identity model I just walked through, and at Think 2026 the secrets layer rolled forward into Vault Enterprise 2.0.&lt;/p&gt;
&lt;p&gt;Stack it up and the shape is obvious.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./ai-agent-needs-a-ceiling-cage-architecture.webp&quot; alt=&quot;Layered architecture diagram titled &apos;The cage, one layer at a time&apos; showing the IBM AI agent governance stack from foundation to top: Vault (identity and the hard ceiling), Sentinel (policy-as-code on the deploy path), MCP Servers (governed interface to act), ADLC (the 6-phase methodology), and watsonx Orchestrate (control plane to govern the whole fleet). Caption beneath: Intelligence on top, control underneath.&quot;&gt;&lt;/p&gt;
&lt;p&gt;Identity and a hard ceiling at the bottom: &lt;strong&gt;Vault.&lt;/strong&gt; Policy-as-code on the deploy path: &lt;strong&gt;Sentinel.&lt;/strong&gt; A governed interface for the agent to even reach your infrastructure: &lt;strong&gt;MCP servers.&lt;/strong&gt; And over the top, a methodology. IBM published &lt;em&gt;Architecting Secure Enterprise AI Agents with MCP&lt;/em&gt; (verified by Anthropic), introducing the &lt;strong&gt;Agent Development Lifecycle (ADLC)&lt;/strong&gt;: six phases (Plan, Code &amp;amp; Build, Test &amp;amp; Release, Deploy, Operate, Monitor) that extend DevSecOps for stochastic, tool-using agents, with an MCP Gateway that centralizes authorization, policy, rate limits, and audit. I &lt;a href=&quot;/how-to-secure-ai-agents-production-framework/&quot;&gt;walk through all six phases, one at a time, here&lt;/a&gt;. Treat agents not as static applications you ship once, but as long-running systems you continuously evaluate, secure, and govern.&lt;/p&gt;
&lt;p&gt;And then there&apos;s the control plane. &lt;strong&gt;watsonx Orchestrate&lt;/strong&gt; now governs an organization&apos;s agent fleet across frameworks (IBM-native agents, Langflow, LangGraph, agents built on the open A2A protocol) through one operational layer, with &lt;strong&gt;AgentOps&lt;/strong&gt; providing lifecycle observability and real-time policy enforcement. The problem watsonx Orchestrate is built to solve has a one-word name: sprawl. Agents are being spun up in every team, on every framework. Without a single place to run, govern, and observe them, you don&apos;t have automation. You have a very fast mess with dashboards.&lt;/p&gt;
&lt;p&gt;The practical takeaway for anyone running a platform team: &lt;strong&gt;stop building this yourself.&lt;/strong&gt; I keep meeting teams burning senior-engineer quarters on homegrown sandboxes and wrapper scripts to stop AI tools from breaking things. Pure, unbillable R&amp;amp;D inside companies whose actual job is retail, or fintech, or streaming. The primitives are assembled now. Hand-rolling a worse version of Vault&apos;s ceiling is no longer brave, just expensive.&lt;/p&gt;
&lt;h2&gt;What&apos;s real, and what&apos;s still a slide&lt;/h2&gt;
&lt;p&gt;I&apos;m an IBM Champion. Let me use that to be useful instead of to cheer.&lt;/p&gt;
&lt;p&gt;What has actually shipped, and you can build on today: Vault&apos;s native agentic IAM, the MCP servers (beta, but real), Sentinel, watsonx Orchestrate with AgentOps, and the ADLC guide. That is a working foundation, not a roadmap.&lt;/p&gt;
&lt;p&gt;And what is still a bet? &lt;strong&gt;Project Infragraph&lt;/strong&gt;, HashiCorp&apos;s real-time infrastructure graph designed to be the context layer an agent reasons over, opened as a private beta in December 2025 and reached &lt;em&gt;public preview&lt;/em&gt; at Think 2026 in May 2026, delivered as &quot;HCP Terraform powered by Infragraph.&quot; But it&apos;s still beta, US-only, and HashiCorp itself discourages pointing it at production workflows. The vision is that the same graph will eventually let AI reason about infrastructure state, propose runbooks, and act across the lifecycle, and to connect outward to the broader IBM portfolio, including Red Hat Ansible, OpenShift, watsonx Orchestrate, Concert, and Turbonomic. That vision is the right one, because it answers the oldest objection to autonomous agents: &lt;em&gt;the agent doesn&apos;t know your business context&lt;/em&gt;. But it is a bet. Architect on the cage (Vault, Sentinel, the MCP gateway), which is production-grade today. Pilot the context brain. Don&apos;t bet your 2026 on a beta the vendor won&apos;t yet aim at production, however good the demo looks.&lt;/p&gt;
&lt;p&gt;That distinction is the whole point of reading independent analysis instead of a press release.&lt;/p&gt;
&lt;h2&gt;The job changes, it doesn&apos;t disappear&lt;/h2&gt;
&lt;p&gt;We&apos;re moving from hand-writing configuration to intent-based operation. Machines will write the infrastructure code. That isn&apos;t a forecast anymore. It&apos;s a release note.&lt;/p&gt;
&lt;p&gt;But your value as a Head of Platform or an architect doesn&apos;t evaporate with it. It moves. You stop reviewing every line of YAML before the merge and start designing the boundary instead: where Vault&apos;s ceiling sits, what Sentinel rejects, which gateway the agent reaches through, which ADLC phases every agent clears before it sees production. You used to be the last pair of eyes before the merge. Now you&apos;re the architect of the cage the machine runs full-speed inside, and physically cannot break the things that must not break.&lt;/p&gt;
&lt;p&gt;That&apos;s the end of TicketOps, and honestly, good riddance.&lt;/p&gt;
&lt;p&gt;So. This one is for the platform leads. Stop writing your agents polite instructions and hoping they hold. Stop spending senior time reinventing a worse Vault. Put that time into the architecture of the boundary instead. This was the conversation across this spring&apos;s conference floors, RSAC in March, Think 2026 in May: the industry has finally stopped asking how clever we can make the agent and started asking how tightly we can bound it.&lt;/p&gt;
&lt;p&gt;That was always the more interesting question. The future doesn&apos;t belong to whoever has the smartest agent. It belongs to whoever knows, precisely, what their agent can&apos;t do.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>AI</category><category>AI Agents</category><category>Security</category><category>HashiCorp</category><category>Vault</category><category>Sentinel</category><category>MCP</category><category>IBM</category><category>Platform Engineering</category><category>Policy as Code</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>CNCF Q1 2026 Report — Why Feature Flagging Is the Hidden Gateway to Cloud Native Maturity</title><link>https://devops.pink/cncf-q1-2026-feature-flagging-cloud-native-maturity/</link><guid isPermaLink="true">https://devops.pink/cncf-q1-2026-feature-flagging-cloud-native-maturity/</guid><description>CNCF Q1 2026 cloud native report analysis — why feature flagging is the bridge from mainstream to advanced practice, with commentary from the author.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;CNCF and SlashData just dropped their Q1 2026 State of Cloud Native Development report. Over 12,800 developers across 100+ countries answered it. And this is not a press release stuffed with vanity metrics. It&apos;s raw data on how the industry actually operates right now.&lt;/p&gt;
&lt;p&gt;I read the whole thing, cover to cover, then went and pestered the author, Liam Bollmann-Dodd from SlashData, for the context that didn&apos;t make it into the public PDF. Fun fact: Liam is a former antimatter physicist with a PhD from CERN. Which explains so much about how carefully the statistics in this report are put together.&lt;/p&gt;
&lt;p&gt;Here&apos;s what jumped out at me, and what I&apos;ll be watching next quarter.&lt;/p&gt;
&lt;h2&gt;20 million cloud native developers&lt;/h2&gt;
&lt;p&gt;The headline number first. The cloud native community has grown to 19.9 million developers, up from 15.6 million in Q3 2025. That&apos;s roughly 39% of every developer on the planet. Almost four in ten of us.&lt;/p&gt;
&lt;p&gt;But there&apos;s a wrinkle in the backend data that most recaps are going to skip right over. Among backend developers, 52% are classified as cloud native. That&apos;s a drop from 58% last quarter. Still higher than the 49% we saw a year ago, though. And SlashData doesn&apos;t dodge it: either the 58% in Q3 2025 was inflated, or this is a real quarter-on-quarter correction. Q3 2026 will tell us where the true baseline sits.&lt;/p&gt;
&lt;p&gt;One more number worth holding onto. 71% of backend developers use at least one cloud native technology, but only 52% clear the classification bar (which means using 3+ technologies). That 19-percentage-point gap? Those are people in the early innings of adoption. They&apos;ve picked up a tool or two, but they&apos;re not running a mature stack yet.&lt;/p&gt;
&lt;p&gt;Cloud native stopped being an emerging technology a while ago. It&apos;s now what git became a decade ago. The default baseline skill.&lt;/p&gt;
&lt;h2&gt;Containers became invisible&lt;/h2&gt;
&lt;p&gt;Container usage in the survey fell from a steady 60%-plus all the way down to 40%. Glance at that and you&apos;d assume containers are dying.&lt;/p&gt;
&lt;p&gt;They aren&apos;t. They just turned into infrastructure.&lt;/p&gt;
&lt;p&gt;Some of the drop is methodology, plain and simple. SlashData widened the definition of a backend developer to fold in web backend folks who work through higher-level services. Run the model with the old historical definition and container adoption is actually 58%, not 40%. So changing who got surveyed mechanically dragged the number down.&lt;/p&gt;
&lt;p&gt;The deeper story is the one that matters. 88% of backend developers now work with some form of infrastructure standardization, up from 80% six months ago. And the slice of developers with no formalized platform or DevOps practices dropped from 20% to 12%.&lt;/p&gt;
&lt;p&gt;Platform engineering teams went and built internal developer portals. You click &quot;deploy,&quot; and somewhere underneath there&apos;s Kubernetes, containers, orchestration, all of it humming along. You just never see it. No Dockerfile. No SSH-ing into a cluster.&lt;/p&gt;
&lt;p&gt;The report has a striking example here. 39% of backend developers use microservices, yet only 27% explicitly say they use Kubernetes, even though microservices usually run on it. So the report poses a blunt question. When a developer ships a containerized app through an IDP without ever touching a Dockerfile, do they even think of themselves as a &quot;container user&quot;?&lt;/p&gt;
&lt;p&gt;Containers haven&apos;t gone anywhere. They&apos;ve become the electrical wiring in your office. Critically important. Completely invisible until the moment something fries.&lt;/p&gt;
&lt;p&gt;And this is where I get a little nervous, and so do the report&apos;s authors. They say it outright: organizations need to make sure infrastructure expertise still exists within teams to manage, troubleshoot, and optimize the platforms that enable productivity. So when the platform breaks at 2am, who on your team actually knows what&apos;s under the hood?&lt;/p&gt;
&lt;p&gt;I lurk in the DevOps communities, Reddit, Hacker News, the K8s Slack, and over the last six months a pattern has gotten really hard to miss. More and more mid-level developers are asking genuinely basic questions about kubectl. These are not juniors. These are people who&apos;ve been deploying through an internal portal for three years and have literally never seen raw Kubernetes.&lt;/p&gt;
&lt;h2&gt;Feature flagging, the report&apos;s biggest surprise&lt;/h2&gt;
&lt;p&gt;This is the finding that makes the whole report worth your afternoon.&lt;/p&gt;
&lt;p&gt;For the first time, SlashData ran association analysis. That means looking at which technologies show up together more often than random chance would predict. The metric is called &quot;lift.&quot; A value above 1.0 means the technologies are connected. Above 1.7 is a strong connection.&lt;/p&gt;
&lt;p&gt;The data shook out into three tiers of maturity:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Foundational:&lt;/strong&gt; Kubernetes + microservices. The price of admission.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mainstream:&lt;/strong&gt; Observability, streaming/messaging, event-driven architecture. Operational sophistication.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advanced:&lt;/strong&gt; Immutable infrastructure, chaos engineering, service meshes. Only 6-7% of teams are here (immutable 7%, chaos 6%).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the real question becomes: what actually moves a team from mainstream to advanced?&lt;/p&gt;
&lt;p&gt;Your gut says more Kubernetes, or some fancy service mesh. Sounds reasonable. The data says no. The answer is feature flagging.&lt;/p&gt;
&lt;p&gt;The specific lift numbers spell out why. Feature flagging has a strong link to mainstream and advanced practices at the same time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;with observability tools: 1.53&lt;/li&gt;
&lt;li&gt;with event-driven architecture: 1.45&lt;/li&gt;
&lt;li&gt;with chaos engineering: 1.44&lt;/li&gt;
&lt;li&gt;with multicluster management: 1.40&lt;/li&gt;
&lt;li&gt;with immutable infrastructure: 1.33&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&apos;s literally the bridge between tiers 2 and 3. For anyone who hasn&apos;t lived with it: feature flags let you deploy code to production without showing it to users right away. You roll a feature out to 5%, watch the metrics, then keep going. Or you roll it back without redeploying a thing.&lt;/p&gt;
&lt;p&gt;The report explains the gateway effect like this. Feature flagging drills two ideas into a team. Decoupling deployment from release, and incremental testing on a subset of traffic. Those mental models carry straight over into advanced practices, chaos engineering (controlled failure injection) and immutable infrastructure (deployments as disposable experiments).&lt;/p&gt;
&lt;p&gt;When I asked Liam about all of this, he handed me the context that never made the PDF:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;We did the analysis blind, so as not to put any of our expectations on it. However, for several years we have been grouping these cloud native practices and technologies into three groups on usage rates (entry, mainstream, advanced). This has kind of been normalised as a description, but has previously lacked the data to demonstrate that this tiered approach reflects an actual journey of maturity. During the analysis, we found validation for our previous descriptions, but were surprised by how pivotal feature flagging as a practice was to the cloud native maturity journey. Bringing this to people I consider experts in this space, the general consensus was that it &apos;makes sense&apos; for feature flagging to be so important to engaging in the elite cluster of practices, but they would not have predicted how important it was.&quot;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;— Liam Bollmann-Dodd, Principal Market Research Consultant, SlashData&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There&apos;s an important nuance buried here: there are two roads to the advanced tier, not one. You get there through experimentation maturity (feature flagging) or through operational visibility (observability tools, which carry a 1.33 lift with immutable infrastructure). But feature flagging is the friendlier on-ramp.&lt;/p&gt;
&lt;p&gt;Why does that matter in practice? Because you can stand up feature flagging without re-architecting your whole system. It isn&apos;t a months-long migration. For teams stuck spinning their wheels in the mainstream tier, the data hands you a specific, actionable answer.&lt;/p&gt;
&lt;p&gt;One last detail, and it&apos;s a good one. The strongest connection in the entire dataset is immutable infrastructure + chaos engineering, sitting at 2.22. Which tells you that teams reaching the advanced tier don&apos;t pick these practices off one at a time. They adopt them as a bundle. The advanced tier isn&apos;t a gradient. It&apos;s a cluster. You&apos;re either in it or you&apos;re not.&lt;/p&gt;
&lt;h2&gt;AI teams are taking a different path&lt;/h2&gt;
&lt;p&gt;Here&apos;s where the data gets genuinely fun. AI teams are not walking the same maturity path as backend teams.&lt;/p&gt;
&lt;p&gt;For your standard backend developer, immutable infrastructure is an elite-tier destination (that 2.22 lift with chaos engineering). For AI teams? Immutable infrastructure is a gateway technology they reach for early.&lt;/p&gt;
&lt;p&gt;Why? Reproducibility. The report says it plainly: for AI teams, immutable infrastructure ensures reproducible training environments and consistent deployment artifacts. Plenty of AI teams park in the experimentation phase, where reproducibility is everything and chaos testing simply isn&apos;t. Which is exactly why, for AI, immutable infrastructure is bound more tightly to observability (1.58) than to chaos engineering (1.28, versus 2.22 for general backend).&lt;/p&gt;
&lt;p&gt;The second surprise is remote procedure calls (RPC). In standard backend development, RPC is nearly invisible. For AI teams the connection between RPC and feature flagging jumps to 2.07 (against 1.16 for general). That tracks with how central RPC is to model inference APIs, distributed training, and feature store access.&lt;/p&gt;
&lt;p&gt;So the practical takeaway for anyone building platforms for AI teams:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not every AI team needs production-scale complexity. Many legitimately stop at the experimentation or training stage.&lt;/li&gt;
&lt;li&gt;Feature flagging and immutable infrastructure are dual prerequisites for production AI. This is a key bottleneck.&lt;/li&gt;
&lt;li&gt;Service mesh, chaos engineering, and multicluster management need to be framed specifically for AI: traffic splitting for A/B testing models, resilience testing for model degradation, geo-distributed inference. Don&apos;t use generic infrastructure benefits to sell it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your org runs both backend services and AI workloads, then your platform team is quietly building toward two completely different definitions of &quot;good&quot; all at once.&lt;/p&gt;
&lt;h2&gt;What didn&apos;t make the report&lt;/h2&gt;
&lt;p&gt;I asked Liam whether anything interesting in the data got left on the cutting room floor. His answer turned out to be the most valuable bit of the whole conversation.&lt;/p&gt;
&lt;p&gt;The report notes that 88% of developers work with some form of DevOps standardization, but the approaches swing wildly for organizational reasons. Liam flagged this as a personal interest of his. The shift-left and shift-right approaches to standardization.&lt;/p&gt;
&lt;p&gt;A few specifics he gave me:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Highly regulated industries (finance, healthcare) get aggressive about standardization.&lt;/li&gt;
&lt;li&gt;SaaS companies lean toward looser standardization.&lt;/li&gt;
&lt;li&gt;Developer density at a company is a major driver of which methods get chosen.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And here&apos;s his core message to vendors:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&quot;...most teams are working with extreme constraints on capital, people, or tool access. As such, I want to continually remind vendors and platform tooling companies that for many organisations it is heterogenous mess of a tech stack that is held together more by hope than a perfectly designed and architected system.&quot;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;— Liam Bollmann-Dodd&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sit with that one for a second. Conversations about &quot;good engineering teams&quot; love to get stuck in philosophy. Framework choices. Endless debates about architectural purity. Meanwhile actual teams are operating under brutal constraints. Their stack is whatever managed to survive three reorgs, two cloud migrations, and an acquisition.&lt;/p&gt;
&lt;p&gt;That&apos;s not a failure on their part. It&apos;s the real operating environment of cloud native development in 2026.&lt;/p&gt;
&lt;p&gt;I read engineering blogs, incident post-mortems, community Slack threads. Liam&apos;s point checks out everywhere I look. Teams from scrappy startups to FAANG describe their stacks the exact same way. &quot;It&apos;s a mess, but it works.&quot; The only thing that changes is how willing they are to say it out loud.&lt;/p&gt;
&lt;h2&gt;What I&apos;m watching for in Q2&lt;/h2&gt;
&lt;p&gt;When the Q2 report lands (usually June-July), here&apos;s my list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Will the backend cloud native percentage steady out?&lt;/strong&gt; 52% in Q1, after 58% in Q3 2025. SlashData themselves say Q3 2026 reveals the true baseline. This is a leading indicator for the health of cloud native adoption.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will feature flagging graduate from &quot;predictor&quot; to &quot;default&quot;?&lt;/strong&gt; The report has now named feature flagging as a gateway. Will engineering leaders read that and actually move? If adoption spikes among mainstream teams, we&apos;ll know industry research is genuinely steering decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will the gap between AI and backend paths get wider?&lt;/strong&gt; Q1 showed AI teams using immutable infrastructure as a gateway rather than a destination, and RPC as critical for them. Q2 tells us whether that&apos;s a stable pattern or just an artifact of where AI maturity sits today. My money&apos;s on stable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will the advanced tier stay rare?&lt;/strong&gt; It&apos;s at 6-7% right now. If Q2 shows growth, something shifted in tooling accessibility. If it stays flat, we&apos;re staring at a genuine industry ceiling, meaning most teams will never reach the advanced tier no matter how many conference talks get given on chaos engineering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What new analytical trick will SlashData pull out?&lt;/strong&gt; Q1 introduced association analysis with the lift metric and journey maps. That was a serious methodological leap. So what does Q2 add?&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Practical takeaways for right now&lt;/h2&gt;
&lt;p&gt;Don&apos;t sit on your hands waiting for Q2. Q1 already handed us things to act on today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;If your team is stuck in the mainstream tier&lt;/strong&gt;, take a hard look at your feature flag tooling and discipline. The lift data says this is your most reliable bridge to the advanced tier. The backup route is through observability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If your developers can&apos;t pop the hood on a container when it breaks&lt;/strong&gt;, you&apos;ve got a training gap. The report says it flat out: make sure infrastructure expertise actually lives inside your team.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If your platform serves AI workloads&lt;/strong&gt;, remember those teams are on a different path. Immutable infrastructure is their gateway, not their destination. And RPC matters more than you think.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;If your stack is held together by hope and stale Confluence docs&lt;/strong&gt;, congratulations, you&apos;re in the majority. That isn&apos;t a failure. The only failure is pretending otherwise in roadmap meetings.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Q1 2026 report gave us the data. Q2 will tell us what we actually did with it.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;The State of Cloud Native Development Q1 2026 report was published by CNCF and SlashData based on the 31st wave of the Developer Nation survey (December 2025 — January 2026). 12,800+ developers across 100+ countries. Liam Bollmann-Dodd, Principal Market Research Consultant at SlashData and author of the report, provided exclusive commentary for this article.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Cloud Native</category><category>CNCF</category><category>Feature Flagging</category><category>Platform Engineering</category><category>Kubernetes</category><category>DevOps</category><category>Observability</category><category>AI</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>AI SRE Joined My On-Call — A Beginner-Friendly Walkthrough of Rootly</title><link>https://devops.pink/ai-sre-joined-my-on-call-rootly/</link><guid isPermaLink="true">https://devops.pink/ai-sre-joined-my-on-call-rootly/</guid><description>What an AI SRE actually does on call — a hands-on walkthrough of Rootly: how it observes, advises, and acts, with its four-level trust model.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You know the feeling, darling. You finally sat down to eat, or just closed your laptop for the night. Then your phone lights up. &lt;strong&gt;P1. Prod is down.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you&apos;re new to on-call, that first incident is rough. Slack has twelve people typing. Your dashboards are a wall of red. And you&apos;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? Written by an AI nobody fully audited. Welcome to modern on-call, queen.&lt;/p&gt;
&lt;p&gt;There&apos;s a whole new category of tooling trying to close that gap, and it goes by &lt;strong&gt;AI SRE&lt;/strong&gt;. So I walked through one of them, &lt;a href=&quot;https://rootly.com&quot;&gt;Rootly&lt;/a&gt;. Here&apos;s the honest beginner&apos;s take.&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;79dXxpiFQtY&quot;
title=&quot;AI Just Joined Your On-Call Rotation&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;Why &quot;AI SRE&quot; became a thing in 2026&lt;/h2&gt;
&lt;p&gt;Three forces converged here. First: microservice sprawl. No single human can hold the whole architecture in their head anymore, full stop. Second, the people who actually wrote half the code have moved on, and they took all their context with them. Third, LLMs finally got good enough at code reasoning that they can plausibly rebuild that lost context from logs, runbooks, and old postmortems.&lt;/p&gt;
&lt;p&gt;So no, &quot;AI SRE&quot; isn&apos;t a fancy way of saying &quot;we dropped a chatbot in our incident channel.&quot; It&apos;s tooling that swallows your whole incident surface area, runbooks and past postmortems and Slack incident channels and IaC and application code, and then helps you reason about a failure faster than you ever could on your own.&lt;/p&gt;
&lt;p&gt;The AI is really doing two jobs here.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Indexing your tribal knowledge.&lt;/strong&gt; Every postmortem you&apos;ve ever written. Every Slack thread where someone went &quot;oh, this is just X again.&quot; That&apos;s all training material your AI SRE keeps loaded and searchable, sis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Correlating live signals when an alert fires.&lt;/strong&gt; Logs, metrics, recent commits, recent deploys. It yanks those together and hands you a hypothesis with citations: &lt;em&gt;&quot;This looks similar to incident #438 from last March, and a deploy went out 12 minutes ago that touched the same code path.&quot;&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You still decide what to do. You just skip the thirty minutes of frantic tab-switching that usually comes before any real thinking starts.&lt;/p&gt;
&lt;h2&gt;How Rootly handles trust: the four-level model&lt;/h2&gt;
&lt;p&gt;Okay, this is the part I actually cared about. AI in production sounds dreamy in a demo. It sounds terrifying when it&apos;s firing on a real incident at 3am. Because nobody, and I mean nobody, wants an autonomous agent rolling back deploys because it pattern-matched on the wrong thing.&lt;/p&gt;
&lt;p&gt;Rootly publishes an &lt;a href=&quot;https://rootly.com/ai-sre-guide/maturity-model&quot;&gt;AI SRE Maturity Model&lt;/a&gt; with four explicit levels, and you adopt them one at a time. The names in the docs are pretty formal. Here&apos;s the practical version, code cuties.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 1 — Observe.&lt;/strong&gt; &lt;em&gt;(Officially: &quot;Read-Only Copilot.&quot;)&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 2 — Advise.&lt;/strong&gt; Still technically part of Level 1 in the formal model, but worth calling out on its own. Now the AI suggests specific next steps and brings a reasoning trail along: &lt;em&gt;&quot;Consider rolling back deploy abc123. Here&apos;s why.&quot;&lt;/em&gt; You still drive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 3 — Approve.&lt;/strong&gt; &lt;em&gt;(Officially: &quot;Assisted Actions With Approvals.&quot;)&lt;/em&gt; Now the AI can initiate actions like rollbacks, config changes, and 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 really start to stack up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 4 — Autonomous.&lt;/strong&gt; &lt;em&gt;(Officially: &quot;Guardrailed Autonomy for Narrow, Reversible Failure Modes.&quot;)&lt;/em&gt; As Rootly puts it: &lt;em&gt;&quot;This is not &apos;AI resolves incidents.&apos; It is &apos;AI resolves a small number of repeatable incidents safely.&apos;&quot;&lt;/em&gt; Autonomous execution applies only to allow-listed, reversible runbooks with clear preconditions and stop conditions. Most teams get here only for a handful of specific failure modes, and only after months of safe operation at Level 3.&lt;/p&gt;
&lt;p&gt;The philosophy holding all of this up is what Rootly calls &lt;strong&gt;&quot;human-on-the-loop.&quot;&lt;/strong&gt; An engineer always has the final say on critical actions. Accountability stays human. That&apos;s the right framing, and honestly it&apos;s what separates the serious AI SRE products from the demoware.&lt;/p&gt;
&lt;h2&gt;What stood out beyond the trust model&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The post-incident timeline writes itself.&lt;/strong&gt; Once an incident closes, Rootly assembles the full sequence: when the alert fired, who joined the war room, what commands got run, what was tried, and what actually fixed it. My postmortems usually eat an hour, minimum. This drops the whole thing to &quot;review and edit.&quot; Bless.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Citations on every recommendation.&lt;/strong&gt; When the AI suggests a fix, it links straight to the past incident, runbook, or code line that informed the call. You can push back. AI tools that refuse to show their work make me nervous, and this one doesn&apos;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bring your own AI API key.&lt;/strong&gt; You plug in your own LLM credentials, whether that&apos;s OpenAI, Anthropic, or a self-hosted model. Your incident data stays scoped to your account. And Rootly&apos;s docs are blunt about it: &lt;em&gt;&quot;PII is automatically scrubbed and never used for training. Opt out anytime.&quot;&lt;/em&gt; For anyone in a regulated industry, that one line is the difference between &quot;let&apos;s evaluate this&quot; and &quot;we can&apos;t even start the conversation.&quot;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Rootly MCP server.&lt;/strong&gt; Now this is the very 2026 part I didn&apos;t see coming. Rootly ships an MCP (Model Context Protocol) server that wires your incident context straight into IDEs like Cursor, Windsurf, and Claude Desktop. Mid-incident, you can ask your editor &quot;what was the last change to the auth service?&quot; and the answer comes back from Rootly&apos;s correlation engine, no copy-pasting between five windows. If you&apos;ve been watching the MCP wave, this is exactly the kind of practical integration the protocol was built for.&lt;/p&gt;
&lt;p&gt;The customer list leans heavy on names you&apos;d know on sight: NVIDIA, Canva, Webflow, Figma, LinkedIn, Replit, Grammarly, Mistral AI, Brex, DoorDash, SoFi. That&apos;s not some weekend side-project tool. That&apos;s running production at scale.&lt;/p&gt;
&lt;h2&gt;Will it replace me?&lt;/h2&gt;
&lt;p&gt;Honest answer? No. But it does change the job.&lt;/p&gt;
&lt;p&gt;Think about what a junior on-call shift looks like today. Mostly it&apos;s &quot;navigate to the right dashboard, spot the obvious thing, page a senior if it&apos;s not obvious.&quot; Levels 1 and 3 of the trust model swallow the navigation and the obvious stuff. What&apos;s left for the human is the part that&apos;s actually judgment: &lt;em&gt;&quot;is this the right rollback target,&quot; &quot;do we communicate to customers now,&quot; &quot;is this incident a symptom of a deeper architectural problem.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And that&apos;s a better job, sis. Less tab-juggling, more thinking. The road from junior to senior gets shorter, because you spend your rotation on real decisions instead of pattern-matching against dashboards all night.&lt;/p&gt;
&lt;h2&gt;Who this is for&lt;/h2&gt;
&lt;p&gt;Solo SRE drowning in alerts? This is for you. Team lead watching your engineers burn out on rotation? Also for you. And if you&apos;re early in your career and just want to see what production on-call actually looks like, walking through Rootly&apos;s setup is a genuinely decent way to learn what the work feels like before your first real pager.&lt;/p&gt;
&lt;p&gt;The promise here isn&apos;t &quot;AI replaces your on-call.&quot; It&apos;s &quot;AI handles the busywork so the thinking part goes faster.&quot; Which, after a year of false-positive alerts and broken pager rotations, is what most of us actually need.&lt;/p&gt;
&lt;p&gt;So if on-call is starting to hurt, &lt;a href=&quot;https://rootly.com&quot;&gt;Rootly&lt;/a&gt; is worth a real evaluation. Start at Level 1, observe-only, and see what it catches that you&apos;d have missed. You don&apos;t promote to Level 3 until you trust the Level 1 output. That&apos;s the right shape for adopting any AI tool in production, queen.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>AI</category><category>AI Agents</category><category>MCP</category><category>SRE</category><category>Incident Response</category><category>DevOps</category><category>Beginners</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Stop Lying About Your Backups — Zero-Trust Recovery with Plakar</title><link>https://devops.pink/stop-lying-about-your-backups-plakar/</link><guid isPermaLink="true">https://devops.pink/stop-lying-about-your-backups-plakar/</guid><description>Most backups are untested hope. Zero-trust recovery with Plakar — immutable, deduplicated, verifiable restores you can prove before you need them.</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey my DevOps queens (and kings, too)! 👑&lt;/p&gt;
&lt;p&gt;Sit with me for a sec. Put down your coffee. Close your tickets. I want to talk about something a little uncomfortable, because I know your secret.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You&apos;re lying.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every morning, you look at those green backup checkmarks and tell the business:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&quot;We are protected.&quot;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And deep down? You&apos;re praying you never have to test that theory. Because here&apos;s the thing you already know in your gut: &lt;strong&gt;if prod goes down, those checkmarks won&apos;t save you.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That&apos;s not a strategy, sis. That&apos;s &lt;strong&gt;chronic fear&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;So relax. ✨ We&apos;re not fixing your services today. We&apos;re treating your fears. The stuff that keeps you up at 3am, scrolling, wondering. We&apos;ll walk through your traumas one by one, and we&apos;ll shut every single one of them down.&lt;/p&gt;
&lt;p&gt;And for this, we&apos;ll use &lt;strong&gt;Plakar&lt;/strong&gt;. 🛡️&lt;/p&gt;
&lt;p&gt;It&apos;s &lt;strong&gt;Open Source&lt;/strong&gt;, which I know matters to you. No &lt;em&gt;black boxes.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;Su8USwG7tWc&quot;
title=&quot;Stop Lying About Your Backups - DevOps Therapy&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;1. The Fear of Recovery&lt;/h2&gt;
&lt;p&gt;Your first trauma? The &lt;strong&gt;fear of recovery&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You know the nightmare. You restore the files, and then the system just... doesn&apos;t work. Why? Standard backups save the data, but they &lt;strong&gt;lose the context&lt;/strong&gt;. So you end up with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Permissions are broken&lt;/li&gt;
&lt;li&gt;Timestamps are reset&lt;/li&gt;
&lt;li&gt;Dependencies are gone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pure chaos. You&apos;ve got all the pieces and none of the picture. Your system has &lt;strong&gt;amnesia&lt;/strong&gt;, darling.&lt;/p&gt;
&lt;h3&gt;Plakar is Digital Memory&lt;/h3&gt;
&lt;p&gt;It preserves the &lt;strong&gt;exact state&lt;/strong&gt;: ownership, modes, extended attributes. The relationships between files stay intact. You open Plakar, you restore the snapshot, and that&apos;s it. &lt;strong&gt;Fast, granular, and reliable.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;2. The Trap of Dependence&lt;/h2&gt;
&lt;p&gt;Next one. You feel &lt;strong&gt;dependent&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Everything lives in the cloud, and you know exactly what that means. If they hike prices tomorrow, or lock your account, you can&apos;t get your data out fast. You&apos;re &lt;strong&gt;trapped&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Plakar treats this with &lt;strong&gt;total portability&lt;/strong&gt;. It packs your data into a &lt;strong&gt;Kloset&lt;/strong&gt;, a self-contained repository. 📦&lt;/p&gt;
&lt;p&gt;Keep it on &lt;strong&gt;S3 today&lt;/strong&gt;. Tomorrow, replicate those snapshots to a totally different &lt;strong&gt;Kloset store&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Local disk&lt;/li&gt;
&lt;li&gt;Another cloud provider&lt;/li&gt;
&lt;li&gt;Wherever you want&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No format conversion. No painful migrations. The data belongs to &lt;strong&gt;you&lt;/strong&gt;, not the infrastructure. &lt;strong&gt;You are free to choose where to live.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;3. Paranoia&lt;/h2&gt;
&lt;p&gt;Point three is &lt;strong&gt;Paranoia&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You send data to the cloud, and so often, the control over where and how encryption happens just isn&apos;t yours. You&apos;re forced to &lt;em&gt;take their word for it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But what if they get hacked? What if some rogue insider decides to peek at your files? You&apos;re handing your secrets to total strangers.&lt;/p&gt;
&lt;h3&gt;Client-Side Encryption&lt;/h3&gt;
&lt;p&gt;Plakar does it differently, queen. Data gets encrypted &lt;strong&gt;on your end&lt;/strong&gt;, at the source, before anything leaves for storage. Nothing readable ever reaches the cloud.&lt;/p&gt;
&lt;p&gt;To the outside world, it&apos;s just &lt;strong&gt;encrypted chunks&lt;/strong&gt;. Meaningless without your keys. You can delegate &lt;em&gt;storage&lt;/em&gt; without ever delegating &lt;em&gt;access&lt;/em&gt;. And the risk of a cloud breach? It drops, hard.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You are protected.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;4. Budget&lt;/h2&gt;
&lt;p&gt;And finally. &lt;strong&gt;Budget.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You stare at the cloud bill and it hits you: you&apos;re paying for air. Fifty copies of the same operating system, sitting there. You&apos;re paying for the same thing fifty times over. Your infrastructure is bloated, plain and simple.&lt;/p&gt;
&lt;h3&gt;Smart Deduplication&lt;/h3&gt;
&lt;p&gt;Plakar cuts the fat. It breaks files into &lt;strong&gt;chunks&lt;/strong&gt;. So if you&apos;ve got a hundred near-identical servers, those repeated chunks don&apos;t get duplicated. Not even once.&lt;/p&gt;
&lt;p&gt;What you get:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Drastically smaller storage footprint&lt;/li&gt;
&lt;li&gt;Significantly lower storage bills&lt;/li&gt;
&lt;li&gt;No wasted company money&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And your &lt;strong&gt;CFO will finally be happy.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;The Prescription&lt;/h2&gt;
&lt;p&gt;Your fears aren&apos;t just &lt;em&gt;&quot;part of the job,&quot;&lt;/em&gt; code cuties. They&apos;re &lt;strong&gt;symptoms of outdated architecture&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You don&apos;t have to learn to live with the pain. You need to &lt;strong&gt;change the tool.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Here&apos;s what Plakar gives you:&lt;br&gt;
✅ Predictable recovery&lt;br&gt;
✅ Independence from clouds&lt;br&gt;
✅ Real privacy&lt;br&gt;
✅ Smart savings&lt;/p&gt;
&lt;p&gt;That&apos;s our session for today. Go try &lt;strong&gt;&lt;a href=&quot;https://github.com/PlakarKorp/plakar&quot;&gt;Plakar&lt;/a&gt;&lt;/strong&gt;, and start sleeping peacefully again.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>DevSecOps</category><category>Security</category><category>DevOps</category><category>Architecture</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Escaping the Command Line Cartel: Why I Mandate Visual Git in Enterprise DX</title><link>https://devops.pink/gitkraken-visual-dx/</link><guid isPermaLink="true">https://devops.pink/gitkraken-visual-dx/</guid><description>Terminal-only is a toxic DX dependency. How visual version control with GitKraken cuts cognitive load, enforces psychological safety, and scales DevOps.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Okay, darlings. Let&apos;s talk about the elephant in the server room. I mean the way we all worship the CLI like it&apos;s sacred. 💅&lt;/p&gt;
&lt;p&gt;I get it. For years now, living inside the terminal has been this little badge of honor in engineering. You&apos;re &quot;real&quot; if you never touch a mouse. But here&apos;s my hot take, queen: judge it strictly as a Developer Experience problem and the terminal starts looking less like a flex and more like a toxic ex. Endless flags. That tiny heart-stop before you hit &lt;strong&gt;Enter&lt;/strong&gt; on a force push. All that mental juggling we just... accept, because &lt;em&gt;&quot;that&apos;s how real engineers do it.&quot;&lt;/em&gt; No. That&apos;s gatekeeping wearing an architecture costume. Real engineering cares about safety and speed and actually being able to SEE what&apos;s happening. So I ripped up my whole version control workflow and made &lt;strong&gt;GitKraken&lt;/strong&gt; my main Git interface. Best decision, honestly.&lt;/p&gt;
&lt;p&gt;Let me walk you through why the visual approach wins. Section by section, sis.&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;BGGX3UW4jMM&quot;
title=&quot;GitKraken vs Git CLI: Best Git GUI for DevOps in 2026&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;1. High-Signal Telemetry (Total Honesty)&lt;/h2&gt;
&lt;p&gt;The terminal hides the story from you. Want to understand how a messy repo actually got messy? You interrogate it with &lt;code&gt;git log&lt;/code&gt; and then try to draw the whole multi-branch commit tree in your head like some kind of psychic. Cute. Exhausting.&lt;/p&gt;
&lt;p&gt;GitKraken just shows you. Right there. The commit graph is laid out in full, every branch and every merge and every weird little pivot, all mapped in front of your eyes. And it isn&apos;t only a pretty GUI, code cuties. It&apos;s an honest, auditable picture of what your team actually did. You see who, what, and why. No query required.&lt;/p&gt;
&lt;h2&gt;2. Tactile Architecture &amp;amp; Frictionless Workflows&lt;/h2&gt;
&lt;p&gt;In the CLI you&apos;re basically muttering abstract spells into a black box and hoping. There&apos;s this gap between the command you type and the thing you&apos;re actually trying to do.&lt;/p&gt;
&lt;p&gt;GitKraken closes that gap. It makes version control something you touch. Need to merge or rebase? I don&apos;t sit there reciting syntax from memory like it&apos;s a final exam. I grab the branch. I pull it onto the other one. &lt;strong&gt;Drag. And. Drop.&lt;/strong&gt; That&apos;s it. The distance between &quot;what I meant&quot; and &quot;what happened&quot; basically disappears, and I get to move at the speed of my own brain.&lt;/p&gt;
&lt;h2&gt;3. Adult Conflict Resolution&lt;/h2&gt;
&lt;p&gt;Resolving a gnarly merge conflict in the CLI is, honestly, a stress-management exercise. The terminal hits you with a wall of text, and one bad keystroke breaks the build. Fun!&lt;/p&gt;
&lt;p&gt;GitKraken turns that whole panic spiral into a calm little conversation with your code instead. The visual merge conflict editor? Chef&apos;s kiss. Honestly a masterclass in DX:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I see my version.&lt;/li&gt;
&lt;li&gt;I see the incoming version.&lt;/li&gt;
&lt;li&gt;I see the output.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A couple of clicks to pick what stays and what goes. No spiraling. No mangled syntax. Just a clean, resolved deployment and a queen who is still relaxed.&lt;/p&gt;
&lt;h2&gt;4. Psychological Safety (The Magic Button)&lt;/h2&gt;
&lt;p&gt;Enterprise infrastructure needs real guardrails. Because we all mess up sometimes, and in the terminal a bad commit feels like the end of the world.&lt;/p&gt;
&lt;p&gt;So here&apos;s the part I&apos;m a little obsessed with. GitKraken gives you the &lt;strong&gt;Undo&lt;/strong&gt; button. Drop a stash? Botch a rebase? Commit to entirely the wrong branch? One click and the state snaps right back to where it was. Knowing that safety net is there genuinely changes how I work. I get bolder. I move faster. I stop tiptoeing.&lt;/p&gt;
&lt;h2&gt;5. Ecosystem Interoperability&lt;/h2&gt;
&lt;p&gt;A tool is only as good as everything it talks to. And GitKraken doesn&apos;t sit off in its own little corner, sis. It plays nicely with the rest of your stack.&lt;/p&gt;
&lt;p&gt;It hooks straight into Jira, GitHub, and GitLab, so all the context lives in one spot and I&apos;m not drowning in ten browser tabs anymore. Even better: through &lt;strong&gt;GitLens in VS Code&lt;/strong&gt;, that visual context follows me right into my IDE. You get inline telemetry showing exactly who wrote a line and when, sitting quietly in your editor, ready the second you need it.&lt;/p&gt;
&lt;h2&gt;The Executive Verdict&lt;/h2&gt;
&lt;p&gt;Gorgeous. Intuitive. Ruthlessly efficient. It handles merge conflicts where you can actually see them, slots neatly into the enterprise stack, and cuts down on the dumb human errors we all make.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Does your terminal do that?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you&apos;re done fighting your own tools and you want to level up your Developer Experience, grab GitKraken through my strategic alliance link below.&lt;/p&gt;
&lt;p&gt;🦑 &lt;strong&gt;&lt;a href=&quot;https://gitkraken.cello.so/an1FhNXzY8k&quot;&gt;Deploy GitKraken Pro (50% Executive Subsidy) -&amp;gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Then come tell me about it in the &lt;strong&gt;&lt;a href=&quot;https://devops.army/&quot;&gt;Discord Syndicate&lt;/a&gt;&lt;/strong&gt;: are you staying loyal to the terminal, or are you ready to upgrade your architecture?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Git</category><category>Developer Experience</category><category>Version Control</category><category>Best Practices</category><category>Architecture</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Kubernetes Is No Longer Number One — The REAL 2025 Cloud Native Report (CNCF x SlashData)</title><link>https://devops.pink/kubernetes-no-longer-number-one-2025-cloud-native-report/</link><guid isPermaLink="true">https://devops.pink/kubernetes-no-longer-number-one-2025-cloud-native-report/</guid><description>Kubernetes is no longer #1. The 2025 CNCF x SlashData report on the real cloud-native trends — backend growth, DevOps adoption, and the AI gaps.</description><pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey my cloud-native queens, kings, and everyone shipping to production in between.&lt;/p&gt;
&lt;p&gt;So I read the whole thing so you don&apos;t have to. We&apos;re walking through the key facts from the 2025 “State of Cloud Native” &lt;a href=&quot;https://www.cncf.io/wp-content/uploads/2025/11/cncf_report_stateofcloud_111025a.pdf&quot;&gt;report by CNCF and SlashData&lt;/a&gt;, and there&apos;s a lot here.&lt;/p&gt;
&lt;p&gt;The big spoiler first: &lt;strong&gt;Kubernetes is NO LONGER the most interesting number.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Everyone&apos;s chasing K8s. Meanwhile the real action is happening somewhere else entirely.&lt;/p&gt;
&lt;p&gt;Where do these numbers come from? &lt;strong&gt;Over 12,000 developers from 128 countries&lt;/strong&gt;, surveyed between June and July 2025, sliced by role: backend, DevOps, ML/AI, IoT, and games. Solid sample, darling.&lt;/p&gt;
&lt;p&gt;Okay. Facts time.&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;tBK5rA8xvTc&quot;
title=&quot;Kubernetes Is No Longer 1 — The REAL 2025 Cloud Native Report (CNCF x SlashData)&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;Finding Number One: Backend won&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;56% of backend developers are now cloud native.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Put that in raw headcount and you get &lt;strong&gt;15.6 million cloud-native developers&lt;/strong&gt;, of which &lt;strong&gt;9.3 million of them are backend&lt;/strong&gt;. Backend is the engine room, sis.&lt;/p&gt;
&lt;p&gt;Why care? Because backend teams are the ones carrying the weight. APIs, observability, microservices, CI/CD, who actually owns a service at 3am. All of it.&lt;/p&gt;
&lt;p&gt;So if you&apos;re building a platform, build it for backend and DevOps. Not for “everyone in general,” because “everyone in general” never ships.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Backend + DevOps is the new core of the cloud-native community.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Finding Number Two: AI is not that cloud native&lt;/h2&gt;
&lt;p&gt;You&apos;d assume AI/ML lives in the cloud, GPUs blazing, all-in. Nope. &lt;strong&gt;Only 41% of ML/AI professionals are cloud native.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The report points to one big culprit: heavy reliance on MLaaS, those managed services that hide the infrastructure from you completely.&lt;/p&gt;
&lt;p&gt;Here&apos;s the gap. AI models keep scaling like crazy. But the boring DevOps discipline — logs, versioning, deployments — tends to limp along behind.&lt;/p&gt;
&lt;p&gt;And that gap? That&apos;s the opportunity, queen. If you&apos;re in DevOps, SRE, or Platform Engineering, this is your moment to bring real engineering hygiene into MLOps. Actual pipelines. Versioned environments. Logs that exist. Managed clusters that someone owns.&lt;/p&gt;
&lt;h2&gt;Finding Number Three: What&apos;s really being used&lt;/h2&gt;
&lt;p&gt;The most-used cloud-native tech is not exotic. Not even a little. It&apos;s deeply, refreshingly boring:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;API gateways — &lt;strong&gt;50%&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Microservices — &lt;strong&gt;46%&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Kubernetes — &lt;strong&gt;28%&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Observability — &lt;strong&gt;28%&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notice anything? Observability (28%) just &lt;strong&gt;caught up to Kubernetes (28%)&lt;/strong&gt;. People finally clocked that “just running it” isn&apos;t the finish line. You have to &lt;strong&gt;see&lt;/strong&gt; what&apos;s happening too.&lt;/p&gt;
&lt;p&gt;Then there&apos;s service mesh. &lt;strong&gt;8%.&lt;/strong&gt; Eight percent, code cuties. The hype made it sound like 80.&lt;/p&gt;
&lt;p&gt;So no, the world is not living in “service mesh everywhere.” The world is living in:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;just give me a solid gateway, logs, and orchestration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Building a product for DevOps? Aim at this reality. Not at some super-exotic architecture almost nobody actually runs in prod.&lt;/p&gt;
&lt;h2&gt;What to do with this data&lt;/h2&gt;
&lt;p&gt;If you&apos;re an architect, a DevOps lead, or the person building the platform, here&apos;s what the report is really telling you.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Go backend- and DevOps-first.&lt;/strong&gt;
These two groups are the most cloud-native in the whole report. This is where IDPs, artifact repositories, and policy-as-code earn their keep.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Support hybrid.&lt;/strong&gt;
30% of all developers are on hybrid cloud, and 23% are multi-cloud. Your networking, secrets, and observability have to span everything. One provider is not the whole picture anymore.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Bring ML teams up to code.&lt;/strong&gt;
Got ML folks in-house? Give them the exact engineering hygiene your production teams already have. Versioned environments, pipelines, logs, clusters, proper deployments. The works.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Don&apos;t over-engineer.&lt;/strong&gt;
The mainstream stack is this: API gateways, microservices, Kubernetes, plus observability. It is not a universal service mesh draped over everything. It&apos;s mature, it&apos;s understandable, and you can actually ship on it and make money.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final verdict&lt;/h2&gt;
&lt;p&gt;Cloud native is now mainstream for backend and DevOps. AI is the one still playing catch-up.&lt;/p&gt;
&lt;p&gt;So how does this map to your world? Do these numbers match what you&apos;re seeing day to day, or is your stack heading somewhere totally different?&lt;/p&gt;
&lt;p&gt;Tell me in the comments, darling. I&apos;m genuinely curious how this data lands against real life.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Kubernetes</category><category>Cloud Computing</category><category>DevOps</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Amazon Q - The AI DevOps Tool That Fixes AWS Headaches</title><link>https://devops.pink/amazon-q-the-ai-devops-tool-that-fixes-aws-headaches/</link><guid isPermaLink="true">https://devops.pink/amazon-q-the-ai-devops-tool-that-fixes-aws-headaches/</guid><description>Amazon Q is AWS&apos;s AI assistant that helps DevOps engineers fix cloud issues faster with smart, context-aware insights and automation.</description><pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You know that feeling when something breaks in AWS and nobody can tell you why?&lt;/p&gt;
&lt;p&gt;Yeah. Today&apos;s post is about fixing that.&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;4Ke8eQWKfzs&quot;
title=&quot;Amazon Q - The AI DevOps Tool That Fixes AWS Headaches&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;Meet Amazon Q&lt;/h2&gt;
&lt;p&gt;An AI assistant, baked right into AWS. Marketed as your shiny new cloud teammate.&lt;/p&gt;
&lt;p&gt;But it&apos;s not here to chat, darling. It&apos;s here to actually help.&lt;/p&gt;
&lt;p&gt;Not “Hello, World.” More like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Why does your IAM keep blocking Lambda again?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It looks at your setup. Your permissions. Your whole infrastructure.&lt;/p&gt;
&lt;p&gt;Picture a senior AWS engineer trapped inside your console, and you get to say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Please explain why nothing works. Again.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And honestly? Sometimes it beats that coworker who answers three days later and still misses the point entirely.&lt;/p&gt;
&lt;h2&gt;How It Works in Real Life&lt;/h2&gt;
&lt;p&gt;Sounds lovely on paper. But what does it look like once you&apos;re actually in there?&lt;/p&gt;
&lt;p&gt;Here are a few moments anyone who&apos;s touched AWS will recognize instantly.&lt;/p&gt;
&lt;h3&gt;Example 1: The Silent Lambda&lt;/h3&gt;
&lt;p&gt;You try to run a Lambda. Nothing happens.&lt;/p&gt;
&lt;p&gt;No errors. No logs. Just silence.&lt;/p&gt;
&lt;p&gt;So you start guessing. Wrong trigger? Bad permissions? Who knows.&lt;/p&gt;
&lt;p&gt;Q checks your config, your IAM, your event sources, and comes back with:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Missing permission here. Add this - and you&apos;re good to go.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Example 2: Building a VPC&lt;/h3&gt;
&lt;p&gt;You want to spin up a VPC with NAT and two subnets.&lt;/p&gt;
&lt;p&gt;The usual cost: 30 minutes of Googling and a hundred lines of YAML-induced misery.&lt;/p&gt;
&lt;p&gt;Q just goes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Here&apos;s the template. One click - done.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Example 3: Route 53 DNS Setup&lt;/h3&gt;
&lt;p&gt;Now you need to configure DNS in Route 53.&lt;/p&gt;
&lt;p&gt;You open the console and suddenly it&apos;s day one in AWS all over again.&lt;/p&gt;
&lt;p&gt;Q won&apos;t bury you under 10 outdated forum links. It tells you what to do and why it matters, and it walks you through the steps. You&apos;ll still need to describe your setup, of course.&lt;/p&gt;
&lt;h2&gt;Who Amazon Q Helps&lt;/h2&gt;
&lt;p&gt;This isn&apos;t only for the people drowning in IAM configs or forgetting how to YAML for the fifth time today.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New to AWS? Q will explain where you got stuck, and why.&lt;/li&gt;
&lt;li&gt;Already experienced? It&apos;ll hand you back a couple of hours a day.&lt;/li&gt;
&lt;li&gt;Working in a team? Fewer sync calls. More releases. Way less pain.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Q&apos;s always got your back, sis.&lt;/p&gt;
&lt;h2&gt;ChatGPT vs Amazon Q&lt;/h2&gt;
&lt;p&gt;But what about ChatGPT? It knows everything too, right?&lt;/p&gt;
&lt;p&gt;Well, not your account. ChatGPT gives you theory. Q gives you context.&lt;/p&gt;
&lt;p&gt;Think of it as handing ChatGPT the keys to your AWS console and whispering:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Just don&apos;t break anything.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;A Few Things to Keep in Mind&lt;/h2&gt;
&lt;p&gt;A little reality check before you go all in, queen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Some features are still in Preview&lt;/li&gt;
&lt;li&gt;It&apos;s not available in every region yet, but it works in &lt;code&gt;us-east-1&lt;/code&gt;, &lt;code&gt;us-west-2&lt;/code&gt;, and &lt;code&gt;eu-central-1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Got a genuinely complex setup? You&apos;ll still need to get hands-on&lt;/li&gt;
&lt;li&gt;Living in Terraform or other IaC? Q shines in your editor or CLI, not just clicking around the console&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Here&apos;s the deal, code cuties.&lt;/p&gt;
&lt;p&gt;This is the first AI tool that genuinely helps DevOps engineers. Not with theory. With real, practical answers you can actually use.&lt;/p&gt;
&lt;p&gt;And not only for the folks who read AWS docs like bedtime stories. Q just gets things done.&lt;/p&gt;
&lt;p&gt;So now there&apos;s only one question left:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Will you try it - or keep debugging IAM on Saturdays?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Join the Conversation&lt;/h2&gt;
&lt;p&gt;Found this article helpful? Give it a share 😄&lt;/p&gt;
&lt;p&gt;Subscribe if you want more DevOps, cloud, and automation content, and come join our Discord (link&apos;s in the description).&lt;/p&gt;
&lt;p&gt;And tell me in the comments:&lt;br&gt;
&lt;strong&gt;What&apos;s the one AWS thing that always trips you up?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Maybe Q already knows how to fix it 😉&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>AI &amp; MLOps</category><category>AWS</category><category>DevOps</category><category>AI</category><category>Amazon Q</category><category>Cloud Computing</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Inside Helm - How Charts, Releases, and State Work in Kubernetes</title><link>https://devops.pink/inside-helm-how-charts-releases-and-state-work-in-kubernetes/</link><guid isPermaLink="true">https://devops.pink/inside-helm-how-charts-releases-and-state-work-in-kubernetes/</guid><description>Learn how Helm really works under the hood — charts, releases, and Kubernetes state management explained in plain DevOps language.</description><pubDate>Sun, 09 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Hey my DevOps queens (and kings, too)!&lt;/strong&gt; 👑&lt;/p&gt;
&lt;p&gt;Ever deployed an app to Kubernetes and then sat there thinking, “Wait… what actually happens after I type &lt;code&gt;helm install&lt;/code&gt;?” Yeah. This one&apos;s for you, sis.&lt;/p&gt;
&lt;p&gt;Helm makes Kubernetes deployments look easy. Too easy, honestly. Because behind the scenes it&apos;s doing way more than rendering a few YAML files. It&apos;s a &lt;strong&gt;stateful release manager&lt;/strong&gt;. It tracks every change you make, stores versioned state &lt;strong&gt;inside your cluster&lt;/strong&gt;, and handles upgrades like it actually knows what it&apos;s doing — and there&apos;s no external database anywhere in sight.&lt;/p&gt;
&lt;p&gt;So let&apos;s peek behind the curtain. How are charts put together? Where does your release data actually live? And how does Helm keep the whole thing consistent and versioned without breaking a sweat? Grab your coffee. 💅&lt;/p&gt;
&lt;h2&gt;What&apos;s Inside a Helm Chart&lt;/h2&gt;
&lt;p&gt;A Helm chart is a package. It describes how your app should land on Kubernetes, and it&apos;s structured and predictable. Do it right and it becomes gorgeously reusable, too.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Picture it as the blueprint for your app. You flex it through &lt;code&gt;values.yaml&lt;/code&gt;, and you can override the defaults at deploy time whenever you like.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; CRDs in the &lt;code&gt;crds/&lt;/code&gt; directory are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;installed &lt;strong&gt;first&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;not templated&lt;/strong&gt;,&lt;/li&gt;
&lt;li&gt;and &lt;strong&gt;never upgraded or deleted&lt;/strong&gt; — this protects existing Custom Resources and data.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What Actually Happens When You Run helm install&lt;/h2&gt;
&lt;p&gt;There&apos;s a sequence here, and it matters. Run &lt;code&gt;helm install&lt;/code&gt; and Helm doesn&apos;t just “apply some YAML.” It walks through clear steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Loads&lt;/strong&gt; the chart (local or remote).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Merges values&lt;/strong&gt; from multiple sources:
&lt;ul&gt;
&lt;li&gt;base &lt;code&gt;values.yaml&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;any additional files: &lt;code&gt;-f base.yaml -f prod.yaml&lt;/code&gt; (left-to-right; later overrides earlier);&lt;/li&gt;
&lt;li&gt;inline flags: &lt;code&gt;--set&lt;/code&gt;, &lt;code&gt;--set-string&lt;/code&gt;, &lt;code&gt;--set-file&lt;/code&gt;, &lt;code&gt;--set-json&lt;/code&gt; (these always take precedence).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Renders&lt;/strong&gt; Go templates into complete Kubernetes manifests.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Applies&lt;/strong&gt; them to the cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clean install? Helm just creates the resources. Easy.&lt;/p&gt;
&lt;p&gt;Things get a little more interesting if the resources already exist. When they carry the correct Helm annotations (&lt;code&gt;meta.helm.sh/*&lt;/code&gt;, &lt;code&gt;app.kubernetes.io/managed-by=Helm&lt;/code&gt;), Helm will happily &lt;em&gt;adopt&lt;/em&gt; them. If they don&apos;t, here&apos;s what you get:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error: invalid ownership metadata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;During &lt;strong&gt;upgrades&lt;/strong&gt; or &lt;strong&gt;rollbacks&lt;/strong&gt;, the story changes again. Helm runs a &lt;strong&gt;three-way strategic merge&lt;/strong&gt;, comparing the previous manifest, the new manifest, and the current cluster state. That whole comparison happens client-side, through &lt;code&gt;client-go&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Where Helm Stores Release State&lt;/h2&gt;
&lt;p&gt;Every Helm release lives &lt;strong&gt;inside your cluster&lt;/strong&gt;. No external DBs. No magic. Promise.&lt;/p&gt;
&lt;p&gt;By default, your release info goes into a Kubernetes &lt;strong&gt;Secret&lt;/strong&gt;. You can swap that out for a &lt;strong&gt;ConfigMap&lt;/strong&gt; or a &lt;strong&gt;SQL&lt;/strong&gt; driver (PostgreSQL) if you&apos;d rather.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Default object structure:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;kind: Secret
type: helm.sh/release.v1
metadata:
  name: sh.helm.release.v1.&amp;lt;release&amp;gt;.v&amp;lt;revision&amp;gt;
  namespace: &amp;lt;release-namespace&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, the &lt;code&gt;.data.release&lt;/code&gt; field. This is where the good stuff hides: a base64-encoded, gzip-compressed blob holding the &lt;strong&gt;chart archive&lt;/strong&gt;, the rendered manifests, your merged values, hooks, plus release metadata like revision, timestamps, and status.&lt;/p&gt;
&lt;p&gt;One quirk worth knowing. Kubernetes already base64-encodes Secret data, and the release payload also includes encoded sections of its own, so you end up with &lt;em&gt;nested encoding&lt;/em&gt;. Encoding inside encoding. Cute, in a confusing way.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Heads up:&lt;/strong&gt; etcd enforces a ~1 MiB limit for Secret data. Bump into this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Too long: must have at most 1048576 characters
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and it&apos;s time to switch to SQL storage:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export HELM_DRIVER=sql
export HELM_DRIVER_SQL_CONNECTION_STRING=postgresql://user:pass@host/db
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Labels and Annotations&lt;/h2&gt;
&lt;p&gt;Helm labels everything it touches so it can track ownership down to the detail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Added automatically:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;app.kubernetes.io/managed-by=Helm
meta.helm.sh/release-name=&amp;lt;release-name&amp;gt;
meta.helm.sh/release-namespace=&amp;lt;namespace&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Best-practice labels&lt;/strong&gt; (usually added by chart templates):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;app.kubernetes.io/instance=&amp;lt;release-name&amp;gt;
helm.sh/chart=&amp;lt;chart-name&amp;gt;-&amp;lt;version&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When these don&apos;t line up during an upgrade, Helm refuses to take ownership. And that, darling, is exactly where the classic &lt;code&gt;invalid ownership metadata&lt;/code&gt; error comes from.&lt;/p&gt;
&lt;h2&gt;What Is a Helm Release?&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;release&lt;/strong&gt; is one installed instance of a chart, with a specific set of values, living in a namespace.&lt;/p&gt;
&lt;p&gt;Every change you make becomes a &lt;strong&gt;new revision&lt;/strong&gt;. Install, upgrade, rollback, doesn&apos;t matter. Each one gets stored right there in your cluster. No external database. No API extension. Just plain old Kubernetes objects, quietly doing their job.&lt;/p&gt;
&lt;h2&gt;The Three-Way Merge Explained&lt;/h2&gt;
&lt;p&gt;Here&apos;s what Helm lines up side by side when you upgrade:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the &lt;strong&gt;previous&lt;/strong&gt; rendered manifest,&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;new&lt;/strong&gt; manifest (after your changes),&lt;/li&gt;
&lt;li&gt;the &lt;strong&gt;current live&lt;/strong&gt; resources.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From those three, it works out a &lt;strong&gt;three-way strategic merge patch&lt;/strong&gt; and applies only what actually changed. Less disruption that way, and your manual tweaks survive where they can.&lt;/p&gt;
&lt;p&gt;:::note
This logic runs &lt;strong&gt;client-side&lt;/strong&gt;, not via Server-Side Apply. For CRDs or unstructured resources, Kubernetes uses JSON merge-patch, which can behave slightly differently.
:::&lt;/p&gt;
&lt;h2&gt;Namespaces: Release vs Target&lt;/h2&gt;
&lt;p&gt;Helm splits namespaces into two flavors:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Release namespace&lt;/strong&gt; — where Helm stores its Secret or ConfigMap.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Target namespaces&lt;/strong&gt; — where chart resources are deployed (can be multiple).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--create-namespace&lt;/code&gt; only creates the &lt;strong&gt;release namespace&lt;/strong&gt; (the one you pass with &lt;code&gt;--namespace&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Got a chart that spreads across namespaces? Then create them yourself, or template them inside the chart.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Try not to hardcode &lt;code&gt;metadata.namespace&lt;/code&gt; unless you genuinely need to. Otherwise &lt;code&gt;helm template | kubectl apply&lt;/code&gt; might quietly shove your resources into &lt;code&gt;default&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Storage Drivers&lt;/h2&gt;
&lt;p&gt;Helm gives you a few backends for storing release state:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;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
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Managing Release History&lt;/h2&gt;
&lt;p&gt;Helm hangs onto &lt;strong&gt;all revisions&lt;/strong&gt; unless you tell it not to. So put a cap on it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;helm upgrade --history-max 10 ...
export HELM_MAX_HISTORY=10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Want to poke through the history? Anytime:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;helm history &amp;lt;release&amp;gt;
helm get values &amp;lt;release&amp;gt;
helm get manifest &amp;lt;release&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;Helm isn&apos;t magic. It&apos;s just clean engineering. Every time you fire off &lt;code&gt;helm install&lt;/code&gt;, it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;loads, merges, and renders templates,&lt;/li&gt;
&lt;li&gt;stores state inside your cluster,&lt;/li&gt;
&lt;li&gt;tags resources for ownership tracking,&lt;/li&gt;
&lt;li&gt;applies &lt;strong&gt;three-way strategic merges&lt;/strong&gt; on upgrade,&lt;/li&gt;
&lt;li&gt;manages revisions — all with &lt;strong&gt;zero external dependencies&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once the inner workings click for you, Helm stops feeling like a mystery box. It starts feeling like your favorite DevOps assistant. 💖&lt;/p&gt;
&lt;h2&gt;Quick Debug Tip&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;helm ls -A
kubectl get secrets -A -l &quot;owner=helm&quot; -l &quot;status=deployed&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Great for a fast audit, or just snooping on what Helm&apos;s been up to lately.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Kubernetes</category><category>Helm</category><category>DevOps</category><category>IaC</category><category>Cloud Native</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Git Merge Conflicts for Beginners - What to Do When Your Branches Have Beef</title><link>https://devops.pink/git-merge-conflicts-for-beginners-what-to-do-when-your-branches-have-beef/</link><guid isPermaLink="true">https://devops.pink/git-merge-conflicts-for-beginners-what-to-do-when-your-branches-have-beef/</guid><description>Learn how to fix Git merge conflicts step-by-step. A fun, beginner-friendly guide to resolving and avoiding conflict errors in your branches.</description><pubDate>Mon, 14 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey queens! ✨&lt;/p&gt;
&lt;p&gt;Okay, picture it. You&apos;ve been grinding for days on a sick new feature, tucked away in your own cozy little branch. The code is flawless. Everything works. And you&apos;re finally ready to share your masterpiece with the world (or, you know, the main branch). So you proudly type out that magic &lt;code&gt;git merge&lt;/code&gt; command and… oops! 😬&lt;/p&gt;
&lt;p&gt;Git literally screams at you: &quot;CONFLICT! I have no idea what to keep!&quot;
Sound familiar? Your first instinct is full panic mode. You want to slam the laptop shut and pretend none of it ever happened. But hold on. Don&apos;t freak out. We&apos;re gonna walk through this together, and I&apos;ll spill all the tea.&lt;/p&gt;
&lt;h2&gt;Wait, What Even Is &lt;code&gt;git merge&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;Here&apos;s the deal. When you work on a project, you create branches, which are basically parallel universes for your code. Whatever you want to try, you try it in your own branch, no harm to the main project. It&apos;s your personal creative space.&lt;/p&gt;
&lt;p&gt;And &lt;code&gt;git merge&lt;/code&gt; is the command that drags your little universe back into the main timeline.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout main
git merge feature/new-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s literally you telling Git, &quot;Hey, take all the awesome stuff I built in &lt;code&gt;feature/new-login&lt;/code&gt; and add it to the main branch, please!&quot;&lt;/p&gt;
&lt;h2&gt;When It&apos;s a Buttery-Smooth Ride&lt;/h2&gt;
&lt;h3&gt;(The Fast-Forward Merge)&lt;/h3&gt;
&lt;p&gt;Say you and your teammates were touching totally different files. Git is a genius about it. It just combines everything on its own and you barely notice. Pure magic! ✨&lt;/p&gt;
&lt;p&gt;The technical name for this is a &lt;strong&gt;Fast-Forward Merge&lt;/strong&gt;. It kicks in when the &lt;code&gt;main&lt;/code&gt; branch hasn&apos;t picked up any new commits since you branched off. Git simply &quot;fast-forwards&quot; the main pointer so it includes all your shiny new commits. Easy.&lt;/p&gt;
&lt;p&gt;Now, sometimes a dev wants a cleaner history, so they force Git to tie a little merge &quot;knot&quot; even when a fast-forward was totally possible. You do that like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git merge --no-ff feature/new-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;…and it leaves a cute little note in the project history that says, &quot;This feature was merged right here.&quot;&lt;/p&gt;
&lt;h2&gt;When Git Has a Meltdown (aka a Conflict)&lt;/h2&gt;
&lt;p&gt;So here&apos;s where the drama starts. A conflict pops up when you and someone else (or, honestly, past-you on a different branch) edited the exact same line of code in two different ways. Git gets overwhelmed. It stares at both versions and just cannot pick a winner. It&apos;s basically looking at you like, &quot;OMG, girl, I can&apos;t decide. You have to choose!&quot;&lt;/p&gt;
&lt;h2&gt;What This Hot Mess Looks Like in Your Code&lt;/h2&gt;
&lt;p&gt;You open the file, and boom — Git greets you with something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
The version of the code from the main branch
=======
The version of the code from your new feature/new-login branch
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature/new-login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Don&apos;t panic!&lt;/p&gt;
&lt;p&gt;This isn&apos;t an error. It&apos;s Git&apos;s way of saying:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&quot;Hey, I found two different versions of this code and I don&apos;t know which one to keep. Can you help me out?&quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Those weird lines actually mean something. Here&apos;s the breakdown:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD&lt;/code&gt;&lt;/strong&gt; - This is what&apos;s currently in your &lt;code&gt;main&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;=======&lt;/code&gt;&lt;/strong&gt; - This line separates the two versions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature/new-login&lt;/code&gt;&lt;/strong&gt; - And this is the version coming from your branch.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Okay, So How Do I Fix This? A Step-by-Step Guide!&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Breathe!&lt;/strong&gt; You&apos;ve got this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analyze the code.&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edit the file.&lt;/strong&gt; Just delete the code you don&apos;t want and leave only the code that should be there.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delete the markers.&lt;/strong&gt; You have to get rid of the &lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&lt;/code&gt;, &lt;code&gt;=======&lt;/code&gt;, and &lt;code&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&lt;/code&gt; lines. They&apos;ve served their purpose.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Save the file.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And that&apos;s it! The conflict in the code is officially resolved.&lt;/p&gt;
&lt;h2&gt;The Final Steps: Letting Git Know You&apos;re a Genius&lt;/h2&gt;
&lt;p&gt;Now you just have to tell Git you&apos;ve handled it and everything is okay:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tell Git you&apos;ve resolved the conflict in this file&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git add &amp;lt;filename&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Finalize the merge with a commit&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Git usually pops up a pre-written commit message for you. Honestly? Just use that one. No notes.&lt;/p&gt;
&lt;p&gt;And you&apos;re done! The merge is complete, and your amazing new feature is safe and sound in the main branch! 🎉&lt;/p&gt;
&lt;h2&gt;SOS! What If I Messed Everything Up?&lt;/h2&gt;
&lt;p&gt;Maybe you started fixing a conflict and suddenly realized you&apos;re in way over your head. Don&apos;t worry, sis. There&apos;s an escape button:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git merge --abort
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This one cancels the merge completely, like it never even happened. Your project snaps right back to how it was before you started. Take a breath. Try again when you&apos;re ready.&lt;/p&gt;
&lt;h2&gt;How to Vibe with merge and Avoid Conflicts&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Always stay updated!&lt;/strong&gt; Before you start a new feature, update your &lt;strong&gt;main&lt;/strong&gt; branch first. The safest move is a little two-step: run &lt;strong&gt;git fetch&lt;/strong&gt; (this just downloads the latest changes without touching your code) and then &lt;strong&gt;git merge origin/main&lt;/strong&gt; (this applies those changes). It seriously lowers your odds of a conflict.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stay in your own lane.&lt;/strong&gt; When you can, try to work on different files than your teammates.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Communicate!&lt;/strong&gt; This is the big one, queen. Actually talk to your team about who&apos;s working on what. A good convo is the secret to a conflict-free life.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;The Takeaway&lt;/h2&gt;
&lt;p&gt;Git conflicts are not the end of the world. They&apos;re normal. Super normal. They don&apos;t mean you&apos;re a bad developer, not even a little. It&apos;s literally just Git going, &quot;Hey! I&apos;ve got two different things here—can you help me choose?&quot;&lt;/p&gt;
&lt;p&gt;And now? You know exactly how to help. You&apos;re already one step closer to feeling like a total pro in Git.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep coding, girl! You&apos;re killing it! 💖&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Git</category><category>Version Control</category><category>Troubleshooting</category><category>Beginners</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Git Branches - How to Not Break Prod and Stay Alive</title><link>https://devops.pink/git-branches-how-to-not-break-prod-and-stay-alive/</link><guid isPermaLink="true">https://devops.pink/git-branches-how-to-not-break-prod-and-stay-alive/</guid><description>Learn Git branches the modern way. A clear 2025 guide to branching, merging, rebasing, and collaborating—without breaking production.</description><pubDate>Mon, 16 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey queens. You&apos;re building stuff. Pushing code. Shipping features.&lt;/p&gt;
&lt;p&gt;And then someone says:&lt;/p&gt;
&lt;p&gt;“Just create a branch for that.”&lt;/p&gt;
&lt;p&gt;Wait — a what?&lt;/p&gt;
&lt;p&gt;Real talk: Git can feel like sorcery at first. Branches? Rebases? Merge commits? Upstream what?&lt;/p&gt;
&lt;p&gt;But here&apos;s the truth:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Branches are not scary.&lt;/strong&gt; They&apos;re your safety net. Your creative zone. Your undo button.&lt;/p&gt;
&lt;p&gt;They let you try bold things without risking production.&lt;/p&gt;
&lt;p&gt;They help teams build fast — and stay sane.&lt;/p&gt;
&lt;p&gt;This guide breaks it down, step by step.&lt;/p&gt;
&lt;p&gt;No buzzwords. No hand-waving. Just real Git, the way developers actually use it in 2025.&lt;/p&gt;
&lt;p&gt;Let&apos;s start from the core idea — what even is a branch?&lt;/p&gt;
&lt;h2&gt;What&apos;s a Branch, Really?&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;branch&lt;/strong&gt; is a pointer (a variable) that references a commit.&lt;/p&gt;
&lt;p&gt;In practice, it&apos;s a parallel version of your codebase where you can work safely — nothing affects &lt;code&gt;main&lt;/code&gt; until you decide it&apos;s ready.&lt;/p&gt;
&lt;p&gt;Branches give you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;freedom to experiment,&lt;/li&gt;
&lt;li&gt;a clean commit history,&lt;/li&gt;
&lt;li&gt;protection from disaster,&lt;/li&gt;
&lt;li&gt;and a solid setup for teamwork.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How to Work with Branches - Step by Step&lt;/h2&gt;
&lt;h3&gt;1. Create a New Branch and Switch to It&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Modern way (Git ≥ 2.23):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git switch -c feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;switch&lt;/code&gt; is a modern, more readable alternative to &lt;code&gt;checkout&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-c&lt;/code&gt; means “create a new branch.”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Classic way (still valid):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git checkout -b feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧭 &lt;strong&gt;Tip:&lt;/strong&gt; Use meaningful, kebab-case names with prefixes like: &lt;code&gt;feature/signup&lt;/code&gt;, &lt;code&gt;bugfix/fix-login&lt;/code&gt;, &lt;code&gt;hotfix/crash-on-submit&lt;/code&gt;, &lt;code&gt;release/v1.3.0&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;2. Do Some Work: Commit &amp;amp; Push&lt;/h3&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo &quot;Sign-up logic&quot; &amp;gt; signup.js
git add signup.js
git commit -m &quot;Add sign-up logic&quot;
git push -u origin feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-u&lt;/code&gt; sets the upstream branch so future &lt;code&gt;git push&lt;/code&gt; and &lt;code&gt;git pull&lt;/code&gt; work without arguments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📌 After this, you can simply use &lt;code&gt;git push&lt;/code&gt; and &lt;code&gt;git pull&lt;/code&gt; without specifying branch names.&lt;/p&gt;
&lt;h3&gt;3. See What Branch You&apos;re In&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;The current branch is marked with a &lt;code&gt;*&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To create a branch without switching:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch feature/experiment
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📌 Quick jump back to the previous branch:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git switch -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Super handy when jumping between &lt;code&gt;main&lt;/code&gt; and a feature branch.&lt;/p&gt;
&lt;h3&gt;4. Switch Back to main and Update It&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git switch main
git pull --ff-only origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧭 &lt;strong&gt;Important:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run this from the &lt;code&gt;main&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;If you have local commits, Git will stop politely — preventing accidental overwrites.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. Merge Your Branch into main&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Standard merge:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git merge feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If &lt;code&gt;main&lt;/code&gt; hasn&apos;t changed since you branched off, Git performs a fast-forward — just moves the pointer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Want to preserve a visible merge commit?&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git merge --no-ff feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧭 Great for tracking feature branches in project history or pull requests.&lt;/p&gt;
&lt;h3&gt;6. Handling Merge Conflicts&lt;/h3&gt;
&lt;p&gt;If Git reports a conflict:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Open the file and look for:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD
code from main
=======
code from your branch
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Manually fix the file.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Stage the resolved file:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git add filename
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If a real merge happened (not fast-forward), finish with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git commit
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;💡 If it was fast-forward, Git already did everything — no commit needed.&lt;/p&gt;
&lt;h3&gt;7. Delete the Branch&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Locally:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch -d feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If the branch hasn&apos;t been merged yet, use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git branch -D feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Remotely:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git push origin --delete feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📌 An alternative is:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git push origin :feature/signup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;—but it&apos;s less readable.&lt;/p&gt;
&lt;h3&gt;8. View Branch History Visually&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git log --oneline --graph --decorate --all
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This shows your full commit tree, across all branches — clean and visual.&lt;/p&gt;
&lt;h2&gt;Merge vs Rebase: When and Why&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;merge&lt;/code&gt; preserves full history and creates a merge commit.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rebase&lt;/code&gt; rewrites your branch history to make it look like you started from the latest &lt;code&gt;main&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To rebase:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git fetch origin
git rebase origin/main
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧭 &lt;strong&gt;Only rebase private branches.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If someone else has pulled your branch — do not rebase unless the team agrees.&lt;/p&gt;
&lt;p&gt;If you must force-push after a rebase, never use &lt;code&gt;--force&lt;/code&gt; directly. Use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git push --force-with-lease
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ This makes Git check that nobody has pushed since your last pull — safer for teams.&lt;/p&gt;
&lt;h2&gt;Suggested Team Workflow&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Start a feature branch from &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git switch -c feature/add-login
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Work, commit, push:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git push -u origin feature/add-login
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Open a pull request on GitHub/GitLab for review and CI checks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Once approved, merge it — ideally with &lt;code&gt;--no-ff&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Delete the branch locally and on the remote.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Keep &lt;code&gt;main&lt;/code&gt; clean and always production-ready.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Working with Remotes&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Task&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Push and set upstream&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push -u origin feature/branch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pull updates with rebase&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git pull --rebase origin main&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete branch on remote&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push origin --delete feature/branch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean up remote branch refs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git fetch --prune&lt;/code&gt; or &lt;code&gt;git remote prune origin&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safe force-push after rebase&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push --force-with-lease&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;📌 Make pruning automatic:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git config --global fetch.prune true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📌 Make rebase your default pull strategy:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git config --global pull.rebase true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or do it manually per pull:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;git pull --rebase
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Keeps your history linear and avoids noisy merge commits.&lt;/p&gt;
&lt;h2&gt;Command Cheat Sheet&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Action&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Command&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Create + switch to new branch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git switch -c feature/branch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Switch branches&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git switch branch-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Create branch without switching&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git branch branch-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;See all branches&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git branch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jump to previous branch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git switch -&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update main before merge&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git switch main &amp;amp;&amp;amp; git pull --ff-only origin main&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge branch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git merge feature/branch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merge with visible history&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git merge --no-ff feature/branch&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rebase feature onto latest main&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git rebase origin/main&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete local branch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git branch -d branch-name&lt;/code&gt; or &lt;code&gt;-D&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete remote branch&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push origin --delete branch-name&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visualize all history&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git log --oneline --graph --decorate --all&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Safe force-push after rebase&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git push --force-with-lease&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clean deleted remotes automatically&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git config --global fetch.prune true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use rebase by default on pull&lt;/td&gt;
&lt;td&gt;&lt;code&gt;git config --global pull.rebase true&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Best Practices (And Why They Matter)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;One branch per task&lt;/strong&gt;&lt;br&gt;
Keeps changes isolated, focused, and easy to review.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use clear, consistent naming&lt;/strong&gt;&lt;br&gt;
Prefixes like &lt;code&gt;feature/&lt;/code&gt;, &lt;code&gt;fix/&lt;/code&gt;, &lt;code&gt;release/&lt;/code&gt; help.&lt;br&gt;
Use lowercase + hyphens: &lt;code&gt;feature/add-login&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Use pull requests&lt;/strong&gt;&lt;br&gt;
Code reviews, CI checks, and visibility improve code quality.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Avoid &lt;code&gt;--force&lt;/code&gt; — use &lt;code&gt;--force-with-lease&lt;/code&gt;&lt;br&gt;
Don&apos;t overwrite others&apos; work by mistake.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clean up your branches&lt;/strong&gt;&lt;br&gt;
Remove them when they&apos;re done — both locally and on remote.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Only rebase private branches&lt;/strong&gt;&lt;br&gt;
Never rewrite history others rely on.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Git branches aren&apos;t just a tool — they&apos;re a mindset.&lt;/p&gt;
&lt;p&gt;They give you a safe space to build, break, and experiment — without breaking production.&lt;/p&gt;
&lt;p&gt;With branches, you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;isolate ideas,&lt;/li&gt;
&lt;li&gt;collaborate without chaos,&lt;/li&gt;
&lt;li&gt;and build with confidence.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Branch = creativity&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Main = stability&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;You = the developer who keeps both in harmony.&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Git</category><category>Version Control</category><category>Best Practices</category><category>Development</category><category>GitOps</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Docker MCP - How GPT Agents Now Use Slack, GitHub, Stripe &amp; More</title><link>https://devops.pink/docker-mcp-how-gpt-agents-now-use-slack-github-stripe-and-more/</link><guid isPermaLink="true">https://devops.pink/docker-mcp-how-gpt-agents-now-use-slack-github-stripe-and-more/</guid><description>Learn how Docker and MCP let GPT agents use tools like Slack, GitHub, and Stripe — turning AI from smart talkers into real-world doers.</description><pubDate>Mon, 09 Jun 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;So here&apos;s the story I want to tell you, darling. It&apos;s about how models like GPT and Claude stopped just talking, and started actually doing things.&lt;/p&gt;
&lt;p&gt;Think of it as them &lt;strong&gt;getting hands&lt;/strong&gt;. By “hands,” I mean &lt;strong&gt;agents&lt;/strong&gt;: little helper programs that let the model reach out and trigger real-world tools.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;send a message in Slack,&lt;/li&gt;
&lt;li&gt;check a payment in Stripe,&lt;/li&gt;
&lt;li&gt;or open a pull request on GitHub.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No magic involved. Just &lt;strong&gt;MCP&lt;/strong&gt;, an open standard called the &lt;a href=&quot;https://www.anthropic.com/news/model-context-protocol&quot;&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It hands language models one consistent, secure way to talk to outside tools. APIs, databases, cloud services, all of it.&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;YwURFI88sq0&quot;
title=&quot;Docker MCP - How GPT Agents Now Use Slack, GitHub, Stripe &amp;amp; More&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;The Challenge: Why This Was Hard&lt;/h2&gt;
&lt;p&gt;Getting here wasn&apos;t easy, though.&lt;/p&gt;
&lt;p&gt;So let me walk you through what made it such a pain originally, how the whole thing works now, and where Docker comes in to keep everything tidy, isolated, and easy to ship.&lt;/p&gt;
&lt;p&gt;Here&apos;s the thing. AI has always been a brilliant advisor. It writes code. It hunts down bugs. It&apos;ll even whip up a poem when you&apos;re having a rough day, queen.&lt;/p&gt;
&lt;p&gt;But the second you asked it something basic, like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Hey, can you post in Slack that the task is done?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It would just blink at you and go:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Uh… I&apos;d love to, but I&apos;m just a language model. I can talk — but I can&apos;t do.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And honestly? Fair. It&apos;s smart. It just couldn&apos;t act on its own.&lt;/p&gt;
&lt;p&gt;The brain was all there. Logic, knowledge, reasoning that actually made sense.&lt;/p&gt;
&lt;p&gt;Actually &lt;strong&gt;taking action&lt;/strong&gt;, though? Never made it into the job description.&lt;/p&gt;
&lt;h2&gt;Enter Agents (a.k.a. Hands for Models)&lt;/h2&gt;
&lt;p&gt;To close that gap, developers started handing models a way to act. They wired them up to small helper services called &lt;strong&gt;agents&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In MCP, we call these &lt;strong&gt;MCP servers&lt;/strong&gt;. And the app that connects the model to those servers? That&apos;s the &lt;strong&gt;host&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;How It Works, Step by Step&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;The model says what it wants to do, like “Send this message to Slack.”&lt;/li&gt;
&lt;li&gt;The host takes that request and passes it to the right MCP server.&lt;/li&gt;
&lt;li&gt;The MCP server performs the action. Sends the message, makes the API call, whatever.&lt;/li&gt;
&lt;li&gt;The host takes the result and gives it back to the model, so it can finish its reply.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Simple&lt;/strong&gt;: the brain thinks, the hands act, and MCP is the cable running between them.&lt;/p&gt;
&lt;h2&gt;The Catch: Why It Was a Headache&lt;/h2&gt;
&lt;p&gt;For the longest time, setting all this up was… &lt;strong&gt;painful&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;On paper, gorgeous. In real life? A full hacker quest, sis.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You had to spin up MCP servers manually.&lt;/li&gt;
&lt;li&gt;Each agent dragged in its own messy stack. Python, Node, Chromium. Conflict city.&lt;/li&gt;
&lt;li&gt;API keys? Sitting there in raw JSON. Easy to use, terrifying to babysit.&lt;/li&gt;
&lt;li&gt;And running two or three agents at once? Oh, brace yourself.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All you wanted was to check a Stripe payment. Suddenly you&apos;re knee-deep in DIY DevOps.&lt;/p&gt;
&lt;h2&gt;And That&apos;s Where Docker Comes In&lt;/h2&gt;
&lt;p&gt;It made launching MCP agents simple, consistent, and actually reliable.&lt;/p&gt;
&lt;p&gt;Picture it. Your AI finally gets hands, but you really don&apos;t want those hands rummaging around your system.&lt;/p&gt;
&lt;p&gt;Docker hands them &lt;strong&gt;gloves&lt;/strong&gt;. Clean, contained, safe.&lt;/p&gt;
&lt;p&gt;The model still gets to act freely. The boundaries just don&apos;t move.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each agent runs in its own container&lt;/li&gt;
&lt;li&gt;It only sees what you allow&lt;/li&gt;
&lt;li&gt;No mess in your system&lt;/li&gt;
&lt;li&gt;No library conflicts&lt;/li&gt;
&lt;li&gt;And no “whoops, I just deleted my desktop”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;So What&apos;s Changed?&lt;/h2&gt;
&lt;p&gt;Docker now ships with the &lt;strong&gt;MCP Toolkit&lt;/strong&gt;. And with it comes an official catalog of &lt;strong&gt;over 100 ready-to-go agents&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Open Docker Desktop, click into the MCP Toolkit tab, and there they are. Ready to go.&lt;/p&gt;
&lt;p&gt;Go browse the full &lt;a href=&quot;https://www.docker.com/products/mcp-catalog-and-toolkit/&quot;&gt;Docker MCP Toolkit&lt;/a&gt; and poke around the &lt;a href=&quot;https://hub.docker.com/catalogs/mcp&quot;&gt;MCP Servers on Docker Hub&lt;/a&gt;. That&apos;s over 100 officially supported tools you can launch in seconds.&lt;/p&gt;
&lt;h3&gt;What Happens When You Use an Agent?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;You pick an agent image, let&apos;s say GitHub&lt;/li&gt;
&lt;li&gt;Docker spins up a container&lt;/li&gt;
&lt;li&gt;The agent starts listening for commands from the model&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&apos;s the whole thing. No console gymnastics, code cuties.&lt;/p&gt;
&lt;h2&gt;Solving the Duplicated Agent Problem&lt;/h2&gt;
&lt;p&gt;Back in the day, running multiple apps was rough. Claude, VS Code, whatever you had open, none of them knew the agent was already running. So each one fired up its own copy.&lt;/p&gt;
&lt;p&gt;Which got... &lt;strong&gt;messy&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two containers doing the same job&lt;/li&gt;
&lt;li&gt;Two access tokens&lt;/li&gt;
&lt;li&gt;Two network connections&lt;/li&gt;
&lt;li&gt;And a whole pile of wasted resources&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Clunky. Risky. Pointless, really.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now?&lt;/strong&gt; One agent. One container.&lt;/p&gt;
&lt;p&gt;Tons of clients can connect to that single one. No duplication, no conflicts, nothing extra dragging along.&lt;/p&gt;
&lt;h2&gt;But Is It Safe?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Yes. Here&apos;s why.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Agents live inside isolated Docker containers. Every container gives you a clean, controlled little environment.&lt;/p&gt;
&lt;p&gt;The agent only sees what you choose to share with it: folders, environment variables, network access. Isolation is the default, not something you opt into. Docker draws a hard boundary around your agent, so a mistake or a bug or even a compromised tool can&apos;t wander into your system.&lt;/p&gt;
&lt;p&gt;That said, like with any software, it pays to peek under the hood and see what it&apos;s actually doing.&lt;/p&gt;
&lt;p&gt;Stick with well-maintained agents, follow the usual best practices, and you&apos;ll be just fine.&lt;/p&gt;
&lt;p&gt;And yes, like any powerful tool, you can switch the safety off if you really want to.&lt;/p&gt;
&lt;p&gt;Add &lt;code&gt;--privileged&lt;/code&gt;, or mount the Docker socket, and that boundary is gone. But leave the defaults alone, and Docker handles the hard parts for you.&lt;/p&gt;
&lt;h2&gt;Who Is This For?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;You&apos;re already on GPT, Claude, or Copilot, and you want them to actually &lt;strong&gt;do stuff&lt;/strong&gt;, not just write about it&lt;/li&gt;
&lt;li&gt;You&apos;re in DevOps, and you&apos;re sick of scripting the same tools again and again&lt;/li&gt;
&lt;li&gt;You&apos;re a product person, and you want AI wired into Jira, GitHub, Stripe, or whatever, in &lt;strong&gt;10 minutes flat&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What You Actually Get&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;An agent up and running in a couple of minutes&lt;/li&gt;
&lt;li&gt;Isolation and safety baked right in&lt;/li&gt;
&lt;li&gt;And when you want to scale up? Just add more agents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&apos;s it. That&apos;s the whole trick.&lt;/p&gt;
&lt;p&gt;Thanks for reading! Be sure to watch the &lt;a href=&quot;https://youtu.be/YwURFI88sq0&quot;&gt;video version&lt;/a&gt; for extra insights and helpful visuals.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>AI &amp; MLOps</category><category>Docker</category><category>AI</category><category>AI Agents</category><category>MCP</category><category>GPT</category><category>Automation</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Kubernetes on Your Laptop — No Cloud, No Boring Docs, Just Magic</title><link>https://devops.pink/kubernetes-on-your-laptop-no-cloud-no-boring-docs-just-magic/</link><guid isPermaLink="true">https://devops.pink/kubernetes-on-your-laptop-no-cloud-no-boring-docs-just-magic/</guid><description>Kubernetes tutorial for beginners. Learn to run a full local cluster with Docker, Minikube, YAML, Pods, Deployments, Secrets — no cloud needed.</description><pubDate>Thu, 29 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey there, tech goddess (or just someone who&apos;s allergic to boring docs 👀)&lt;/p&gt;
&lt;p&gt;You&apos;ve probably heard of Kubernetes, but every tutorial starts with “cluster,” “orchestration,” and “in the cloud”?&lt;/p&gt;
&lt;p&gt;😩 No thanks.&lt;/p&gt;
&lt;p&gt;But what if I told you that you could launch your &lt;strong&gt;own website in Kubernetes, right on your laptop&lt;/strong&gt;, set up environment variables, pass in secrets — step by step, no AWS, no tears, no PhD required?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docker, Minikube, kubectl, Pod, Deployment, ConfigMap, Secret — all of it. I&apos;ll walk you through everything.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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&apos;s do some hands-on magic.&lt;/p&gt;
&lt;p&gt;No AWS, no signups, no credit cards — just you, your laptop, and your curiosity. 🚀&lt;/p&gt;
&lt;h2&gt;Step 1 — Installing Docker (and figuring out why you even need it)&lt;/h2&gt;
&lt;h3&gt;Scene 1: &quot;What even is Docker?&quot;&lt;/h3&gt;
&lt;p&gt;Imagine you&apos;re trying to run an app. It works perfectly for your friend on Windows, but not for you on a Mac. She&apos;s on Windows, you&apos;re on a Mac.
It needs a bunch of libraries you don&apos;t have.&lt;/p&gt;
&lt;p&gt;🎯 The fix? A &lt;strong&gt;container&lt;/strong&gt; — a self-contained package that already includes everything the app needs.&lt;/p&gt;
&lt;p&gt;🧳 A container = a suitcase with code, tools, and everything else bundled in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docker&lt;/strong&gt; is the program that runs those suitcases — right on your machine.&lt;/p&gt;
&lt;h3&gt;Scene 2: &quot;Download and install Docker&quot;&lt;/h3&gt;
&lt;p&gt;📝 &lt;strong&gt;Do this:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to 👉 https://www.docker.com/products/docker-desktop&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Docker Desktop for macOS&lt;/strong&gt; (or your OS).&lt;/li&gt;
&lt;li&gt;Download the installer.&lt;/li&gt;
&lt;li&gt;Install like any other app: drag the Docker icon into your &lt;code&gt;Applications&lt;/code&gt; folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;📌 Once it&apos;s installed — &lt;strong&gt;launch Docker Desktop&lt;/strong&gt; (via Spotlight or Launchpad).&lt;/p&gt;
&lt;h3&gt;Quick check: is Docker working?&lt;/h3&gt;
&lt;p&gt;🔧 &lt;strong&gt;Open Terminal&lt;/strong&gt; (&lt;code&gt;Cmd + Space&lt;/code&gt;, type “Terminal”).&lt;/p&gt;
&lt;p&gt;Run this command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash docker --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Docker version 24.0.2, build abc123
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That means Docker is installed!&lt;/p&gt;
&lt;p&gt;Next, run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker ps
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If Docker is running, you&apos;ll see an &lt;strong&gt;empty table&lt;/strong&gt;, like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&apos;s totally fine — it just means &lt;strong&gt;no containers are running yet&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;😱 &lt;strong&gt;If Docker doesn&apos;t start or &lt;code&gt;docker ps&lt;/code&gt; throws an error:&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🧨 What&apos;s happening&lt;/th&gt;
&lt;th&gt;💡 Try this&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;docker ps&lt;/code&gt; doesn&apos;t work&lt;/td&gt;
&lt;td&gt;Make sure &lt;strong&gt;Docker Desktop is running&lt;/strong&gt; — look for the 🐳 icon in your top menu bar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Command not found&lt;/td&gt;
&lt;td&gt;Restart your &lt;strong&gt;Terminal&lt;/strong&gt; or &lt;strong&gt;reboot your machine&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker launched, but nothing&apos;s happening&lt;/td&gt;
&lt;td&gt;The first launch can take a couple of minutes — be patient&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It&apos;s asking for permissions&lt;/td&gt;
&lt;td&gt;Check if macOS is waiting for you to approve something — a pop-up might be hiding behind other windows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Why does this matter?&lt;/h3&gt;
&lt;p&gt;We&apos;ll be launching our &lt;strong&gt;Kubernetes cluster using Minikube&lt;/strong&gt;, and Minikube runs containers under the hood.&lt;/p&gt;
&lt;p&gt;No Docker = no cluster = no “Hello, Pod.” 😬&lt;/p&gt;
&lt;p&gt;✅ TL;DR — You&apos;re ready to move on if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You installed Docker Desktop&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker --version&lt;/code&gt; works&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker ps&lt;/code&gt; shows an empty table (and no errors)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If all that&apos;s good — &lt;strong&gt;let&apos;s install Kubernetes (via Minikube)!&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Step 2 — Installing Minikube &amp;amp; kubectl (and launching your first cluster!)&lt;/h2&gt;
&lt;h3&gt;Scene 1: “What are Minikube and kubectl?”&lt;/h3&gt;
&lt;p&gt;🛠 &lt;strong&gt;Minikube&lt;/strong&gt; is like a mini version of Kubernetes you can run &lt;em&gt;right on your laptop&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;That means: no server, no cloud, no AWS, no mystical cluster setup — Minikube spins it all up locally.&lt;/p&gt;
&lt;p&gt;🎮 &lt;strong&gt;kubectl&lt;/strong&gt; (say “cube control” or “kube cuddle”) is your &lt;strong&gt;remote control&lt;/strong&gt; for that cluster.&lt;/p&gt;
&lt;p&gt;You&apos;ll use &lt;code&gt;kubectl&lt;/code&gt; to create pods, check logs, update apps — basically, run the show.&lt;/p&gt;
&lt;h3&gt;Scene 2: Install kubectl and Minikube&lt;/h3&gt;
&lt;p&gt;📝 &lt;strong&gt;If you&apos;re on a Mac:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Open Terminal and run these one by one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install kubectl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install minikube
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🧘‍♀️ Take a moment, let Homebrew do its magic.&lt;/p&gt;
&lt;h3&gt;Scene 3: Start the cluster&lt;/h3&gt;
&lt;p&gt;Once it&apos;s installed, fire up your mini-cluster:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;minikube start --driver=docker
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;💡 What&apos;s happening here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes is starting &lt;em&gt;inside&lt;/em&gt; Docker (which you set up in Step 1).&lt;/li&gt;
&lt;li&gt;Minikube creates a “virtual machine” running your cluster.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;⏱ This may take 1-2 minutes, so... deep breath.&lt;/p&gt;
&lt;h3&gt;Check if everything&apos;s working&lt;/h3&gt;
&lt;p&gt;Run this command:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📋 You should see something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 1m v1.29.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you see &lt;code&gt;STATUS: Ready&lt;/code&gt; - &lt;strong&gt;congrats!&lt;/strong&gt; 🎉&lt;/p&gt;
&lt;p&gt;Your first cluster is up. You literally just spun up your own infrastructure.&lt;/p&gt;
&lt;p&gt;:::note
Minikube runs a &lt;strong&gt;single-node cluster -&lt;/strong&gt; perfect for learning and testing, but &lt;strong&gt;not meant for production&lt;/strong&gt;. And that&apos;s totally fine — we&apos;re here to get hands-on, not deploy Netflix.
:::&lt;/p&gt;
&lt;h3&gt;If something goes wrong - don&apos;t panic!&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🔥 Problem&lt;/th&gt;
&lt;th&gt;💡 What to check&lt;/th&gt;
&lt;th&gt;🛠 Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kubectl&lt;/code&gt; not recognized&lt;/td&gt;
&lt;td&gt;Did the install finish cleanly? Try restarting your terminal.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minikube&lt;/code&gt; won&apos;t start&lt;/td&gt;
&lt;td&gt;Is &lt;strong&gt;Docker Desktop&lt;/strong&gt; running? Look for the 🐳 icon.&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;minikube start&lt;/code&gt; just hangs&lt;/td&gt;
&lt;td&gt;Try restarting Docker, rebooting, and make sure you&apos;ve got at least &lt;strong&gt;4 GB of free RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kubectl get nodes&lt;/code&gt; shows nothing&lt;/td&gt;
&lt;td&gt;Check if the cluster is running&lt;/td&gt;
&lt;td&gt;&lt;code&gt;minikube status&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cluster not started&lt;/td&gt;
&lt;td&gt;Just run it again&lt;/td&gt;
&lt;td&gt;&lt;code&gt;minikube start&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Why did we do this?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Kubernetes is how you run and manage container-based apps.&lt;/li&gt;
&lt;li&gt;Minikube lets you explore it &lt;strong&gt;without needing cloud servers&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;kubectl is your command center.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you&apos;re ready to create pods, deployments, services - &lt;strong&gt;everything a true DevOps witch needs&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Step 3 — My First Pod: Running an App in Kubernetes&lt;/h2&gt;
&lt;h3&gt;Scene 1: “What even is a Pod?”&lt;/h3&gt;
&lt;p&gt;📦 In Kubernetes, &lt;em&gt;everything&lt;/em&gt; revolves around Pods.&lt;/p&gt;
&lt;p&gt;Think of a Pod as &lt;strong&gt;a little room with one (or more) containers&lt;/strong&gt; inside that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;share network and storage&lt;/li&gt;
&lt;li&gt;start together&lt;/li&gt;
&lt;li&gt;live and die together&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A Pod usually runs just one container (like our nginx example) - but it &lt;em&gt;can&lt;/em&gt; have multiple, like sidecars.&lt;/p&gt;
&lt;h3&gt;Scene 2: Create a YAML file for your Pod&lt;/h3&gt;
&lt;p&gt;📁 Open VS Code or your favorite code editor. Create a new file and name it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pod.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✍️ Paste this inside:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;apiVersion: v1
kind: Pod
metadata:
  name: my-first-pod
spec:
  containers:
    - name: nginx
      image: nginx:alpine
      ports:
        - containerPort: 80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✨ &lt;em&gt;What&apos;s going on here:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apiVersion&lt;/code&gt;, &lt;code&gt;kind&lt;/code&gt;, &lt;code&gt;metadata&lt;/code&gt; — just Kubernetes boilerplate: &quot;this is a Pod, name it like this&quot;.&lt;/li&gt;
&lt;li&gt;Inside &lt;code&gt;containers:&lt;/code&gt; you&apos;re saying: “Run a container using nginx:alpine and open port 80.”&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Scene 3: Apply the file and launch the Pod&lt;/h3&gt;
&lt;p&gt;In your terminal, while inside the folder with the file:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl apply -f pod.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;👉 This tells Kubernetes: &quot;Here&apos;s the definition — go make it real!&quot;&lt;/p&gt;
&lt;p&gt;Then check:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;NAME READY STATUS RESTARTS AGE
my-first-pod 1/1 Running 0 10s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ &lt;code&gt;STATUS: Running&lt;/code&gt; means your Pod is alive and well! 🎉&lt;/p&gt;
&lt;h3&gt;Scene 4: Open your app in the browser&lt;/h3&gt;
&lt;p&gt;Now let&apos;s actually see nginx in action. Time to forward that port:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl port-forward pod/my-first-pod 8080:80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;💡 &lt;em&gt;What&apos;s this doing?&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It tunnels port 80 from inside the container to your &lt;code&gt;localhost:8080&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Meaning: &lt;strong&gt;whatever nginx serves, you can see in your browser.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Scene 5: Check if it&apos;s working&lt;/h3&gt;
&lt;p&gt;Pop open your browser and go to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;http://localhost:8080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you see the default nginx page — &lt;strong&gt;boom, success!&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;If it didn&apos;t work — deep breath, let&apos;s fix it&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🔥 Problem&lt;/th&gt;
&lt;th&gt;💡 What to try&lt;/th&gt;
&lt;th&gt;🛠 Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Browser says “site can&apos;t be reached”&lt;/td&gt;
&lt;td&gt;Make sure the terminal with &lt;code&gt;port-forward&lt;/code&gt; is still open&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kubectl port-forward&lt;/code&gt; hangs or fails&lt;/td&gt;
&lt;td&gt;Cancel it (&lt;code&gt;Ctrl + C&lt;/code&gt;) and try again&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl port-forward pod/my-first-pod 8080:80&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port 8080 is already in use&lt;/td&gt;
&lt;td&gt;Try a different port&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl port-forward pod/my-first-pod 8081:80&lt;/code&gt; and go to &lt;code&gt;localhost:8081&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nginx didn&apos;t start in the Pod&lt;/td&gt;
&lt;td&gt;Check the logs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl logs my-first-pod&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;p&gt;So far, you&apos;ve:&lt;/p&gt;
&lt;p&gt;✅ Started your cluster&lt;br&gt;
✅ Created your very first Pod&lt;br&gt;
✅ Launched nginx&lt;br&gt;
✅ Accessed it through the browser&lt;/p&gt;
&lt;p&gt;This was your &lt;strong&gt;first real app running in Kubernetes&lt;/strong&gt; — and that&apos;s a huge milestone 👏👏👏&lt;/p&gt;
&lt;h2&gt;Step 4 — Deployment: So Your Pods Don&apos;t Break (And If They Do — They Auto-Heal)&lt;/h2&gt;
&lt;h3&gt;Scene 1: “What is a Deployment, anyway?”&lt;/h3&gt;
&lt;p&gt;In the last step, you manually created a Pod.
But here&apos;s the problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If it crashes — &lt;strong&gt;nobody restarts it&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;two Pods&lt;/strong&gt; for reliability&lt;/li&gt;
&lt;li&gt;You want Kubernetes to &lt;strong&gt;watch over them automatically&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🎯 Enter the &lt;strong&gt;Deployment&lt;/strong&gt;. It:&lt;/p&gt;
&lt;p&gt;✅ creates Pods&lt;br&gt;
✅ scales them (1, 2, 10, 100 — whatever)&lt;br&gt;
✅ restarts them if they crash&lt;br&gt;
✅ makes it easy to update images&lt;/p&gt;
&lt;p&gt;Basically — a Pod manager that keeps your app alive and thriving.&lt;/p&gt;
&lt;h3&gt;Scene 2: Create the Deployment YAML&lt;/h3&gt;
&lt;p&gt;📁 Create a new file called:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;deployment.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✍️ Paste this in:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;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
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;💡 &lt;em&gt;What&apos;s happening here:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;replicas: 2&lt;/code&gt; — we&apos;re saying “Give me 2 identical Pods”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;selector.matchLabels&lt;/code&gt; + &lt;code&gt;template.metadata.labels&lt;/code&gt; — this connects the Deployment to the Pods via &lt;code&gt;app: nginx&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;containers&lt;/code&gt; — same as before: launch nginx&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Scene 3: Apply the Deployment&lt;/h3&gt;
&lt;p&gt;Open your terminal and run this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl apply -f deployment.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🔍 You&apos;re telling Kubernetes: &quot;Here&apos;s the blueprint — build it.&quot;&lt;/p&gt;
&lt;p&gt;Now check that it worked:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get deployments
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 10s
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ Which means: 2 Pods are up and running.&lt;/p&gt;
&lt;p&gt;Now check the actual Pods:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You should see two Pods with similar names, like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;nginx-deployment-xxx-yyy 1/1 Running
nginx-deployment-aaa-bbb 1/1 Running
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Scene 4: Let&apos;s test the auto-recovery&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;🧪 Tiny experiment: delete one of the Pods&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl delete pod &amp;lt;one-of-the-pod-names&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A few seconds later:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You&apos;ll see 2 Pods again.&lt;/p&gt;
&lt;p&gt;🤯 Because the Deployment &lt;strong&gt;noticed one was gone — and created a new one automatically!&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;If the Deployment doesn&apos;t launch or Pods don&apos;t appear&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🔥 Problem&lt;/th&gt;
&lt;th&gt;💡 What to check&lt;/th&gt;
&lt;th&gt;🛠 Example Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kubectl apply -f deployment.yaml&lt;/code&gt; does nothing&lt;/td&gt;
&lt;td&gt;Make sure the file is &lt;strong&gt;named correctly&lt;/strong&gt; and you&apos;re in the right folder&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kubectl get deployments&lt;/code&gt; shows nothing&lt;/td&gt;
&lt;td&gt;Could be a YAML error (indentation, missing keys)&lt;/td&gt;
&lt;td&gt;Run &lt;code&gt;kubectl apply -f deployment.yaml&lt;/code&gt; again to see the error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pods crash (&lt;code&gt;STATUS: CrashLoopBackOff&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Something is breaking inside the container — check the logs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl logs &amp;lt;pod-name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Don&apos;t know the Pod name&lt;/td&gt;
&lt;td&gt;Just list all Pods&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;error: unable to recognize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your YAML might be broken — check the format&lt;/td&gt;
&lt;td&gt;Use &lt;a href=&quot;https://codebeautify.org/yaml-validator&quot;&gt;YAML Linter&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;📌 &lt;em&gt;Pro tip:&lt;/em&gt; You can always list Pods with:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Why this matters&lt;/h3&gt;
&lt;p&gt;Now you&apos;ve got:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Two Pods&lt;/strong&gt; = more reliability&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-healing&lt;/strong&gt; containers&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Easy updates&lt;/strong&gt; in the future&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You just leveled up from “one test container” to a &lt;strong&gt;real Kubernetes-managed application&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Step 5 — Service: How to Open a Pod in the Browser (Without Magic)&lt;/h2&gt;
&lt;h3&gt;Scene 1: “What is a Service?”&lt;/h3&gt;
&lt;p&gt;You already launched 2 nginx Pods — but right now, they&apos;re hiding behind a wall.&lt;/p&gt;
&lt;p&gt;🙅‍♀️ Without a Service, you &lt;strong&gt;can&apos;t just open them in the browser&lt;/strong&gt;. Because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pods have &lt;strong&gt;internal IPs&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;They&apos;re not accessible from “outside”&lt;/li&gt;
&lt;li&gt;If a Pod restarts, its IP might change&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🎯 A Service is like a &lt;strong&gt;stable front door&lt;/strong&gt; to your app.&lt;/p&gt;
&lt;p&gt;It knows where your Pods are and routes traffic to them.&lt;/p&gt;
&lt;p&gt;Even if a Pod dies, restarts, or moves — the Service still leads to the right place.&lt;/p&gt;
&lt;h3&gt;Scene 2: Create &lt;code&gt;service.yaml&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;📁 Create a new file and name it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;service.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✍️ Paste this in:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;💡 What this does:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type: NodePort&lt;/code&gt; — tells Kubernetes: “Expose this to the outside world via a port”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;selector: app: nginx&lt;/code&gt; — the Service will forward traffic to Pods with that label&lt;/li&gt;
&lt;li&gt;&lt;code&gt;port&lt;/code&gt; — the port the Service listens on (inside the cluster)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;targetPort&lt;/code&gt; — where to send traffic inside the Pod (nginx listens on port 80)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodePort&lt;/code&gt; — the &lt;strong&gt;external&lt;/strong&gt; port you&apos;ll use in your browser&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Scene 3: Apply the Service&lt;/h3&gt;
&lt;p&gt;In your terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl apply -f service.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🎉 Boom — your Service is live!&lt;/p&gt;
&lt;p&gt;Now run this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;minikube service nginx-service
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🪄 That command will &lt;strong&gt;automatically open your site in the browser&lt;/strong&gt; — no need to worry about ports, IPs, or voodoo.&lt;/p&gt;
&lt;p&gt;Didn&apos;t open? You can do it manually:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;minikube ip
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;👉 You&apos;ll get an IP, like &lt;code&gt;192.168.49.2&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now go to:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;http://192.168.49.2:30080
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ You should see the nginx welcome page!&lt;/p&gt;
&lt;h3&gt;What did we just do?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;You created a &lt;strong&gt;Service&lt;/strong&gt; to route traffic to your Pods&lt;/li&gt;
&lt;li&gt;Used &lt;strong&gt;NodePort&lt;/strong&gt; to make it accessible from outside&lt;/li&gt;
&lt;li&gt;Opened a real website running inside Kubernetes — without &lt;code&gt;port-forward&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You&apos;re now officially at the “my app runs in K8s and opens in a browser” level —&lt;/p&gt;
&lt;p&gt;aka your very first &lt;strong&gt;Kubernetes web app prototype&lt;/strong&gt;!&lt;/p&gt;
&lt;h2&gt;Step 6 — ConfigMap: Passing Variables Into a Container (No Rebuilding Needed)&lt;/h2&gt;
&lt;h3&gt;Scene 1: “Why do we even need ConfigMap?”&lt;/h3&gt;
&lt;p&gt;Let&apos;s say you&apos;ve got a website. And now you want to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;show a different welcome message&lt;/li&gt;
&lt;li&gt;tweak the behavior without rebuilding the image&lt;/li&gt;
&lt;li&gt;keep settings separate from your code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📦 &lt;strong&gt;ConfigMap&lt;/strong&gt; is how you pass variables into your Pods.&lt;/p&gt;
&lt;p&gt;Think of it like: “Here&apos;s a YAML with your config — grab it when you start up.”&lt;/p&gt;
&lt;h3&gt;Scene 2: Create the ConfigMap&lt;/h3&gt;
&lt;p&gt;📁 Create a file called:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;configmap.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✍️ Paste this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  WELCOME_MSG: &quot;Hello from ConfigMap!&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✨ What&apos;s going on here:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data:&lt;/code&gt; is just a key-value map&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WELCOME_MSG&lt;/code&gt; is an example string (but it could be a URL, a mode, a path — anything)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Scene 3: Update your deployment.yaml&lt;/h3&gt;
&lt;p&gt;Open your &lt;code&gt;deployment.yaml&lt;/code&gt; and inside the container block, add this under &lt;code&gt;spec.containers[0]&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;env:
  - name: WELCOME_MSG
    valueFrom:
      configMapKeyRef:
        name: nginx-config
        key: WELCOME_MSG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📌 This tells Kubernetes: “When launching the container, pass it this environment variable from the ConfigMap.”&lt;/p&gt;
&lt;h3&gt;Scene 4: Apply it all&lt;/h3&gt;
&lt;p&gt;In your terminal, run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl apply -f configmap.yaml
kubectl apply -f deployment.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🔄 This updates both the ConfigMap and the Deployment so everything is hooked up.&lt;/p&gt;
&lt;h3&gt;Scene 5: Check if the variable is inside the container&lt;/h3&gt;
&lt;p&gt;First, get the name of one of the Pods:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy a name (like &lt;code&gt;nginx-deployment-xxx-yyy&lt;/code&gt;) and jump inside:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl exec -it nginx-deployment-xxx-yyy -- /bin/sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now run:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo $WELCOME_MSG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ You should see:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Hello from ConfigMap!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🎉 It worked! The variable made it all the way into your container from Kubernetes.&lt;/p&gt;
&lt;h3&gt;If the variable didn&apos;t show up&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🔥 Problem&lt;/th&gt;
&lt;th&gt;💡 Check this&lt;/th&gt;
&lt;th&gt;🛠 Example command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;echo $WELCOME_MSG&lt;/code&gt; shows nothing&lt;/td&gt;
&lt;td&gt;Make sure you &lt;strong&gt;saved changes&lt;/strong&gt; and re-applied &lt;code&gt;deployment.yaml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl apply -f deployment.yaml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It looks right but still no variable&lt;/td&gt;
&lt;td&gt;The &lt;strong&gt;Pod may not have restarted&lt;/strong&gt; — delete it manually and let Deployment recreate it&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl delete pod &amp;lt;pod_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can&apos;t get into the Pod&lt;/td&gt;
&lt;td&gt;Double-check the Pod name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kubectl exec&lt;/code&gt; doesn&apos;t work&lt;/td&gt;
&lt;td&gt;Pod may have crashed — check status or logs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;, &lt;code&gt;kubectl logs &amp;lt;pod_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;📌 &lt;em&gt;Pro tip:&lt;/em&gt; For the new config to appear, the Pod usually has to be recreated.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;kubectl apply&lt;/code&gt; updates the Deployment, but won&apos;t restart running Pods.&lt;/p&gt;
&lt;h3&gt;What did you just do?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Created a config variable in Kubernetes&lt;/li&gt;
&lt;li&gt;Passed it into a Pod via Deployment&lt;/li&gt;
&lt;li&gt;Saw the variable live inside your container&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is key when your app needs to be flexible — change config without rebuilding the Docker image.&lt;/p&gt;
&lt;h2&gt;Step 7 — Secret: Safely Passing Passwords and Tokens into a Pod&lt;/h2&gt;
&lt;h3&gt;Scene 1: “ConfigMap vs Secret — what&apos;s the difference?”&lt;/h3&gt;
&lt;p&gt;💡 &lt;code&gt;ConfigMap&lt;/code&gt; — for regular settings: modes, messages, URLs.&lt;/p&gt;
&lt;p&gt;🔐 &lt;code&gt;Secret&lt;/code&gt; — for anything you &lt;strong&gt;don&apos;t want exposed to the world&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;passwords&lt;/li&gt;
&lt;li&gt;access tokens&lt;/li&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;❗ Heads up: Secret values are automatically &lt;strong&gt;base64-encoded&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;That&apos;s not encryption — just a way to hide them from curious eyes.&lt;/p&gt;
&lt;h3&gt;Scene 2: Create a secret file&lt;/h3&gt;
&lt;p&gt;📁 Create a new file:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;secret.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✍️ Paste this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;apiVersion: v1
kind: Secret
metadata:
  name: nginx-secret
type: Opaque
data:
  SECRET_MSG: SGVsbG8sIGZyb20gU2VjcmV0IQ==
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✨ What&apos;s going on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type: Opaque&lt;/code&gt; — standard type of Secret&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data:&lt;/code&gt; — key-value pairs (in base64)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;📌 Example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo -n &quot;Hello, from Secret!&quot; | base64
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which gives you: &lt;code&gt;SGVsbG8sIGZyb20gU2VjcmV0IQ==&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Scene 3: Link the Secret to your container&lt;/h3&gt;
&lt;p&gt;Open your &lt;code&gt;deployment.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Inside &lt;code&gt;containers &amp;gt; env&lt;/code&gt;, add:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;- name: SECRET_MSG
  valueFrom:
    secretKeyRef:
      name: nginx-secret
      key: SECRET_MSG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📌 Works exactly like ConfigMap — just a different data source: a Secret.&lt;/p&gt;
&lt;h3&gt;Scene 4: Apply the changes&lt;/h3&gt;
&lt;p&gt;In your terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl apply -f secret.yaml
kubectl apply -f deployment.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;📦 Kubernetes will update the Secret and roll out the changes.&lt;/p&gt;
&lt;h3&gt;Scene 5: Check the container&lt;/h3&gt;
&lt;p&gt;First, get your Pod&apos;s name:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl get pods
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then hop inside one:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;kubectl exec -it &amp;lt;pod_name&amp;gt; -- /bin/sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now check the variable:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;echo $SECRET_MSG
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✅ You should see:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-text&quot;&gt;Hello, from Secret!
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🎉 That means your Secret was passed into the container successfully!&lt;/p&gt;
&lt;h3&gt;If the Secret variable didn&apos;t show up&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🔥 Problem&lt;/th&gt;
&lt;th&gt;💡 Check this&lt;/th&gt;
&lt;th&gt;🛠 Example command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;echo $SECRET_MSG&lt;/code&gt; shows nothing&lt;/td&gt;
&lt;td&gt;Make sure you saved and re-applied &lt;code&gt;deployment.yaml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl apply -f deployment.yaml&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret wasn&apos;t created&lt;/td&gt;
&lt;td&gt;Verify it&apos;s actually there&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get secrets&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pod didn&apos;t restart&lt;/td&gt;
&lt;td&gt;Delete it manually — Deployment will recreate it&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl delete pod &amp;lt;pod_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;base64 was wrong&lt;/td&gt;
&lt;td&gt;Make sure you encoded &lt;strong&gt;without newline&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;`echo -n &quot;Hello&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can&apos;t enter the Pod&lt;/td&gt;
&lt;td&gt;Double-check the Pod name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;📌 &lt;em&gt;Pro tip:&lt;/em&gt; If the variable doesn&apos;t show up after &lt;code&gt;apply&lt;/code&gt;, manually deleting the Pod usually helps.&lt;/p&gt;
&lt;h3&gt;Why does this matter?&lt;/h3&gt;
&lt;p&gt;🔐 &lt;code&gt;Secret&lt;/code&gt; is the standard way to &lt;strong&gt;safely pass sensitive data&lt;/strong&gt; into your app — no hardcoding, no YAML leaks.&lt;/p&gt;
&lt;p&gt;You just:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;created a Kubernetes Secret&lt;/li&gt;
&lt;li&gt;passed it into a container&lt;/li&gt;
&lt;li&gt;verified it from the inside&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Magic. Secure magic. 💫&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;⏸️ Now pause for a second.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Do you realize what you&apos;ve just done?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You installed a cluster. Deployed an app. Passed it configs and secrets — the full DevOps starter pack.&lt;/p&gt;
&lt;p&gt;🤯 No clouds. No five tabs of Stack Overflow. No fear of hitting Enter.&lt;/p&gt;
&lt;p&gt;Let&apos;s wrap it all up in a beautiful summary:&lt;/p&gt;
&lt;h2&gt;Final Recap — What You Did and Why It Matters&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What You Did&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Installed Docker&lt;/td&gt;
&lt;td&gt;Runs containers — the foundation for Kubernetes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Installed Minikube and kubectl&lt;/td&gt;
&lt;td&gt;Local cluster and control tool&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Created a Pod&lt;/td&gt;
&lt;td&gt;Ran your first app in Kubernetes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Set up a Deployment&lt;/td&gt;
&lt;td&gt;Manages and scales Pods automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Added a Service&lt;/td&gt;
&lt;td&gt;Made your app accessible from the browser&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Connected a ConfigMap&lt;/td&gt;
&lt;td&gt;Passed env vars without rebuilding the image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;Connected a Secret&lt;/td&gt;
&lt;td&gt;Securely passed passwords and sensitive data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;✨ You just built a &lt;strong&gt;mini-infrastructure&lt;/strong&gt; on your own laptop.&lt;/p&gt;
&lt;p&gt;This isn&apos;t just “hello world” — it&apos;s &lt;strong&gt;hello Kubernetes&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;So, what&apos;s next? Two paths:&lt;/h2&gt;
&lt;h3&gt;Want to take a break and return later?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Stop the cluster:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;minikube stop
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Optionally quit Docker Desktop:&lt;/p&gt;
&lt;p&gt;Click the 🐳 icon in the top bar → &lt;strong&gt;Quit Docker Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;🛑 That&apos;s like hitting &quot;pause.&quot;&lt;/p&gt;
&lt;p&gt;Nothing will be deleted — everything stays just as it is.&lt;/p&gt;
&lt;p&gt;👉 When you want to come back:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start Docker Desktop&lt;/li&gt;
&lt;li&gt;Then run:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;minikube start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;💡 And boom — your Pods, Services, Configs, Secrets... all back in action.&lt;/p&gt;
&lt;h3&gt;Not planning to return?&lt;/h3&gt;
&lt;p&gt;If you want to fully clean up everything we built:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;minikube delete
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This removes the cluster, all Pods, configs, and secrets — clean slate.&lt;/p&gt;
&lt;p&gt;You can leave Docker installed — you&apos;ll probably use it again (a lot).&lt;/p&gt;
&lt;p&gt;Even if you never touch Kubernetes again — know this:&lt;/p&gt;
&lt;p&gt;You started it. You understood it. You &lt;strong&gt;owned&lt;/strong&gt; it. That&apos;s already a huge step into the DevOps world.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Kubernetes</category><category>Local Development</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>10 Docker Interview Questions &amp; Answers for DevOps &amp; Cloud Engineers</title><link>https://devops.pink/10-docker-interview-questions-and-answers-for-devops-and-cloud-engineers/</link><guid isPermaLink="true">https://devops.pink/10-docker-interview-questions-and-answers-for-devops-and-cloud-engineers/</guid><description>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.</description><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Prepping for a Cloud or DevOps Engineer interview in 2025? Then you already know Docker is going to show up. It always does. &lt;em&gt;Every single time.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So here are 10 questions you&apos;ll probably get asked, plus how to answer each one without sweating through your shirt. Let&apos;s get you ready, queen. 💪&lt;/p&gt;
&lt;p&gt;import VideoPlayer from &quot;@components/VideoPlayer.astro&quot;;&lt;/p&gt;
&lt;p&gt;&amp;lt;VideoPlayer
videoId=&quot;qf4fOqE345k&quot;
title=&quot;10 Docker Interview Questions &amp;amp; Answers for DevOps &amp;amp; Cloud Engineers&quot;
/&amp;gt;&lt;/p&gt;
&lt;h2&gt;First, A Quick Refresher: What Is Docker?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.docker.com/&quot;&gt;Docker&lt;/a&gt; is a platform that runs your apps inside isolated little boxes called &lt;a href=&quot;https://docs.docker.com/get-started/docker-overview/&quot;&gt;containers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The magic part? A container behaves the same no matter where it runs. Your laptop, a test server, production, doesn&apos;t matter. None of that &quot;but it worked on my machine&quot; drama. 😅&lt;/p&gt;
&lt;p&gt;And in actual DevOps work, you&apos;ll find it pretty much everywhere: app development, testing, CI/CD pipelines, cloud deployments. The whole pipeline, really.&lt;/p&gt;
&lt;h2&gt;Question 1: What&apos;s the difference between an image and a container? And what happens if you delete the image?&lt;/h2&gt;
&lt;p&gt;Okay so think of a &lt;a href=&quot;https://docs.docker.com/reference/cli/docker/image/&quot;&gt;Docker image&lt;/a&gt; as a frozen recipe for your app. It packs everything the app needs to run, code, libraries, environment settings, all of it.&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://www.docker.com/resources/what-container/&quot;&gt;container&lt;/a&gt; is what shows up when Docker actually cooks that recipe. The recipe becomes a real dish, sizzling on the stove. 🍳&lt;/p&gt;
&lt;p&gt;The image stays read-only and you can reuse it as many times as you want. The container, on the other hand, gets its own writable layer and runs as an isolated process. Here&apos;s the fun bit interviewers love: delete the image while the container is already running, and the container just... keeps going. It doesn&apos;t care, because the image already lives in memory.&lt;/p&gt;
&lt;p&gt;But stop that container and try to start it back up? Now Docker goes looking for the image, can&apos;t find it, and the restart fails. Womp.&lt;/p&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tag your images properly (&lt;code&gt;my-app:latest&lt;/code&gt;, &lt;code&gt;my-app:v1.2&lt;/code&gt;) and regularly prune unused ones — but avoid deleting images used by running containers.&lt;/p&gt;
&lt;h2&gt;Question 2: What actually happens when you run docker run?&lt;/h2&gt;
&lt;p&gt;When I run &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/run/&quot;&gt;docker run&lt;/a&gt;, the first thing Docker does is check whether the image is sitting on my machine already.&lt;/p&gt;
&lt;p&gt;Nope? Then it pulls the image down from a registry like &lt;a href=&quot;https://hub.docker.com/&quot;&gt;Docker Hub&lt;/a&gt;. After that it spins up a container, which is basically an isolated process with its very own filesystem, networking, and slice of resources.&lt;/p&gt;
&lt;p&gt;The isolation itself comes from Linux &lt;a href=&quot;https://man7.org/linux/man-pages/man7/namespaces.7.html&quot;&gt;namespaces&lt;/a&gt; and &lt;a href=&quot;https://man7.org/linux/man-pages/man7/cgroups.7.html&quot;&gt;cgroups&lt;/a&gt;. That&apos;s the secret sauce.&lt;/p&gt;
&lt;p&gt;Then, last step, it fires off whatever default command the image was built to run.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;docker run nginx&lt;/code&gt; pulls the &lt;code&gt;nginx&lt;/code&gt; image (if it&apos;s not local), creates a container, and starts the Nginx server inside that isolated environment.&lt;/p&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use &lt;code&gt;--rm&lt;/code&gt; with &lt;code&gt;docker run&lt;/code&gt; to automatically clean up the container after it exits — so your system doesn&apos;t get cluttered with stopped containers.&lt;/p&gt;
&lt;h2&gt;Question 3: COPY vs ADD — what&apos;s the difference, and when would you use each?&lt;/h2&gt;
&lt;p&gt;Both &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#copy&quot;&gt;COPY&lt;/a&gt; and &lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#add&quot;&gt;ADD&lt;/a&gt; move files into your image. So far, twins.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;COPY&lt;/code&gt; simply copies files and folders — no surprises.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ADD&lt;/code&gt; does more: it can unpack compressed files like &lt;code&gt;.tar.gz&lt;/code&gt; and download files from URLs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That &quot;extra&quot; behavior from &lt;code&gt;ADD&lt;/code&gt; is exactly why I keep my distance. It does things you didn&apos;t always ask for, which makes Dockerfiles harder to read. I reach for &lt;code&gt;COPY&lt;/code&gt; by default, and only bring in &lt;code&gt;ADD&lt;/code&gt; when I genuinely need one of those tricks.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;# Preferred
COPY ./app /app

# Only if needed (auto-extracts)
ADD archive.tar.gz /app/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Simplicity is security — prefer &lt;code&gt;COPY&lt;/code&gt; unless you have a very good reason.&lt;/p&gt;
&lt;h2&gt;Question 4: What&apos;s a multi-stage build, and when would you use it?&lt;/h2&gt;
&lt;p&gt;A &lt;a href=&quot;https://docs.docker.com/build/building/multi-stage/&quot;&gt;multi-stage build&lt;/a&gt; just means you&apos;ve got more than one &lt;code&gt;FROM&lt;/code&gt; in your Dockerfile. Sounds fancy. It&apos;s not, I promise.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The first stage does heavy work — installing dependencies, building code.&lt;/li&gt;
&lt;li&gt;The final stage copies only the necessary artifacts into a clean, minimal base image.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The payoff is a lean image. All those build tools and temp files that production never needed? Gone. Left behind in the first stage where they belong.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;# 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 [&quot;node&quot;, &quot;dist/index.js&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Smaller images = faster deployments + fewer vulnerabilities.&lt;/p&gt;
&lt;h2&gt;Question 5: CMD vs ENTRYPOINT — how do they work together?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#entrypoint&quot;&gt;ENTRYPOINT&lt;/a&gt; is the thing that runs. Your main executable. The star of the show.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/reference/dockerfile/#cmd&quot;&gt;CMD&lt;/a&gt; hands it the default arguments.&lt;/p&gt;
&lt;p&gt;Now the part people trip on. When you call &lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/run/&quot;&gt;docker run&lt;/a&gt; and pass your own arguments, those override CMD. ENTRYPOINT stays put.&lt;/p&gt;
&lt;p&gt;Put them together and you&apos;ve got a sensible default that you can still bend at runtime. Best of both, honestly.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-dockerfile&quot;&gt;FROM nginx:1.28.0-alpine-slim

ENTRYPOINT [&quot;nginx&quot;]
CMD [&quot;-g&quot;, &quot;daemon off;&quot;]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Want full control at runtime? Use only CMD — and leave out ENTRYPOINT.&lt;/p&gt;
&lt;h2&gt;Question 6: Volumes vs Bind Mounts — which would you use in production, and why?&lt;/h2&gt;
&lt;p&gt;For production, I go with &lt;a href=&quot;https://docs.docker.com/engine/storage/volumes/&quot;&gt;Docker-managed volumes&lt;/a&gt; every time.
They stay tucked away from the host OS, they&apos;re easy to back up, and they hold up nicely over the long haul.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/engine/storage/bind-mounts/&quot;&gt;Bind mounts&lt;/a&gt; lean on specific host paths. That makes them brittle, and very tied to one machine&apos;s setup.
They shine for local dev, though. Just keep them out of production, sis.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;services:
  db:
    image: postgres
    volumes:
      - pg-data:/var/lib/postgresql/data

volumes:
  pg-data:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Volumes are portable, reliable, and more future-proof across hosts and clusters.&lt;/p&gt;
&lt;h2&gt;Question 7: How does networking between containers work?&lt;/h2&gt;
&lt;p&gt;Out of the box, Docker drops your containers onto a &lt;a href=&quot;https://docs.docker.com/engine/network/drivers/bridge/&quot;&gt;bridge network&lt;/a&gt; and hands each one a private IP.&lt;/p&gt;
&lt;p&gt;Catch is, on that default network they can only find each other by IP. Not great. The fix is a &lt;a href=&quot;https://docs.docker.com/engine/network/drivers/bridge/#differences-between-user-defined-bridges-and-the-default-bridge&quot;&gt;user-defined bridge network&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;On a user-defined bridge, containers can talk to each other by name. Suddenly service discovery just works, and your life gets so much easier. 💕&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;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:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Always use &lt;strong&gt;user-defined networks&lt;/strong&gt; — the default &lt;code&gt;bridge&lt;/code&gt; network doesn&apos;t support automatic name-based discovery and can lead to frustrating connection issues.&lt;/p&gt;
&lt;h2&gt;Question 8: How do you reduce Docker image size, and why should you care?&lt;/h2&gt;
&lt;p&gt;Smaller images build faster, deploy faster, and give attackers way less to chew on. Win, win, win.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I start with a minimal base image — like &lt;code&gt;alpine:3.21.3&lt;/code&gt;, &lt;code&gt;python:3.12-slim-bookworm&lt;/code&gt;, or &lt;code&gt;node:20.13.1-alpine&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I combine RUN instructions to reduce layers, and clean up any temp files or caches.&lt;/li&gt;
&lt;li&gt;I always use a &lt;code&gt;.dockerignore&lt;/code&gt; file to exclude things like &lt;code&gt;.git&lt;/code&gt;, &lt;code&gt;node_modules&lt;/code&gt;, and test data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And when a build gets gnarly, multi-stage is my go-to. It keeps the build tools out of the final runtime, which is exactly where the bloat usually hides.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A Node.js app image can shrink from 1.2 GB to under 200 MB by switching to &lt;code&gt;node:20.13.1-alpine&lt;/code&gt; and cleaning up properly.&lt;/p&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Smaller images = faster pipelines, quicker deploys, and fewer security issues.&lt;/p&gt;
&lt;h2&gt;Question 9: What is BuildKit, and why use it?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.docker.com/build/buildkit/&quot;&gt;BuildKit&lt;/a&gt; is Docker&apos;s modern build engine, and it&apos;s a serious step up for performance, security, and flexibility.&lt;/p&gt;
&lt;p&gt;It runs independent build steps in parallel, caches way more cleverly, and handles secrets safely while building. It&apos;ll also do multi-platform builds and manage storage efficiently. Lots packed in there.&lt;/p&gt;
&lt;p&gt;Good news for most of us: on recent Docker versions BuildKit is already on by default, so there&apos;s nothing to set up. Stuck on something older? You can still switch it on with &lt;code&gt;DOCKER_BUILDKIT=1&lt;/code&gt;, or by tweaking the Docker daemon config.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With BuildKit, multi-stage builds can run steps in parallel, reducing build times significantly.&lt;/p&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lean on BuildKit for builds that are faster, safer, and a whole lot more efficient.&lt;/p&gt;
&lt;h2&gt;Question 10: How do you handle sensitive data (like secrets) in Docker?&lt;/h2&gt;
&lt;p&gt;Hardcoding secrets into Dockerfiles or images? Never. Not once. Don&apos;t do it, darling.&lt;/p&gt;
&lt;p&gt;For local runs I pass secrets in as environment variables, either inline or through a &lt;code&gt;.env&lt;/code&gt; file. And if I use a &lt;code&gt;.env&lt;/code&gt; file, it goes straight into &lt;code&gt;.dockerignore&lt;/code&gt; so it never sneaks into the image by accident.&lt;/p&gt;
&lt;p&gt;In production it&apos;s a different game. I lean on proper secret managers, &lt;a href=&quot;https://developer.hashicorp.com/vault&quot;&gt;HashiCorp Vault&lt;/a&gt;, &lt;a href=&quot;https://aws.amazon.com/secrets-manager/&quot;&gt;AWS Secrets Manager&lt;/a&gt;, or &lt;a href=&quot;https://kubernetes.io/docs/concepts/configuration/secret/&quot;&gt;Kubernetes Secrets&lt;/a&gt;, and let them inject the secrets at runtime.&lt;/p&gt;
&lt;p&gt;The rule is simple. Secrets live outside the image, never baked inside it.&lt;/p&gt;
&lt;p&gt;📌 &lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pass database passwords using environment variables in staging, and HashiCorp Vault in production.&lt;/p&gt;
&lt;p&gt;🚀 &lt;strong&gt;Pro Tip:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Good secret management = safer deployments and easier key rotations.&lt;/p&gt;
&lt;p&gt;Thanks for reading! Be sure to watch the &lt;a href=&quot;https://youtu.be/qf4fOqE345k&quot;&gt;video version&lt;/a&gt; for extra insights and helpful visuals.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Docker</category><category>Interview Questions</category><category>DevOps</category><category>Containers</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Helm in Kubernetes - What It Is and Why You Need It</title><link>https://devops.pink/helm-in-kubernetes-what-it-is-and-why-you-need-it/</link><guid isPermaLink="true">https://devops.pink/helm-in-kubernetes-what-it-is-and-why-you-need-it/</guid><description>Helm simplifies Kubernetes deployments. Learn what it is, how it works, and why it&apos;s essential for managing scalable apps and infrastructure.</description><pubDate>Tue, 20 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey, tech queens!&lt;/p&gt;
&lt;p&gt;Let&apos;s talk &lt;strong&gt;Helm&lt;/strong&gt; — my go-to tool for working with Kubernetes. If you&apos;ve ever suffered through manually crafting YAML files for every single service, you&apos;re about to &lt;em&gt;breathe a huge sigh of relief&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I used to drown in those manifests and think, “Is it always going to be this painful?” Nope. Because &lt;strong&gt;Helm exists&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Helm in Plain English&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Helm is that same kind of instruction manual - for Kubernetes.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Normally, deploying an app means creating a bunch of objects: Pods, Services, Ingresses, ConfigMaps — each with its own YAML file. It&apos;s tedious.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Helm saves you:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bundles everything into one structure: a &lt;em&gt;chart&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Spins up apps with a single command&lt;/li&gt;
&lt;li&gt;Simplifies upgrades, customization, and &lt;em&gt;rollbacks&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Makes deployments predictable and repeatable&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&apos;s a Helm Chart (and Why It&apos;s Not Scary)&lt;/h2&gt;
&lt;p&gt;The word “chart” might sound intimidating, but it&apos;s really just &lt;strong&gt;a folder with organized files&lt;/strong&gt;. No magic, just structure.&lt;/p&gt;
&lt;p&gt;Think of it as your deployment organizer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Chart.yaml&lt;/code&gt; — the chart&apos;s business card: name, version, description&lt;/li&gt;
&lt;li&gt;&lt;code&gt;values.yaml&lt;/code&gt; — default settings (ports, replicas, DB names, etc.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;templates/&lt;/code&gt; — YAML blueprints Helm renders into actual Kubernetes objects&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_helpers.tpl&lt;/code&gt; — reusable functions to keep templates DRY&lt;/li&gt;
&lt;li&gt;&lt;code&gt;charts/&lt;/code&gt; — dependencies like databases or message queues&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Why It&apos;s Handy&lt;/h3&gt;
&lt;p&gt;A chart is like a capsule — it holds everything: instructions, configs, and dependencies.&lt;/p&gt;
&lt;p&gt;Same chart, different environments:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Dev&lt;/em&gt;: &lt;code&gt;myblog-dev&lt;/code&gt;, 1 replica, test DB&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Prod&lt;/em&gt;: &lt;code&gt;myblog&lt;/code&gt;, 3 replicas, production DB&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Just tweak &lt;code&gt;values.yaml&lt;/code&gt; — no need to touch anything else.&lt;/p&gt;
&lt;p&gt;It&apos;s like one dress styled with different accessories.&lt;/p&gt;
&lt;h2&gt;Why Helm Is My Must-Have&lt;/h2&gt;
&lt;p&gt;Reasons I love Helm:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; no more 30+ YAML files&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; same chart, different setups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transparency:&lt;/strong&gt; preview what&apos;s actually going to be installed (&lt;code&gt;helm template&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security:&lt;/strong&gt; Helm 3 removed Tiller (and that&apos;s a good thing)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Control:&lt;/strong&gt; rollbacks are built-in (&lt;code&gt;helm rollback&lt;/code&gt; is magic)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Helm 2 vs Helm 3 — Short &amp;amp; Sweet&lt;/h2&gt;
&lt;p&gt;Helm 2 relied on a separate component called &lt;em&gt;Tiller&lt;/em&gt;, which had elevated cluster privileges — a big security headache.&lt;/p&gt;
&lt;p&gt;Helm 3 fixed it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;No Tiller&lt;/li&gt;
&lt;li&gt;Uses your existing &lt;code&gt;kubectl&lt;/code&gt; credentials&lt;/li&gt;
&lt;li&gt;Easier to install and great for CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What&apos;s Next? Helm v4 Is in the Works&lt;/h2&gt;
&lt;p&gt;Helm v4 is currently &lt;strong&gt;in planning&lt;/strong&gt; (see &lt;a href=&quot;https://github.com/helm/community/blob/main/hips/hip-0012.md&quot;&gt;HIP-0012&lt;/a&gt;) — with focus on a new API and architectural improvements.&lt;/p&gt;
&lt;p&gt;No official release date yet — the devs meet weekly and are actively shaping the roadmap.&lt;/p&gt;
&lt;h2&gt;Installing Helm — Fast &amp;amp; Painless&lt;/h2&gt;
&lt;h3&gt;You&apos;ll Need:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;A Kubernetes cluster (Minikube, GKE, etc.)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kubectl&lt;/code&gt; installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Most Universal Way&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;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
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Always use the official script from GitHub. Trust but verify.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Alternatives&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;macOS:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;brew install helm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Homebrew now provides the latest release — &lt;strong&gt;v3.18.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux (Snap):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo snap install helm --classic
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Snap can sometimes lag behind — prefer the install script for CI.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Debian / Ubuntu (APT):&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | \
sudo tee /usr/share/keyrings/helm.gpg &amp;gt; /dev/null

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

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

output &quot;archive_checksum&quot; {
  value = data.archive_file.example.output_base64sha256
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That &lt;code&gt;output_base64sha256&lt;/code&gt; is a SHA-256 checksum, so you know your file stayed intact. You don&apos;t &lt;em&gt;need&lt;/em&gt; it. But it&apos;s a cute little sanity check. ✅&lt;/p&gt;
&lt;h3&gt;Example: Zipping a Python Script for AWS Lambda&lt;/h3&gt;
&lt;p&gt;Picture this: you&apos;ve got &lt;code&gt;lambda_function.py&lt;/code&gt; and it needs to land on AWS Lambda.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;data &quot;archive_file&quot; &quot;lambda_zip&quot; {
  type        = &quot;zip&quot;
  source_file = &quot;lambda_function.py&quot;
  output_path = &quot;lambda_function.zip&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then wire it into your Lambda function:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;resource &quot;aws_lambda_function&quot; &quot;my_lambda&quot; {
  function_name    = &quot;my_lambda_function&quot;
  role             = aws_iam_role.lambda_role.arn
  runtime          = &quot;python3.8&quot;
  handler          = &quot;lambda_function.lambda_handler&quot;

  filename         = data.archive_file.lambda_zip.output_path
  source_code_hash = data.archive_file.lambda_zip.output_base64sha256
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;✨ &lt;strong&gt;Heads up!&lt;/strong&gt; Got dependencies? Then zip the whole folder, not just the script.&lt;/p&gt;
&lt;h2&gt;Creating Archives from Multiple Files&lt;/h2&gt;
&lt;p&gt;Okay so, I really wish Terraform let us list multiple files outright. It won&apos;t. Total diva. 👀 The workaround is to gather everything into a temp folder first:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;resource &quot;terraform_data&quot; &quot;prepare_files&quot; {
  provisioner &quot;local-exec&quot; {
    command = &amp;lt;&amp;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 &quot;archive_file&quot; &quot;multiple_files&quot; {
  type        = &quot;zip&quot;
  source_dir  = &quot;${path.module}/temp_folder&quot;
  output_path = &quot;${path.module}/multiple_files.zip&quot;
  depends_on  = [terraform_data.prepare_files]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just want a whole directory archived? Easy:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;data &quot;archive_file&quot; &quot;example&quot; {
  type        = &quot;zip&quot;
  source_dir  = &quot;${path.module}/my_folder&quot;
  output_path = &quot;${path.module}/example.zip&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Uploading an Archive to Azure Storage&lt;/h2&gt;
&lt;p&gt;For my Azure girls 💙, here&apos;s how to squish a folder and drop it into an Azure Storage Blob:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;data &quot;archive_file&quot; &quot;app_package&quot; {
  type        = &quot;zip&quot;
  source_dir  = &quot;${path.module}/my_app_folder&quot;
  output_path = &quot;${path.module}/app_package.zip&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then spin up a storage account and push it:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;resource &quot;azurerm_storage_blob&quot; &quot;example&quot; {
  name                   = &quot;app_package.zip&quot;
  storage_account_name   = azurerm_storage_account.example.name
  storage_container_name = azurerm_storage_container.example.name
  type                   = &quot;Block&quot;
  source                 = data.archive_file.app_package.output_path

  depends_on = [data.archive_file.app_package]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Troubleshooting archive_file Issues&lt;/h2&gt;
&lt;p&gt;Terraform acting up? Queen, take a breath. Here&apos;s how to fix the usual &lt;code&gt;archive_file&lt;/code&gt; headaches:&lt;/p&gt;
&lt;p&gt;1️⃣ &lt;strong&gt;Incorrect Source Path&lt;/strong&gt; → Check your file paths! Use &lt;code&gt;${path.module}&lt;/code&gt; to avoid mistakes.&lt;br&gt;
2️⃣ &lt;strong&gt;Missing zip Utility&lt;/strong&gt; → Terraform needs &lt;code&gt;zip&lt;/code&gt; installed. Fix it with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linux:&lt;/strong&gt; &lt;code&gt;sudo apt install zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;macOS:&lt;/strong&gt; &lt;code&gt;brew install zip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Windows:&lt;/strong&gt; Ensure &lt;code&gt;zip.exe&lt;/code&gt; is in your PATH.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3️⃣ &lt;strong&gt;Files Not Updating?&lt;/strong&gt; → Terraform won&apos;t detect changes inside &lt;code&gt;source_dir&lt;/code&gt;. Use &lt;code&gt;filemd5()&lt;/code&gt; like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-hcl&quot;&gt;output &quot;archive_hash&quot; {
  value = filemd5(data.archive_file.example.output_path)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4️⃣ &lt;strong&gt;Permission Issues&lt;/strong&gt; → If AWS Lambda or Docker throws permission errors, chmod your files before zipping:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;chmod +x my_script.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;5️⃣ &lt;strong&gt;Wrong Paths in Modules&lt;/strong&gt; → Always use &lt;code&gt;${path.module}&lt;/code&gt;, not &lt;code&gt;${path.root}&lt;/code&gt;!&lt;/p&gt;
&lt;h2&gt;Key Takeaways&lt;/h2&gt;
&lt;p&gt;💖 &lt;code&gt;archive_file&lt;/code&gt; is a Terraform essential for packaging files before deployment.&lt;br&gt;
💖 Use &lt;code&gt;source_file&lt;/code&gt; for one file and &lt;code&gt;source_dir&lt;/code&gt; for entire folders.&lt;br&gt;
💖 Troubleshoot common issues with paths, permissions, and missing utilities.&lt;/p&gt;
&lt;p&gt;Terraform is fun (and powerful), so go forth and automate like the IT queen you are! 👩‍💻✨&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>Terraform</category><category>IaC</category><category>Automation</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>DevOps for IT Girls - Deploying Like a Queen</title><link>https://devops.pink/devops-for-it-girls-deploying-like-a-queen/</link><guid isPermaLink="true">https://devops.pink/devops-for-it-girls-deploying-like-a-queen/</guid><description>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!</description><pubDate>Thu, 09 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey, tech beauties! 💖&lt;/p&gt;
&lt;p&gt;DevOps gets a bad rap. People hear the word and picture something dry and complicated, and honestly? &lt;strong&gt;You&apos;ve never had it explained the right way!&lt;/strong&gt; I like to think of it as the ultimate &lt;strong&gt;self-care routine for your code&lt;/strong&gt;. You write it, you ship it, and you keep it glowing once it&apos;s out there in the world.&lt;/p&gt;
&lt;p&gt;So that&apos;s what we&apos;re doing today. &lt;strong&gt;The whole DevOps cycle&lt;/strong&gt;, start to finish, in a way that&apos;s easy, fun, and totally &lt;strong&gt;girl-coded&lt;/strong&gt;. And our example is one we all get: &lt;strong&gt;skincare &amp;amp; beauty!&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Step 1: You Have an Idea, Now What?&lt;/h2&gt;
&lt;p&gt;Picture this. You want to build &lt;strong&gt;a smart skincare recommendation app&lt;/strong&gt;. You punch in your skin type, your age, the season, and boom: it hands you the perfect routine. Genius, right?&lt;/p&gt;
&lt;p&gt;So you open &lt;strong&gt;VS Code&lt;/strong&gt;. A few hours later (we don&apos;t sleep, we debug 🛠️), &lt;strong&gt;it works!&lt;/strong&gt; 🎉&lt;/p&gt;
&lt;p&gt;But here&apos;s the thing. Only &lt;em&gt;you&lt;/em&gt; can see it right now. &lt;strong&gt;How do we get it out to the world?&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Step 2: Packaging It Up (Docker)&lt;/h2&gt;
&lt;p&gt;First &lt;strong&gt;DevOps rule&lt;/strong&gt;, and it&apos;s a big one: &lt;em&gt;Just because it works on your laptop doesn&apos;t mean it&apos;ll work anywhere else.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Think of your code like &lt;strong&gt;skincare products&lt;/strong&gt;. When you travel, you don&apos;t just toss your creams and serums and SPF loose into a suitcase. You&apos;d never. &lt;strong&gt;You pack them neatly in a travel bag&lt;/strong&gt; so nothing leaks and everything&apos;s easy to find.&lt;/p&gt;
&lt;p&gt;That&apos;s &lt;strong&gt;Docker&lt;/strong&gt;, basically. It does the same thing for your app:&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Packs your code and all dependencies&lt;/strong&gt; together&lt;br&gt;
✅ &lt;strong&gt;Ensures it runs the same way&lt;/strong&gt; anywhere—your laptop, a server, or the cloud&lt;br&gt;
✅ &lt;strong&gt;Eliminates the “but it works on my machine!” excuse&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wherever your app goes now, it&apos;s ready to glow ✨.&lt;/p&gt;
&lt;h2&gt;Step 3: Setting Up the Right Space (Terraform)&lt;/h2&gt;
&lt;p&gt;Your app is tucked into its &lt;strong&gt;cute little Docker container&lt;/strong&gt;. Lovely. But where does it actually run? You need &lt;strong&gt;a server&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Enter &lt;strong&gt;Terraform&lt;/strong&gt;. If Docker was your &lt;strong&gt;travel bag&lt;/strong&gt;, then Terraform is &lt;strong&gt;your perfectly organized vanity shelf&lt;/strong&gt;, set up exactly the way you like it.&lt;/p&gt;
&lt;p&gt;Here&apos;s what it handles:&lt;/p&gt;
&lt;p&gt;✨ &lt;strong&gt;Creating servers automatically&lt;/strong&gt; (no manual clicking in cloud dashboards)&lt;br&gt;
✨ &lt;strong&gt;Ensuring they always have the right settings&lt;/strong&gt; (memory, CPU, storage)&lt;br&gt;
✨ &lt;strong&gt;Making it easy to scale when traffic grows&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No more building a server by hand every single time. &lt;strong&gt;Terraform does it for you, perfectly, every time.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Step 4: Organizing Everything (Ansible)&lt;/h2&gt;
&lt;p&gt;So you&apos;ve got a server. Except it&apos;s &lt;strong&gt;completely empty&lt;/strong&gt;. No software, no setup, nothing on it at all. Imagine a &lt;strong&gt;brand-new vanity table&lt;/strong&gt; with not a single product on it.&lt;/p&gt;
&lt;p&gt;That&apos;s where &lt;strong&gt;Ansible&lt;/strong&gt; struts in.&lt;/p&gt;
&lt;p&gt;You know how you&apos;ve got a &lt;strong&gt;list of must-have skincare products&lt;/strong&gt;? Cleanser, moisturizer, SPF, serum. And you arrange them in the same order every time &lt;strong&gt;so everything&apos;s right where you expect it&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ansible&lt;/strong&gt; does that for your server:&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Installs all the software it needs&lt;/strong&gt; (Docker, libraries, tools)&lt;br&gt;
✅ &lt;strong&gt;Configures everything automatically&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Makes sure every new server is set up exactly the same way&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Step 5: Automating Updates (CI/CD)&lt;/h2&gt;
&lt;p&gt;Say you want to add a feature. Your app &lt;strong&gt;now suggests skincare based on the weather&lt;/strong&gt;, because come on, your winter routine and your summer routine are not the same thing.&lt;/p&gt;
&lt;p&gt;But updating the app &lt;strong&gt;by hand&lt;/strong&gt; every time you tweak something? &lt;strong&gt;Girl, no.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the whole point of &lt;strong&gt;CI/CD (Continuous Integration / Continuous Deployment)&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;✅ You &lt;strong&gt;push your new code&lt;/strong&gt; to &lt;strong&gt;GitHub&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;CI/CD tools (GitHub Actions, GitLab CI/CD, Jenkins)&lt;/strong&gt; automatically test, build, and deploy it&lt;br&gt;
✅ Your app updates &lt;strong&gt;without you lifting a finger&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&apos;s a &lt;strong&gt;beauty subscription box&lt;/strong&gt; for your code. New products land at your door every month and you never have to reorder.&lt;/p&gt;
&lt;h2&gt;Step 6: Monitoring Performance (Prometheus &amp;amp; Grafana)&lt;/h2&gt;
&lt;p&gt;Your app is live! But is it actually &lt;strong&gt;running smoothly?&lt;/strong&gt; How would you even know?&lt;/p&gt;
&lt;p&gt;Say hi to &lt;strong&gt;Prometheus &amp;amp; Grafana&lt;/strong&gt;, your app&apos;s &lt;strong&gt;skincare tracker&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;💖 &lt;strong&gt;Prometheus&lt;/strong&gt; collects data (server health, errors, traffic, performance)&lt;br&gt;
💖 &lt;strong&gt;Grafana&lt;/strong&gt; turns it into &lt;strong&gt;beautiful dashboards &amp;amp; alerts&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tracking your skincare tells you &lt;strong&gt;when to hydrate more or swap a product&lt;/strong&gt;. Monitoring works the same way. It &lt;strong&gt;helps prevent app crashes before users even notice&lt;/strong&gt; a thing.&lt;/p&gt;
&lt;h2&gt;The Full DevOps Cycle, Beauty Edition&lt;/h2&gt;
&lt;p&gt;Okay, let&apos;s pull it all together:&lt;/p&gt;
&lt;p&gt;1️⃣ &lt;strong&gt;Write the code&lt;/strong&gt; 🖥️ &lt;em&gt;(find your perfect skincare routine)&lt;/em&gt;&lt;br&gt;
2️⃣ &lt;strong&gt;Package it in Docker&lt;/strong&gt; 👜 &lt;em&gt;(store products in a beauty bag for easy travel)&lt;/em&gt;&lt;br&gt;
3️⃣ &lt;strong&gt;Deploy infrastructure with Terraform&lt;/strong&gt; 📦 &lt;em&gt;(set up a perfectly organized vanity shelf)&lt;/em&gt;&lt;br&gt;
4️⃣ &lt;strong&gt;Set up servers with Ansible&lt;/strong&gt; 🔧 &lt;em&gt;(arrange your skincare in the right order)&lt;/em&gt;&lt;br&gt;
5️⃣ &lt;strong&gt;Automate updates with CI/CD&lt;/strong&gt; 🚀 &lt;em&gt;(subscribe to beauty boxes so you always get the latest products)&lt;/em&gt;&lt;br&gt;
6️⃣ &lt;strong&gt;Monitor everything with Prometheus &amp;amp; Grafana&lt;/strong&gt; 📊 &lt;em&gt;(track your skincare results and adjust as needed)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And just like that, your app &lt;strong&gt;deploys automatically, scales smoothly, and never crashes unexpectedly&lt;/strong&gt;. That, my loves, is &lt;strong&gt;glow-up engineering!&lt;/strong&gt; ✨&lt;/p&gt;
&lt;h2&gt;Final DevOps Girl Tips&lt;/h2&gt;
&lt;p&gt;📌 &lt;strong&gt;Learn step by step:&lt;/strong&gt; Start with &lt;strong&gt;Docker&lt;/strong&gt;. Then &lt;strong&gt;CI/CD&lt;/strong&gt;. Then &lt;strong&gt;Kubernetes&lt;/strong&gt;. You don&apos;t have to learn it all in one day, I promise.&lt;/p&gt;
&lt;p&gt;⚡ &lt;strong&gt;Automate everything:&lt;/strong&gt; Less manual work means more time for &lt;strong&gt;innovation (or coffee &amp;amp; skincare 💅)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;🔥 &lt;strong&gt;Stay updated:&lt;/strong&gt; DevOps never sits still, so &lt;strong&gt;follow IT girl bloggers, Twitter devs, and tech conferences&lt;/strong&gt; to stay ahead.&lt;/p&gt;
&lt;p&gt;And the big one? &lt;strong&gt;Don&apos;t be afraid!&lt;/strong&gt; DevOps isn&apos;t scary. It&apos;s just &lt;strong&gt;a well-organized self-care routine for your apps.&lt;/strong&gt; 😉&lt;/p&gt;
&lt;p&gt;Now go out there and &lt;strong&gt;deploy like a queen&lt;/strong&gt;! 👑💻✨&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>DevOps &amp; Cloud</category><category>DevOps</category><category>GitOps</category><category>Automation</category><author>Tatiana Mikhaleva (devops.pink)</author></item><item><title>Top Machine Learning YouTube Courses to Fuel Your Tech Passion</title><link>https://devops.pink/top-machine-learning-youtube-courses-to-fuel-your-tech-passion/</link><guid isPermaLink="true">https://devops.pink/top-machine-learning-youtube-courses-to-fuel-your-tech-passion/</guid><description>A complete pathway for learners at every stage of the machine learning and deep learning journey — navigate and excel in the evolving world of tech.</description><pubDate>Sun, 05 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey there, code cuties! 🌟 Okay, this post is close to my heart. It&apos;s my running list of the Machine Learning and Deep Learning courses on YouTube that I actually keep coming back to. 🌟 Total newbie? Seasoned pro who wants to shake up the skill set? Either way, I picked playlists that&apos;ll keep your tech game on point. Let&apos;s go! ✨&lt;/p&gt;
&lt;h2&gt;Foundational Machine Learning Courses&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Starting Strong&lt;/strong&gt;: Kick off your journey with the &lt;a href=&quot;https://www.youtube.com/playlist?list=PL05umP7R6ij35ShKLDqccJSDntugY4FQT&quot;&gt;Introduction to Machine Learning (Tübingen)&lt;/a&gt;. Think of it as the beginner&apos;s bible. Regression, classification, and a whole lot of aha! moments. 🤓&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go Deep on Data&lt;/strong&gt;: Now get cozy with &lt;a href=&quot;https://www.youtube.com/playlist?list=PL05umP7R6ij2XCvrRzLokX6EoHWaGA2cC&quot;&gt;Statistical Machine Learning (Tübingen)&lt;/a&gt;. This one cracks open the secrets behind algorithms and learning paradigms. 🔍&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Master the Basics&lt;/strong&gt;: &lt;a href=&quot;https://www.youtube.com/playlist?list=PLzrCXlf6ypbxS5OYOY3EN_0u2fDuIT6Gt&quot;&gt;Machine Learning Lecture (Stefan Harmeling)&lt;/a&gt; takes you from Bayes&apos; rule all the way to Gaussian Processes. Absolute gold, sis! 🌟&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Full Spectrum Learning&lt;/strong&gt;: The &lt;a href=&quot;https://www.youtube.com/playlist?list=PLD63A284B7615313A&quot;&gt;Caltech CS156: Learning from Data&lt;/a&gt; course is a gem. It runs the gamut, basics through support vector machines, and you&apos;ll be amazed. 📚&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hands-On Hero&lt;/strong&gt;: Love getting your hands dirty? &lt;a href=&quot;https://www.youtube.com/playlist?list=PL2UML_KCiC0UlY7iCQDSiGDMovaupqc83&quot;&gt;Applied Machine Learning&lt;/a&gt; digs into the nitty-gritty of optimization and regularization. Practical magic. ✨&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Deep Learning Exploration&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Beginner&apos;s Luck&lt;/strong&gt;: Start your deep learning quest with &lt;a href=&quot;https://www.youtube.com/playlist?list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI&quot;&gt;Introduction to Deep Learning (MIT)&lt;/a&gt;. It&apos;s perfect for babes just stepping into the scene. 🚀&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Technique Treasure Trove&lt;/strong&gt;: The &lt;a href=&quot;https://www.youtube.com/playlist?list=PL_iWQOsE6TfVmKkQHucjPAoRtIJYt8a5A&quot;&gt;Deep Learning: CS 182&lt;/a&gt; course has you mastering everything from error analysis to imitation learning. Go unlock that potential. 🔑&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nerd Out with Neural&lt;/strong&gt;: Dive deep with &lt;a href=&quot;https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ&quot;&gt;Neural Networks: Zero to Hero&lt;/a&gt; by Andrej Karpathy. Honestly, it&apos;s your backstage pass to the whole neural network show. 🎬&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creativity Meets AI&lt;/strong&gt;: Want to see how AI reshapes art? &lt;a href=&quot;https://www.youtube.com/playlist?list=PLCpMvp7ftsnIbNwRnQJbDNRqO6qiN3EyH&quot;&gt;MIT: Deep Learning for Art, Aesthetics, and Creativity&lt;/a&gt; is where your inner artist and your inner coder finally meet. 🎨&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unsupervised Learning Adventures&lt;/strong&gt;: Curious what hides behind the data? &lt;a href=&quot;https://www.youtube.com/playlist?list=PLwRJQ4m4UJjPiJP3691u-qWwPGVKzSlNP&quot;&gt;Deep Unsupervised Learning&lt;/a&gt; will pull you right into the mystery. 🕵️‍♀️&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Specialized Courses in Machine Learning&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Healing with AI&lt;/strong&gt;: &lt;a href=&quot;https://www.youtube.com/playlist?list=PLUl4u3cNGP60B0PQXVQyGNdCyCTDU1Q5j&quot;&gt;MIT 6.S897: Machine Learning for Healthcare (2019)&lt;/a&gt; blends ML with medicine. Tech meets tender loving care, basically. 💉&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Graph Gurus&lt;/strong&gt;: Feeling graph-tastic? &lt;a href=&quot;https://www.youtube.com/playlist?list=PLoROMvodv4rPLKxIpqhjhPgdQy7imNkDn&quot;&gt;Machine Learning with Graphs (Stanford)&lt;/a&gt; walks from PageRank to graph neural networks. A must for data divas. 📈&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Talk the AI Talk&lt;/strong&gt;: Jump into &lt;a href=&quot;https://www.youtube.com/playlist?list=PLoROMvodv4rOSH4v6133s9LFPRHjEmbmJ&quot;&gt;CS224N: Natural Language Processing with Deep Learning&lt;/a&gt;. You&apos;ll learn to teach machines to actually understand us. Finally, a tech that gets you. 💬&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Practical and Real-World Applications&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Language Model Love&lt;/strong&gt;: Build something real with &lt;a href=&quot;https://www.comet.com/site/llm-course/&quot;&gt;LLMOps: Building Real-World Applications With Large Language Models&lt;/a&gt;. Bring your code to life, queen. 🌐&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From Lab to Fab&lt;/strong&gt;: &lt;a href=&quot;https://www.youtube.com/playlist?list=PL1T8fO7ArWlcWg04OgNiJy91PywMKT2lv&quot;&gt;Full Stack Deep Learning&lt;/a&gt; carries you from model training all the way to deployment. Let&apos;s get those models runway-ready. 💻&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Exploring Computer Vision and Reinforcement Learning&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;See the Vision&lt;/strong&gt;: Stanford&apos;s &lt;a href=&quot;https://www.youtube.com/playlist?list=PL3FW7Lu3i5JvHM8ljYj-zLfQRF3EO8sYv&quot;&gt;CS231N: Convolutional Neural Networks for Visual Recognition&lt;/a&gt; is your spot for reading trends and tech in visual data. 👁️&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Decision Day&lt;/strong&gt;: Want to know how AI makes up its mind? &lt;a href=&quot;https://www.youtube.com/playlist?list=PLImtCgowF_ES_JdF_UcM60EXTcGZg67Ua&quot;&gt;Reinforcement Learning (Polytechnique Montreal, Fall 2021)&lt;/a&gt; is all about making smart choices. 🎲&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So there it is, darling. Your dream guide to going full tech queen. Just starting out or leveling up, these courses are your golden tickets in. Let&apos;s own this, one algorithm at a time! 💖&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;lt;div style={{ textAlign: &quot;center&quot;, paddingBottom: &quot;3rem&quot;, marginTop: &quot;5rem&quot; }}&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.95rem&quot;, letterSpacing: &quot;0.25em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#ffffff&quot;, margin: &quot;0 0 8px 0&quot;, fontWeight: &quot;900&quot; }}&amp;gt;
Tatiana Mikhaleva
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.75rem&quot;, letterSpacing: &quot;0.2em&quot;, textTransform: &quot;uppercase&quot;, color: &quot;#D4537E&quot;, margin: &quot;0 0 1rem 0&quot; }}&amp;gt;
Docker Captain &amp;nbsp;·&amp;nbsp; IBM Champion &amp;nbsp;·&amp;nbsp; AWS Community Builder
&amp;lt;/p&amp;gt;
&amp;lt;p style={{ fontSize: &quot;0.8rem&quot;, color: &quot;#9B2D5A&quot;, margin: &quot;0 0 2.5rem 0&quot;, fontStyle: &quot;italic&quot; }}&amp;gt;
DevOps.Pink — Signal over noise in cloud-native &amp;amp; AI.
&amp;lt;/p&amp;gt;
&amp;lt;div style={{ display: &quot;flex&quot;, justifyContent: &quot;center&quot;, gap: &quot;1rem&quot;, flexWrap: &quot;wrap&quot; }}&amp;gt;
&amp;lt;a href=&quot;https://www.youtube.com/channel/UCACxfwW1C8KQY1c6nU98VVw?sub_confirmation=1&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;YouTube&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://devops.pink/discord&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;Discord&amp;lt;/a&amp;gt;
&amp;lt;a href=&quot;https://www.linkedin.com/in/devopspink/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot; style={{ padding: &quot;0.6rem 1.5rem&quot;, border: &quot;1px solid #9B2D5A&quot;, color: &quot;#D4537E&quot;, textDecoration: &quot;none&quot;, fontWeight: &quot;bold&quot;, textTransform: &quot;uppercase&quot;, letterSpacing: &quot;0.15em&quot;, fontSize: &quot;0.8rem&quot;, borderRadius: &quot;2px&quot;, transition: &quot;all 0.3s ease&quot; }}&amp;gt;LinkedIn&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/p&gt;
</content:encoded><category>AI &amp; MLOps</category><category>ML</category><category>YouTube</category><category>Courses</category><author>Tatiana Mikhaleva (devops.pink)</author></item></channel></rss>