<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Distr</title>
    <description>The latest articles on DEV Community by Distr (@distr).</description>
    <link>https://dev.to/distr</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F7741%2F0697275f-69e8-4986-bd0b-20d39acf3cfa.png</url>
      <title>DEV Community: Distr</title>
      <link>https://dev.to/distr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/distr"/>
    <language>en</language>
    <item>
      <title>Should I Run Plain Docker Compose in Production in 2026?</title>
      <dc:creator>Philip Miglinci</dc:creator>
      <pubDate>Thu, 30 Apr 2026 13:13:57 +0000</pubDate>
      <link>https://dev.to/distr/should-i-run-plain-docker-compose-in-production-in-2026-1d5e</link>
      <guid>https://dev.to/distr/should-i-run-plain-docker-compose-in-production-in-2026-1d5e</guid>
      <description>&lt;p&gt;I am Philip—an engineer working at Distr, which helps software and AI companies distribute their applications to self-managed environments.&lt;br&gt;
Our Open Source Software Distribution platform is available on GitHub (&lt;a href="https://github.com/distr-sh/distr" rel="noopener noreferrer"&gt;&lt;code&gt;github.com/distr-sh/distr&lt;/code&gt;&lt;/a&gt;) and orchestrates both Docker Compose and Docker Swarm deployments on customer hosts every day.&lt;/p&gt;

&lt;p&gt;Most of the production incidents I have seen on Docker Compose hosts come from the same handful of quirks: an old container that should have been removed, a disk that filled up overnight, a health check that detected a problem and then did nothing about it, a &lt;code&gt;:latest&lt;/code&gt; tag that pointed somewhere new, or a socket mount nobody thought twice about. None of these are bugs in Docker. They are deliberate trade-offs in a tool that started as internal tooling at dotCloud, a PaaS company that wrapped LXC to fix "it works on my machine," and is now running the back end of a lot of real businesses. This post collects the recurring ones, with the commands and the operational answer for each.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short answer: yes—plain Docker Compose can still run real production workloads in 2026, but only if you handle the operational gaps it leaves yourself.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Where Plain Docker Compose Fits in Production
&lt;/h2&gt;

&lt;p&gt;Before the list of quirks, a quick word on the audience. Docker Compose is a declarative way to wire up a multi-container application: one YAML file describes the services, the networks between them, the volumes they share, the environment they need, and—through &lt;a href="https://distr.sh/blog/docker-compose-mount-config-files/" rel="noopener noreferrer"&gt;the patterns for overwriting or patching service configuration&lt;/a&gt;—the on-disk configuration each application expects. &lt;code&gt;docker compose up&lt;/code&gt; reconciles the host to that file. The sweet spot in production is the single-node deployment built around exactly that—a vendor pushing a multi-container application into a customer environment, an internal team running a long-tail service that does not justify a Kubernetes cluster, an edge box in a retail location. The footprint is small, the operational overhead is low, and a competent operator can reason about the whole stack from one &lt;code&gt;docker-compose.yaml&lt;/code&gt;. There is no control plane behind Compose itself—no scheduler watching the host, no reconciler reapplying state, no operator pushing updates from somewhere else. &lt;code&gt;docker compose up&lt;/code&gt; runs once and exits.&lt;/p&gt;

&lt;p&gt;That architectural simplicity is exactly why the quirks bite. Compose assumes you—or whoever runs the host—will do the operational work nothing else is doing, and if you ship Compose files to customers the safe assumption is that the customer will not. The rest of this post is about closing the gap between what Compose does and what a production host actually needs, either by hand or with an &lt;a href="https://distr.sh/docs/agents/docker-agent" rel="noopener noreferrer"&gt;agent&lt;/a&gt; that does it for you. If you have already concluded that the gap is too wide and want to compare with the next step up, read our &lt;a href="https://distr.sh/blog/docker-compose-vs-kubernetes/" rel="noopener noreferrer"&gt;Docker Compose vs Kubernetes&lt;/a&gt; breakdown.&lt;/p&gt;
&lt;h2&gt;
  
  
  Docker Compose Orphan Containers and &lt;code&gt;--remove-orphans&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Remove a service from &lt;code&gt;docker-compose.yaml&lt;/code&gt;, run &lt;code&gt;docker compose up -d&lt;/code&gt;, and the container you removed keeps running. It is detached from the project but still bound to the same networks and ports. &lt;code&gt;docker compose ps&lt;/code&gt; will not show it, because Compose only lists what is in the current file. &lt;code&gt;docker ps --filter label=com.docker.compose.project=&amp;lt;name&amp;gt;&lt;/code&gt; will, because Docker still has the label on the container. This is how you discover, six months in, that an old &lt;code&gt;worker&lt;/code&gt; service has been quietly consuming RAM since the last refactor.&lt;/p&gt;

&lt;p&gt;The fix is one flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--remove-orphans&lt;/span&gt;
docker compose down &lt;span class="nt"&gt;--remove-orphans&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The flag tells Compose: any container that was once part of this project but is no longer in the file should be removed. Networks Compose created for the project are reconciled the same way on each &lt;code&gt;up&lt;/code&gt;, so orphan networks go away too. Volumes are the exception—Compose preserves named volumes by default to protect data, and there is no per-service flag to drop the ones a removed service used. To reclaim that space you have to do it manually: list candidates with &lt;code&gt;docker volume ls --filter dangling=true&lt;/code&gt; and &lt;code&gt;docker volume rm&lt;/code&gt; by name, or use &lt;code&gt;docker compose down -v&lt;/code&gt; if you intend to wipe the project's volumes wholesale. To audit before deleting, list everything Docker still associates with the project name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="nv"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;com.docker.compose.project&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;--remove-orphans&lt;/code&gt; only touches containers that share the Compose project&lt;br&gt;
  label. It will not remove unrelated containers on the host. The risk is&lt;br&gt;
  bounded to containers Compose itself created earlier under this project name.&lt;/p&gt;

&lt;p&gt;Distr's Docker agent passes &lt;code&gt;RemoveOrphans: true&lt;/code&gt; on every Compose &lt;code&gt;Up&lt;/code&gt; call, so customer hosts never accumulate orphans across deployment updates. That single flag has eliminated a recurring class of "the old version is still answering on port 8080" support tickets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pruning Docker Images and Capping Container Logs
&lt;/h2&gt;

&lt;p&gt;Every &lt;code&gt;docker compose pull&lt;/code&gt; keeps the previous image on disk. Every container with the default &lt;code&gt;json-file&lt;/code&gt; log driver writes unbounded JSON to &lt;code&gt;/var/lib/docker/containers/&amp;lt;id&amp;gt;/&amp;lt;id&amp;gt;-json.log&lt;/code&gt;. On a busy host this is one of the most common reasons for an outage: the disk fills and Docker stops being able to write anything—logs, metadata, image layers—at which point containers start failing in confusing ways.&lt;/p&gt;

&lt;p&gt;The first thing to learn is the audit command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system &lt;span class="nb"&gt;df
&lt;/span&gt;docker system &lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;-v&lt;/code&gt; breaks the totals down per image, container, volume, and build cache, which is usually enough to spot the offender. From there, the targeted prune commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image prune &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;--filter&lt;/span&gt; &lt;span class="s2"&gt;"until=168h"&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt;   &lt;span class="c"&gt;# delete unused images older than 7 days&lt;/span&gt;
docker container prune &lt;span class="nt"&gt;-f&lt;/span&gt;                         &lt;span class="c"&gt;# remove stopped containers&lt;/span&gt;
docker builder prune &lt;span class="nt"&gt;-f&lt;/span&gt;                           &lt;span class="c"&gt;# drop the BuildKit cache&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;docker volume prune -f&lt;/code&gt; exists too, and it is genuinely useful, but read the next aside before you run it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;docker volume prune&lt;/code&gt; removes &lt;strong&gt;every volume not currently attached to a&lt;br&gt;
  container&lt;/strong&gt;, including named volumes you created on purpose. If you stop a&lt;br&gt;
  database container to do maintenance and run &lt;code&gt;docker volume prune&lt;/code&gt; while it is&lt;br&gt;
  down, you can lose its data. Use &lt;code&gt;docker volume ls --filter dangling=true&lt;/code&gt;&lt;br&gt;
  first to see what is actually unreferenced, and prefer named-volume management&lt;br&gt;
  over blanket prunes on production hosts.&lt;/p&gt;

&lt;p&gt;The other half of the disk story is logs. Cap them at the daemon level, once, in &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"log-driver"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"json-file"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"log-opts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"max-size"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"10m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"max-file"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After &lt;code&gt;systemctl restart docker&lt;/code&gt;, every new container will rotate its logs at 10 MB and keep at most three rotated files—30 MB ceiling per container, instead of "until the disk is gone." Existing containers need to be recreated to pick up the new defaults.&lt;/p&gt;

&lt;p&gt;This is one of the topics worth getting right before you ship.&lt;/p&gt;

&lt;p&gt;In Distr's Docker agent the cleanup is built in: each deployment target has an opt-out &lt;strong&gt;container image cleanup&lt;/strong&gt; setting that removes the previous version's images automatically after a successful update, with retries on failure. It only fires on success, so the previous image stays on disk if something goes wrong and you need to roll back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker Health Checks Don't Restart Unhealthy Containers
&lt;/h2&gt;

&lt;p&gt;This is the one that surprises people the most. You add a &lt;code&gt;HEALTHCHECK&lt;/code&gt; to your Dockerfile or a &lt;code&gt;healthcheck:&lt;/code&gt; block to the service in Compose, you watch the container go from &lt;code&gt;healthy&lt;/code&gt; to &lt;code&gt;unhealthy&lt;/code&gt;, and then... nothing happens. The Docker Engine reports the status. It does not act on it. &lt;code&gt;restart: unless-stopped&lt;/code&gt; is triggered by the container &lt;em&gt;exiting&lt;/em&gt;, not by it being marked unhealthy.&lt;/p&gt;

&lt;p&gt;You can confirm what Docker actually thinks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker inspect &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{{json .State.Health}}'&lt;/span&gt; &amp;lt;container&amp;gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see the status, the streak of failures, and the last few probe outputs—useful information that is silently ignored by the engine.&lt;/p&gt;

&lt;p&gt;There are three answers to this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run an autoheal sidecar.&lt;/strong&gt; The community standard is &lt;a href="https://github.com/willfarrell/docker-autoheal" rel="noopener noreferrer"&gt;&lt;code&gt;willfarrell/docker-autoheal&lt;/code&gt;&lt;/a&gt;: a tiny container that mounts the Docker socket, watches for &lt;code&gt;unhealthy&lt;/code&gt; events, and restarts the offending container. You opt containers in by labeling them &lt;code&gt;autoheal=true&lt;/code&gt; (or set &lt;code&gt;AUTOHEAL_CONTAINER_LABEL=all&lt;/code&gt; to monitor everything).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run on Docker Swarm.&lt;/strong&gt; Swarm restarts unhealthy tasks by default. If you are already considering Swarm, this is one of the better reasons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Distr.&lt;/strong&gt; Every Distr Docker agent deploys an adapted autoheal service alongside it. The "Enable autoheal for all containers" toggle is on by default at deployment-target creation, so customer-side restarts of unhealthy containers happen without anyone configuring it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In Distr the autoheal setting is fixed at deployment-target creation and&lt;br&gt;
  cannot be toggled later. If you need to change it on an existing target,&lt;br&gt;
  recreate the target. Worth knowing before you provision.&lt;/p&gt;

&lt;p&gt;Whichever path you pick, the takeaway is the same: a &lt;code&gt;HEALTHCHECK&lt;/code&gt; without something acting on it is a status light, not a self-healing system.&lt;/p&gt;



&lt;h2&gt;
  
  
  Pinning Docker Images by Digest Instead of &lt;code&gt;:latest&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Docker tags are mutable references. &lt;code&gt;myapp:1.4&lt;/code&gt; today is whatever the registry currently has under that tag; tomorrow it can point at a different layer set after a re-push. &lt;code&gt;:latest&lt;/code&gt; is the worst offender because everyone treats it as a synonym for "stable" when in practice it often means "whatever was pushed most recently." It is also the silent default: an unqualified &lt;code&gt;image: nginx&lt;/code&gt; in a Compose file is treated as &lt;code&gt;image: nginx:latest&lt;/code&gt;, so even Compose files that never type the word land on it by accident. The result, in production, is that two hosts pulling the "same" tag five minutes apart can end up running different code.&lt;/p&gt;

&lt;p&gt;The fix is to pin by content-addressable digest. Every image has one, and Docker accepts it anywhere a tag would go.&lt;/p&gt;

&lt;p&gt;To find the digest for an image you already pulled:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker image inspect &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{{index .RepoDigests 0}}'&lt;/span&gt; myapp:1.4
&lt;span class="c"&gt;# myapp@sha256:9b7c…&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or, without pulling, from the local Docker installation against the remote registry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker buildx imagetools inspect myapp:1.4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In your Compose file, replace the tag with the digest:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp@sha256:9b7c0a3e1f...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A pull against a digest fails fast if the registry no longer has those bytes, which is exactly what you want—silent drift becomes a loud error. The same image reference works in &lt;code&gt;docker stack deploy&lt;/code&gt;, in &lt;code&gt;docker run&lt;/code&gt;, and in Kubernetes manifests.&lt;/p&gt;

&lt;p&gt;For the broader picture of what your customers can extract from a published image (and why image hygiene matters beyond reproducibility), check out our guide on &lt;a href="https://distr.sh/blog/protect-source-code-docker-container/" rel="noopener noreferrer"&gt;protecting source code and IP in Docker and Kubernetes deployments&lt;/a&gt;. And if you're still picking a registry, our &lt;a href="https://distr.sh/blog/container-image-registry-comparison/" rel="noopener noreferrer"&gt;container registry comparison&lt;/a&gt; walks through the trade-offs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Mounting &lt;code&gt;/var/run/docker.sock&lt;/code&gt; Is a Security Risk
&lt;/h2&gt;

&lt;p&gt;A container with &lt;code&gt;/var/run/docker.sock&lt;/code&gt; mounted can call the Docker API, and the Docker API can launch a privileged container that mounts the host's root filesystem. In other words: any container with the socket has effectively root privileges on the host. This is not a Docker bug; it is the threat model of the socket. It deserves a moment of attention because the line that grants this access is one bind mount in a Compose file and is easy to add without thinking about it.&lt;/p&gt;

&lt;p&gt;Mounting &lt;code&gt;/var/run/docker.sock&lt;/code&gt; into a container is equivalent to giving that&lt;br&gt;
  container root privileges on the host. A &lt;code&gt;:ro&lt;/code&gt; flag does &lt;strong&gt;not&lt;/strong&gt; help—the&lt;br&gt;
  socket is bidirectional RPC, not a file you read. Treat every container that&lt;br&gt;
  mounts the socket the same way you would treat root SSH access to the host.&lt;/p&gt;

&lt;p&gt;Practical hygiene:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Inventory the containers that mount the socket.&lt;/strong&gt; Agents, CI runners, monitoring sidecars, container management UIs—keep the list short and intentional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run rootless Docker where possible.&lt;/strong&gt; &lt;a href="https://docs.docker.com/engine/security/rootless/" rel="noopener noreferrer"&gt;&lt;code&gt;dockerd-rootless-setuptool.sh install&lt;/code&gt;&lt;/a&gt; sets up a Docker daemon that runs as a regular user. The blast radius of a compromised socket-mounting container shrinks from "full host" to "this user account."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider socket-proxy.&lt;/strong&gt; Projects like Tecnativa's &lt;code&gt;docker-socket-proxy&lt;/code&gt; expose a filtered subset of the API to the container that needs it (e.g. read-only &lt;code&gt;containers&lt;/code&gt; and &lt;code&gt;events&lt;/code&gt; for monitoring) instead of the full socket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep socket-mounting images minimal.&lt;/strong&gt; Smaller surface, fewer libraries, fewer ways in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Distr Docker agent does mount the socket—it has to, in order to orchestrate Compose and Swarm on the host. We document that boundary openly in the &lt;a href="https://distr.sh/docs/agents/docker-agent" rel="noopener noreferrer"&gt;Docker agent docs&lt;/a&gt; so customer security teams can review it before installation. The agent authenticates to the Hub with a JWT, and the install secret is shown once and never stored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Updating Docker Compose Deployments Across Customer Hosts
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;docker compose pull &amp;amp;&amp;amp; docker compose up -d&lt;/code&gt; is a fine command if you are SSH'd into the host. At customer scale—dozens of self-managed environments behind firewalls, each with its own change-control process—that manual process doesn't scale. Docker has no built-in mechanism to push a new manifest to a running host from somewhere else. Docker Hub webhooks can trigger a CI rebuild when an image is pushed, but they do not reach into a customer's network and tell their &lt;code&gt;docker compose&lt;/code&gt; to pull.&lt;/p&gt;

&lt;p&gt;The usual workarounds and what they cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/containrrr/watchtower" rel="noopener noreferrer"&gt;Watchtower&lt;/a&gt;:&lt;/strong&gt; Polls the registry on a schedule, pulls new images, recreates containers. Easy to set up, hard to control. No staged rollout, no rollback path, limited visibility from your side—you find out a customer updated when they file a ticket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bastion + SSH + Ansible/scripts:&lt;/strong&gt; Works for ten customers. Falls apart at fifty, especially when three of them are air-gapped and four run their own change-control cadence. Every operator has to live with shared keys and a maintenance window calendar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A pull-based agent.&lt;/strong&gt; This is the shape Distr lands on. The agent runs on the customer host, polls a known endpoint every 5 seconds, and reconciles the local Compose state against what the Hub says it should be. The agent reports status back, so you can see in your dashboard which customers are on which version. When the agent itself needs to update, it spawns a separate container to perform the swap so it is not trying to replace itself while running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern is not unique—Kubernetes operators and GitOps tools do the same thing—but Compose users routinely re-invent it badly. If you find yourself building one, at least give it rollback, status reporting, and a way to pin versions, or you will end up with a fleet that drifts in ways you cannot see.&lt;/p&gt;

&lt;p&gt;The other thing worth noting: recurring scheduled jobs alongside the application have no native Compose answer either. If your stack includes anything like a nightly cleanup, a periodic report, or a heartbeat-style task, the in-app scheduler is one option, but you eventually run into the cases it can't cover (cross-service jobs, jobs that should outlive a single container). For the three patterns I have seen survive customer deployments, check out our guide on &lt;a href="https://distr.sh/blog/docker-compose-cron-jobs/" rel="noopener noreferrer"&gt;Compose cron jobs&lt;/a&gt;.&lt;/p&gt;



&lt;h2&gt;
  
  
  Outgrowing Docker Compose: Kubernetes vs Swarm
&lt;/h2&gt;

&lt;p&gt;If a single-node Compose deployment outgrows itself, the realistic next step for most teams is Kubernetes. The ecosystem is large, the operational patterns are well documented, and the talent pool to hire against actually exists. For the side-by-side, read our &lt;a href="https://distr.sh/blog/docker-compose-vs-kubernetes/" rel="noopener noreferrer"&gt;Docker Compose vs Kubernetes comparison&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Docker Swarm is the other option—it reuses the Compose YAML format, ships in the box, and solves a few of the quirks above directly (it restarts unhealthy tasks, rolls out updates with &lt;code&gt;update_config&lt;/code&gt;, and treats secrets and configs as first-class objects). It is a real fit for some single-cluster, low-ceremony deployments.&lt;/p&gt;

&lt;p&gt;Swarm is not an industry standard. Adoption has plateaued, third-party tooling&lt;br&gt;
  is thin, and most cloud providers have moved their managed offerings to&lt;br&gt;
  Kubernetes. It can still be the right call for a self-contained on-prem&lt;br&gt;
  cluster, but pick it eyes-open—for most teams outgrowing Compose, Kubernetes&lt;br&gt;
  is the safer long-term bet.&lt;/p&gt;

&lt;p&gt;The Distr agent supports both—the Hub records whether a deployment is Compose or Swarm, and the agent runs the matching &lt;code&gt;docker compose up&lt;/code&gt; or &lt;code&gt;docker stack deploy&lt;/code&gt;. If you do choose Swarm, read our &lt;a href="https://distr.sh/blog/docker-swarm-load-balancing-routing/" rel="noopener noreferrer"&gt;routing and Traefik guide for Docker Swarm&lt;/a&gt; and the &lt;a href="https://distr.sh/blog/distr-docker-swarm/" rel="noopener noreferrer"&gt;product walkthrough for distributing applications to Swarm&lt;/a&gt; for the details.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, should you run plain Docker Compose in production?
&lt;/h2&gt;

&lt;p&gt;Yes—plain Docker Compose still runs a lot of real production workloads in 2026, as long as you accept that "plain Compose" is shorthand for "Compose plus the operator practices it doesn't enforce." None of the quirks above are secret. They are all in Docker's documentation, in GitHub issues that have been open for years, and in the war stories of every team that has run Compose in anger. What makes them dangerous is not the quirks themselves but the order in which you discover them: usually at 2 a.m., one at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pass &lt;code&gt;--remove-orphans&lt;/code&gt; on every &lt;code&gt;compose up&lt;/code&gt; and &lt;code&gt;compose down&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Cap container logs in &lt;code&gt;daemon.json&lt;/code&gt; and prune images on a schedule. Be careful with &lt;code&gt;docker volume prune&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Health checks do not heal. Run an autoheal sidecar, run on Swarm, or use an agent that bundles one.&lt;/li&gt;
&lt;li&gt;Pin by &lt;code&gt;@sha256:...&lt;/code&gt; digest. Treat tags as references, not contracts.&lt;/li&gt;
&lt;li&gt;The socket is root. Inventory the containers that mount it; prefer rootless Docker.&lt;/li&gt;
&lt;li&gt;Updates need an agent of some kind. Watchtower is fine for one host; not for a fleet.&lt;/li&gt;
&lt;li&gt;When Compose stops being enough, Kubernetes is usually the right next step. Swarm is a narrower fit and worth picking eyes-open.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you ship software to self-managed customers and you would rather not rebuild this list yourself, the Distr Docker agent handles all of the above on the customer side. The &lt;a href="https://distr.sh/docs/agents/docker-agent" rel="noopener noreferrer"&gt;Docker agent documentation&lt;/a&gt; walks through the install, the socket model, the autoheal and image-cleanup defaults, and how the agent self-updates. The repository is on &lt;a href="https://github.com/distr-sh/distr" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>programming</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Alerts for self-hosted customer deployments</title>
      <dc:creator>Louis Weston</dc:creator>
      <pubDate>Tue, 17 Feb 2026 21:12:02 +0000</pubDate>
      <link>https://dev.to/distr/alerts-for-self-hosted-customer-deployments-487a</link>
      <guid>https://dev.to/distr/alerts-for-self-hosted-customer-deployments-487a</guid>
      <description>&lt;p&gt;TL;DR: &lt;a href="https://github.com/distr-sh/distr" rel="noopener noreferrer"&gt;Distr&lt;/a&gt; is an Open Source platform to distribute applications to on-prem, BYOC, and air-gapped customers. It now supports alerts so you get notified about failed updates, crash loops, or unreachable deployments before your customers do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Visibility Gap
&lt;/h2&gt;

&lt;p&gt;For your own application, you’ve got this figured out. Grafana alerts, PagerDuty, whatever. Something breaks in production, you know about it in minutes.&lt;/p&gt;

&lt;p&gt;For self-hosted customer deployments? Nothing. Radio silence unless they open a ticket.&lt;/p&gt;

&lt;p&gt;You have all this sophisticated monitoring for your own infrastructure, but the moment your software crosses over to customer-controlled environments, you’re flying blind. You find out things are broken when your customer tells you they’re broken. Sometimes days later.&lt;/p&gt;

&lt;p&gt;You can’t SSH into every customer deployment and tail logs. That doesn’t scale, and frankly, your customers probably wouldn’t let you even if you wanted to.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built
&lt;/h2&gt;

&lt;p&gt;Alerts in Distr work for both sides:&lt;/p&gt;

&lt;p&gt;Distr lets you configure alerts in the Vendor portal. Set them once, they apply everywhere. Or get granular if you want.&lt;/p&gt;

&lt;p&gt;For customers that manage and update the deployments themselves, you can enable alerts for them as well so they can configure their own alerts in the Customer portal.&lt;/p&gt;

&lt;p&gt;This dual approach matters because not all customer relationships look the same. Some of your customers want you monitoring their deployments—they’d rather you catch issues first and fix them proactively. Others prefer to run their own ops and want full control over who gets notified when.&lt;/p&gt;

&lt;p&gt;For example, you’ll get alerted if an update fails or gets stuck looping, if we lose contact with a deployment (network issues, dead instance, whatever), or if your app’s in a crash loop. We filter out normal restarts from successful updates though—no point spamming you about routine operations.&lt;/p&gt;

&lt;p&gt;The details on setting this up are in the alerts documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Helps
&lt;/h2&gt;

&lt;p&gt;The main thing is you catch issues before your customer does. That’s worth a lot.&lt;/p&gt;

&lt;p&gt;We had one customer who didn’t realize their deployments were in a crash loop for two days because the app was restarting fast enough that it looked “up” when they checked. With alerts, that would’ve been caught in the first 10 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you’re already using Distr, alerts are available now. Vendor settings for your side, customer portal for theirs. Takes about 30 seconds to configure.&lt;/p&gt;

&lt;p&gt;If you’re not using Distr yet and you’re dealing with software distribution to on-prem or customer-controlled infrastructure… well, &lt;a href="https://cal.glasskube.com/team/gk/demo" rel="noopener noreferrer"&gt;we should probably talk&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let us know what you think, we would love to hear from you or support us by leaving a star:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/distr-sh/distr" rel="noopener noreferrer"&gt;⭐ distr-sh/distr ⭐&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>opensource</category>
      <category>containers</category>
      <category>automation</category>
    </item>
    <item>
      <title>Glasskube Launch week #2: The wrap up</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Wed, 18 Sep 2024 10:15:00 +0000</pubDate>
      <link>https://dev.to/distr/glasskube-launch-week-2-the-wrap-up-39gp</link>
      <guid>https://dev.to/distr/glasskube-launch-week-2-the-wrap-up-39gp</guid>
      <description>&lt;p&gt;And just like that, our second launch week is in the books. Trying to emulate the success of companies like &lt;a href="https://supabase.com/launch-week" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; and &lt;a href="https://signoz.io/launch-week/" rel="noopener noreferrer"&gt;SigNoz&lt;/a&gt; is a tall order, especially for a team that's still new to the launch week game. But one thing's for sure: successful launch weeks are a skill acquired through experience, and finding what works specifically for your project. We learned a ton from this one, and we're confident that future launches will be even more impactful.&lt;/p&gt;

&lt;p&gt;The best part? This launch was already a resounding success, delivering immense value. Before we dive into the key actions and outcomes, here's a quick TL;DR for those in a hurry.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🚀 We shared a new feature everyday on &lt;a href="https://x.com/glasskube/status/1833226176556634316" rel="noopener noreferrer"&gt;X&lt;/a&gt; and &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7239000640167784448/?actorCompanyId=83055300" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, check them out here. &lt;/li&gt;
&lt;li&gt;💖 We got so much valuable support and feedback on Hacker News &lt;/li&gt;
&lt;li&gt;🥉 We came in 3rd on Dev Hunt &lt;/li&gt;
&lt;li&gt;🎉 We organised our first &lt;a href="https://lu.ma/xmanowsv?tk=7MBmoi" rel="noopener noreferrer"&gt;San Fransisco Kubernetes meetup&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;📈 We gathered some unexpected and exciting metrics and feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s take each item and explore them a little bit more in detail&lt;/p&gt;

&lt;h2&gt;
  
  
  A feature a day 📅
&lt;/h2&gt;

&lt;p&gt;The theme for this launch week was loud and clear: Glasskube is GitOps ready! Most of the features we showcased support our new GitOps functionalities in one way or another. If you remember just one thing, let it be this: thanks to our latest features, Kubernetes package management can now be handled the GitOps way.&lt;/p&gt;

&lt;p&gt;Eager to get started? Check out the &lt;a href="https://github.com/glasskube/gitops-template" rel="noopener noreferrer"&gt;Glasskube GitOps template&lt;/a&gt; for a working example of what's possible.&lt;/p&gt;

&lt;p&gt;Here's a quick recap of the features we shared:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Glasskube is &lt;a href="https://glasskube.dev/blog/launch-week-number-2/#1-glasskube-is-gitops-ready-with-argocd" rel="noopener noreferrer"&gt;"GitOps ready"&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The Glasskube &lt;a href="https://github.com/glasskube/gitops-template" rel="noopener noreferrer"&gt;GitOps template&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://glasskube.dev/docs/integration/renovate/" rel="noopener noreferrer"&gt;Renovate&lt;/a&gt; integration&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://glasskube.dev/products/hub/" rel="noopener noreferrer"&gt;Glasskube Hub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Glasskube &lt;a href="https://glasskube.dev/docs/design/package-scopes/" rel="noopener noreferrer"&gt;package scopes&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's dive deeper into each one!&lt;/p&gt;

&lt;h2&gt;
  
  
  Successful Show Hacker news launch 📰
&lt;/h2&gt;

&lt;p&gt;On Tuesday, we launched the GitOps template on &lt;a href="https://news.ycombinator.com/item?id=41502453" rel="noopener noreferrer"&gt;Show HN&lt;/a&gt;. We were blown away by the insightful engineers who gave it a go and came back with thought-provoking, challenging questions, the kind of feedback that's pure gold for us.&lt;/p&gt;

&lt;p&gt;Finding smart, generous people who dedicate time to giving valuable constructive feedback is rare, and we're incredibly lucky to have found it again in the Hacker News community.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsq8afg78g2m9sxolh4h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsq8afg78g2m9sxolh4h.png" alt="hacker news" width="633" height="87"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some of this feedback even sparked GitHub issues and Discord conversations that have been incredibly fruitful and will undoubtedly leave a lasting mark on the project. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not on the Glasskube Discord server? Join us &lt;a href="https://discord.gg/STk5Z3nFmT" rel="noopener noreferrer"&gt;here&lt;/a&gt;! &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Top 3 dev hunt 🚀
&lt;/h2&gt;

&lt;p&gt;Launch weeks are the perfect time to test assumptions and explore new platforms and tools. This time, we decided to give &lt;a href="https://devhunt.org/tool/glasskube" rel="noopener noreferrer"&gt;DevHunt&lt;/a&gt; a shot, a platform similar to Product Hunt, but tailored towards developer tools. While the audience is smaller than on sites like Product Hunt, we figured it was worth a try. After all, it's not just about quantity, but the quality of the members on the site. And I have to admit, if you're building a developer tool, you might get fewer upvotes on DevHunt, but the potential to find users who are closer to a perfect fit for your target persona is much higher. We're thrilled to have landed in 3rd place!&lt;/p&gt;

&lt;h2&gt;
  
  
  Our first every San Francisco meetup 🌉
&lt;/h2&gt;

&lt;p&gt;Why not mix it up any throw in an IRL event into the mix too. On Thursday we celebrated our first ever Kubernetes, DevOps and Security related meetup in San Francisco with more than 100+ sign-ups. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hjt28vrpvknhth2e2j8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6hjt28vrpvknhth2e2j8.png" alt="meetup" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We had three great speakers who took the stage to bring technically rich yet super egnaging talks on the following topics: &lt;/p&gt;

&lt;p&gt;​- &lt;a href="https://www.linkedin.com/in/gentele/" rel="noopener noreferrer"&gt;Lukas Gentele (Loft Labs)&lt;/a&gt;: Tenant Autonomy &amp;amp; Isolation In Multi-Tenant Kubernetes Clusters - A Comprehensive Guide&lt;br&gt;
​- &lt;a href="https://www.linkedin.com/in/pmigat/" rel="noopener noreferrer"&gt;Philip Miglinci (Glasskube)&lt;/a&gt;: The State of Package Management on Kubernetes&lt;br&gt;
​- &lt;a href="https://www.linkedin.com/in/ramiroberrelleza/" rel="noopener noreferrer"&gt;Ramiro Berrelleza (Okteto)&lt;/a&gt;: Your AI team doesn't need a platform, but a paved ramp sure can help!&lt;/p&gt;

&lt;p&gt;The turnout and the vibe were amazing. To cap the evening off we had a great networking session fueled by a generous amount of Pizza. We might have overdone it, but can you really ever have enough pizza? &lt;/p&gt;

&lt;p&gt;If you weren’t able to miss it, don’t worry. We will be organizing more and will make sure to explore other locations also. &lt;/p&gt;

&lt;p&gt;Thanks to everyone who joined!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc02tiurbe8y0srtas59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc02tiurbe8y0srtas59.png" alt="pizza picture" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community feedback 🗣️
&lt;/h2&gt;

&lt;p&gt;While there are amazing companies that pull off launch weeks with seemingly endless reach and impact, this section highlights why any project, at any stage, should embrace them. The truth is, no level of social media reach or post impressions can replace real, tangible community feedback and action.&lt;/p&gt;

&lt;p&gt;A perfect example from this launch week is a community member who challenged the very conception of one of our newest features by spurring a conversation via &lt;a href="https://github.com/glasskube/glasskube/discussions/1220" rel="noopener noreferrer"&gt;GitHub discussions&lt;/a&gt;. This type of feedback is invaluable to us, and we genuinely welcome it. It's one of the main reasons we feel this launch week was so worthwhile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reaching key metrics 📊
&lt;/h2&gt;

&lt;p&gt;Even though this launch week was primarily about sparking conversations with real Glasskube users and gathering feedback, we're happy to report some interesting key metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Over 100% website view growth&lt;/li&gt;
&lt;li&gt;Over 10% increase in real user installations&lt;/li&gt;
&lt;li&gt;2 days featured on the Show Hacker News page&lt;/li&gt;
&lt;li&gt;20+ Glasskube cloud signups&lt;/li&gt;
&lt;li&gt;+2 new Glasskube contributors&lt;/li&gt;
&lt;li&gt;Over 2400 impressions on Dev Hunt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Launch weeks are like a finely tuned orchestra playing in sync. Each day requires well-planned, prepared, and executed actions. As the week progresses, you build momentum, using it to amplify your message. We're excited to apply everything we've learned to our next launch. Nobody said launch weeks are easy, but with careful planning, scheduling, and execution, you can create a beautiful symphony.&lt;/p&gt;

&lt;p&gt;Thanks for joining us on this ride, and we'll see you at the next one!&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>cloud</category>
      <category>devops</category>
      <category>beginners</category>
    </item>
    <item>
      <title>2024: A new frontier for Kubernetes package management</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Mon, 19 Aug 2024 10:27:27 +0000</pubDate>
      <link>https://dev.to/distr/2024-a-new-frontier-for-kubernetes-package-management-28m5</link>
      <guid>https://dev.to/distr/2024-a-new-frontier-for-kubernetes-package-management-28m5</guid>
      <description>&lt;p&gt;2024 has been an action-packed year for &lt;a href="https://glasskube.dev/" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt;. In February, we launched a Kubernetes manager that was initially developed internally by our team following an unsuccessful product launch that failed to take off in part due to limitations in currently used package management tooling. After this lukewarm Kubernetes operator debut, Glasskube founders &lt;a href="https://www.linkedin.com/in/pmigat/" rel="noopener noreferrer"&gt;Philip&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/louisnweston/" rel="noopener noreferrer"&gt;Louis&lt;/a&gt; shared their launch post-mortem on Hacker News. They discovered that many others were experiencing similar frustrations with the existing package management solutions for Kubernetes. Recognizing this shared pain, a product pivot became inevitable, and the Glasskube package manager began to take shape.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z9kjsjsff7p8jtertau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8z9kjsjsff7p8jtertau.png" alt="the-start" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, it’s only mid-August of the same year, and we are already closing in on 1.5 million downloads, 2.6k GitHub stars, and 50+ contributors. We've witnessed significant growth in adoption, features, and use cases. As we continue to evolve, we wanted to take a moment to reflect on the work we've accomplished so far. This blog post serves as a comprehensive update, a flag in the road, to share everything you need to know about the current state of Glasskube, what’s on the horizon, and how you can help shape the future of Kubernetes package management.&lt;/p&gt;

&lt;p&gt;Welcome to the new frontier of Kubernetes Package Management.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why Kubernetes needs better package management
&lt;/h3&gt;

&lt;p&gt;Since its inception &lt;a href="https://kubernetes.io/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; as a container orchestration system has never stopped growing in popularity and its adoption keeps increasing. In recent years, the number of &lt;a href="https://landscape.cncf.io/" rel="noopener noreferrer"&gt;available packages&lt;/a&gt; has grown from about 100 to over 800. This growth by all means is very impressive and shows the maturity of the Kubernetes ecosystem, but it has also shined a light on the problems with current package management tools. Developers often struggle with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Complex and highly bespoke workflows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time-consuming and many times manual processes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An over-reliance on current package manager tooling that leave a lot to be desired.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues can lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;More work for operations teams&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Non-scalable workflows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Possible security risks&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's clear that Kubernetes needs a way to manage packages that evolve in the way that modern-day Kubernetes clusters are used, that is in a more automated and overall declarative way.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Glasskube?
&lt;/h3&gt;

&lt;p&gt;Glasskube is an open-source package manager made for Kubernetes. It aims to make installing, updating, and setting up packages easier and faster. In fact, it can be up to 20 times quicker than tools like Helm or Kustomize.&lt;/p&gt;

&lt;p&gt;Glasskube took ideas from easy-to-use package managers like &lt;code&gt;Homebrew&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt;. It offers two ways to manage packages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A graphical user interface (GUI)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq8s43psmq7iirfelktz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq8s43psmq7iirfelktz.png" alt="Glasskube-UI" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A command-line interface (CLI)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube serve # to access the Glasskube UI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Current tools: Helm and Kustomize
&lt;/h3&gt;

&lt;p&gt;Helm and Kustomize are two main tools for managing Kubernetes packages. They help set up and run applications in Kubernetes, but work differently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Helm&lt;/strong&gt; uses templates to create Kubernetes yaml files. It packages apps into "charts," which are sets of YAML files. Some of it’s benefits are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Configuring complex apps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It shines at app installation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rolling back changes is straightforward&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It’s highly adopted&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kustomize&lt;/strong&gt; takes a different approach and many times works in conjunction with Helm. It lets users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Set up basic app configurations&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add changes for different environments&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid complex templating&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Problems with existing tools
&lt;/h3&gt;

&lt;p&gt;While Helm and Kustomize are useful, they can cause issues for developers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Helm&lt;/strong&gt; can be tricky:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Hard to learn due to complex templates&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customizing apps for different setups can be confusing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CRD updates are not possible&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updates are clunky&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Helm is inherently one-sided, after installation its job is done.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kustomize&lt;/strong&gt; has its own problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;No built-in way to manage packages&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users need other tools to share their setups&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Handling complex dependencies can be hard&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Less automated than Helm for managing app lifecycles&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues show why a simpler package manager for Kubernetes is needed. This is where Glasskube comes in, aiming to make the whole process easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Care to support us?
&lt;/h3&gt;

&lt;p&gt;If this is the first time you've heard of Glasskube, we are working to build the next-generation &lt;code&gt;Package Manager for Kubernetes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="star-gif" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐️ Star us on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; 🙏&lt;/p&gt;

&lt;h2&gt;
  
  
  Glasskube explained
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How Glasskube works
&lt;/h3&gt;

&lt;p&gt;Glasskube makes managing Kubernetes packages easier. It offers two ways to use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A graphical interface (GUI)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A command-line interface (CLI)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Glasskube uses a central package repository called the &lt;a href="https://glasskube.dev/products/hub/" rel="noopener noreferrer"&gt;Glasskub Hub&lt;/a&gt; that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Aware of package dependencies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Works well with GitOps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Updates packages automatically&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allows for multiple public and private package repositories to be referenced   &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6so2y2e6c6crcnc9mqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6so2y2e6c6crcnc9mqu.png" alt="glasskube-archetecture" width="800" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Probably most importantly, Glasskube has client and server-side components. The server-side components constantly track the health status and desired state of the installed packages. The server-side components are the:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PackageController&lt;/strong&gt;: communicates with the Kubernetes API to deploy and reconcile packages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PackageInfoController:&lt;/strong&gt; reads package manifests from the configured backend package repositories to determine the state of truth of the cluster packages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Main features
&lt;/h3&gt;

&lt;p&gt;Glasskube has several key features:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjlf9dodm4focl1fwshl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzjlf9dodm4focl1fwshl.png" alt="main-features" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solving common issues
&lt;/h3&gt;

&lt;p&gt;Glasskube directly addressed gaps that other Kubernetes package managers have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It's easier to use than Helm, which can be hard for new users&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It handles dependencies better than Kustomize, which doesn't have built-in package management&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It works well with GitOps, making it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Roll back changes&lt;/li&gt;
&lt;li&gt;  Upgrade apps&lt;/li&gt;
&lt;li&gt;  Work together as a team&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Package scopes help to be more efficient with package installation and package sharing. Ex. if multiple packages depend on cert-manager, one instance will be enough to serve more than one package.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Have easy access to packages with frontends without having to manually portforward&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to set up Glasskube
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What you need to install
&lt;/h3&gt;

&lt;p&gt;Before you start, make sure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A working Kubernetes cluster, &lt;a href="https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Farm64%2Fstable%2Fbinary+download" rel="noopener noreferrer"&gt;minikube&lt;/a&gt; is an easy alternative for a quick local setup.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://kubernetes.io/docs/tasks/tools/" rel="noopener noreferrer"&gt;kubectl&lt;/a&gt; installed on your computer&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step-by-step installation guide
&lt;/h3&gt;

&lt;p&gt;Here's how to set up Glasskube:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install Glasskube CLI&lt;/strong&gt;: Open your terminal and run on MacOs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install glasskube/tap/glasskube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For other installation methods click &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bootstrap Glasskube&lt;/strong&gt; to install the server-side components by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube bootstrap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check the installation&lt;/strong&gt; Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure both Glasskube and the package-operator are installed and running the same version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube: v0.17.0
package-operator: v0.17.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Glasskube: Key functions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Access the GUI
&lt;/h3&gt;

&lt;p&gt;Glasskube makes it easy to add and remove packages in your Kubernetes cluster:&lt;/p&gt;

&lt;p&gt;To add a package:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install packages
&lt;/h3&gt;

&lt;p&gt;Any package available in the Glasskube hub is ready to be installed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube install &amp;lt;package-name&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;This command will then request confirmation on the package version before installing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To remove a package:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube uninstall &amp;lt;package-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Managing package dependencies
&lt;/h3&gt;

&lt;p&gt;Glasskube takes care of package dependencies for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;When you install a package, it automatically installs any required dependencies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This saves time and prevents errors from missing components&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;In the example below upon installing the &lt;code&gt;keptn&lt;/code&gt; package, an instance of cert-manager will also be installed if not already present in the cluster.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3z5pcy7noz2wws95uke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3z5pcy7noz2wws95uke.png" alt="keptn-dependency" width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Handling package configurations
&lt;/h3&gt;

&lt;p&gt;You can easily change or view package settings with Glasskube, note that &lt;strong&gt;not&lt;/strong&gt; &lt;strong&gt;all packages&lt;/strong&gt; have custom value configurations:&lt;/p&gt;

&lt;p&gt;In the example below, the caddy-ingress-controller has the &lt;code&gt;automaticHTTPS&lt;/code&gt; value exposed, where you can add an email address to enable HTTPS functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dbb62moogr8urn1v4u9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6dbb62moogr8urn1v4u9.png" alt="dependency-management" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Working with GitOps
&lt;/h3&gt;

&lt;p&gt;Glasskube works well in GitOps workflows, letting users control their Kubernetes packages desired state in Git means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Your Kubernetes package setup stays in sync with your files stored in Git&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can use tools like ArgoCD or Flux to apply the desired package state stored in Git&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Changes are easy to track and undo if needed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cluster setup can be achieved in minutes instead of hours.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have a fully operational Glasskube GitOps template &lt;a href="https://github.com/glasskube/gitops-template" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Follow the steps in the README.md file to get started.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automatic updates with Renovate
&lt;/h3&gt;

&lt;p&gt;Glasskube keeps packages in Glasskube hub always updated to the latest stable versions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enable &lt;code&gt;auto-updates&lt;/code&gt; or get notified when new versions are available&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shows package information including the current version and available versions for packages using &lt;code&gt;glasskube list&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Running &lt;code&gt;glasskube update &amp;lt;packageName&amp;gt;&lt;/code&gt; will install the newest available version of the package&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also updating manually through the GUI is also an option.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6c0fi0glc7vgcjyraqd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6c0fi0glc7vgcjyraqd.png" alt="open-button" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding custom package repositories
&lt;/h3&gt;

&lt;p&gt;You can now add multiple package repositories for Glasskube to read from, this is be useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Companies that have their own private package lists&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Teams who want to manage internal packages more easily&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It allows following compliance rules for private packages that can’t be exposed publicly&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add a public repository by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube repo add &amp;lt;name&amp;gt; &amp;lt;url&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add private repositories&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube repo add &amp;lt;name&amp;gt; &amp;lt;url&amp;gt; --auth (none|basic|bearer)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F260q7np0mgtxbr9whkx1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F260q7np0mgtxbr9whkx1.png" alt="multi-repo-diagram" width="664" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Glasskube vs. other package managers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How it differs from Helm and Kustomize
&lt;/h3&gt;

&lt;p&gt;Glasskube offers a new way to manage Kubernetes packages, addressing limitations found in older tools like Helm and Kustomize. It offers features such as two-way communication between the package and package manager, enhanced automation, and a more declarative approach to package management. Here's how Glasskube stands out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic Notifications:&lt;/strong&gt; Glasskube keeps track of installed versions and can automatically notify users of new installations, if desired.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Seamless CRD Updates:&lt;/strong&gt; It updates Custom Resource Definitions (CRDs) smoothly, ensuring everything remains in sync.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Full GitOps Integration:&lt;/strong&gt; Glasskube enables a complete GitOps workflow, which wasn't possible before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Efficient Control:&lt;/strong&gt; The additional layer of abstraction through package scopes allows for more efficient and granular control over package configuration and usage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Business service offerings
&lt;/h3&gt;

&lt;p&gt;Companies that offer commercial tools with self-hosting options often leave money on the table. Custom self-hosting installations and management might not be within your company’s expertise or bandwidth. A Glasskube Native package can be the solution you need. We can collaborate with you to create standardized, customizable, and highly scalable packages tailored for a variety of self-hosted environments, all using Glasskube packaging. This approach ensures a seamless experience for your customers while maximizing your revenue potential.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmernclzyw932cdwn8ug7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmernclzyw932cdwn8ug7.png" alt="Business-service-offerings" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you think that Glasskube Native packages could benefit your business, book a free &lt;a href="https://cal.glasskube.eu/team/founder/demo?date=2024-08-16&amp;amp;month=2024-08" rel="noopener noreferrer"&gt;demo call&lt;/a&gt; with us. Our team would be delighted to assist you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next for Glasskube
&lt;/h2&gt;

&lt;h3&gt;
  
  
  New features coming soon
&lt;/h3&gt;

&lt;p&gt;Glasskube is adding new tools to make package management easier:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xw98yi15y19q6lizoyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xw98yi15y19q6lizoyy.png" alt="new-features" width="800" height="206"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These new features will help users manage their Kubernetes packages better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;Kubernetes package management has been stagnant and unable to keep up with the fast growth and evolution of the general Kubernetes ecosystem. Glasskube aims to make Kubernetes package management easier, more declarative, flexible and far less reliant on rigid templating processes that require multiple tools to get the job done.&lt;/p&gt;

&lt;p&gt;As Glasskube grows, we will need help from users and developers to build in the right direction. What frustrates you the most about current Kubernetes package managers? How can we improve?&lt;/p&gt;

&lt;p&gt;For teams using Kubernetes, we hope tools like Glasskube will be increasingly adopted and applied in complex environments.&lt;/p&gt;

&lt;p&gt;2024 has been an incredible breakout year so far, but we have only just begun.&lt;/p&gt;




&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>cloud</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>The GitOps Kubernetes starter template that gets you set-up in minutes instead of hours</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Thu, 08 Aug 2024 15:13:45 +0000</pubDate>
      <link>https://dev.to/distr/the-gitops-kubernetes-starter-template-that-gets-you-set-up-in-minutes-instead-of-hours-91e</link>
      <guid>https://dev.to/distr/the-gitops-kubernetes-starter-template-that-gets-you-set-up-in-minutes-instead-of-hours-91e</guid>
      <description>&lt;p&gt;We have all heard off writers looking at a blank page for hours trying to get over writers block. For Kubernetes admins, setting up a brand new Kubernetes cluster can be just as daunting. &lt;br&gt;&lt;br&gt;
Especially when it involves configuring multiple elements like ArgoCD, a PostgreSQL database, monitoring tooling, and custom web apps.&lt;/p&gt;

&lt;p&gt;However, what if there was an easier way? Our new GitOps template is designed to make this process straightforward and hassle-free. It offers an easy to set up solution that requires almost no manual steps for a basic yet highly extendable GitOps setup. With this template, you can have your cluster up and running quickly and efficiently, allowing you to focus on what matters most, building and scaling your applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mhul4z53ot4yzr7ita5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8mhul4z53ot4yzr7ita5.png" alt="GitOps template" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re reading this, you likely already appreciate the benefits of GitOps and have a solid understanding of Kubernetes. However, until recently, there hasn’t been an elegant, standardized process for managing the packages installed in your Kubernetes clusters. That’s why we built one.&lt;/p&gt;

&lt;p&gt;Let’s put it to the test. With this template, ArgoCD, CloudNativePG and a simple bookmarking web app will be installed using the &lt;a href="https://glasskube.dev/" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; Package Manager and they’ll receive upgrades through a Renovate integration via pull requests. This future-proof setup is easy to maintain and ensures your clusters stay up-to-date effortlessly.&lt;/p&gt;
&lt;h3&gt;
  
  
  The next logical extension for infrastructure IaC
&lt;/h3&gt;

&lt;p&gt;There are clear frameworks, templates, and standards for provisioning infrastructure across almost all cloud providers, and even templates for provisioning Kubernetes clusters themselves. However, this is often where the smooth, paved Infrastructure as Code (IaC) road turns to gravel. Kubernetes admins are frequently left to their own devices to install, configure, and manage the packages within the Kubernetes cluster due to a lack of standardized and simple package management tooling.&lt;/p&gt;

&lt;p&gt;Converting package configurations to code and managing them through GitOps, as you would with internal applications, has proven difficult. We believe the Glasskube package is a significant step toward the much-needed standardization in this area.&lt;/p&gt;
&lt;h3&gt;
  
  
  What is a Glasskube package?
&lt;/h3&gt;

&lt;p&gt;A Glasskube package is a standardized unit for managing software deployments within Kubernetes clusters using the Glasskube Package Manager. It is defined by a &lt;code&gt;PackageManifest&lt;/code&gt;, which contains all necessary information for identifying, configuring and installing a package. This manifest can include a Helm resource or a link to a manifest. Dependencies between packages can be declared, ensuring all required components are present before installation.&lt;/p&gt;
&lt;h3&gt;
  
  
  Use ArgoCD to deploy Glasskube packages
&lt;/h3&gt;

&lt;p&gt;Helm charts or plain Kubernetes manifests lack the comprehensive framework that Glasskube packages offer for deploying resources declaratively in a reliable, consistent, and easily maintained way. In this demo, we’ll use the GitOps template to bootstrap a fresh Kubernetes cluster with an instance of ArgoCD, which will then be used to deploy all subsequent packages.&lt;/p&gt;

&lt;p&gt;Here’s what the cluster will look like.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr7au29qm1jesckkm1r9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frr7au29qm1jesckkm1r9.gif" alt="Diagram Gif" width="720" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Template diagram&lt;/p&gt;
&lt;h3&gt;
  
  
  Template structure
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;🔗 Link to&lt;/em&gt; &lt;a href="https://github.com/glasskube/gitops-template" rel="noopener noreferrer"&gt;&lt;em&gt;template&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The repository contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  a &lt;code&gt;bootstrap&lt;/code&gt; directory containing the initial/parent Argo Application, and the necessary Glasskube manifests.&lt;/li&gt;
&lt;li&gt;  a &lt;code&gt;packages&lt;/code&gt; directory containing the &lt;code&gt;ArgoCD&lt;/code&gt; ,&lt;code&gt;cloudnative-pg&lt;/code&gt; and &lt;code&gt;kube-prometheus-stack&lt;/code&gt; cluster packages.&lt;/li&gt;
&lt;li&gt;  an &lt;code&gt;apps&lt;/code&gt; folder containing a simple &lt;code&gt;shiori&lt;/code&gt; bookmarking web app. &lt;/li&gt;
&lt;li&gt;  the &lt;code&gt;renovate&lt;/code&gt; configuration file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Glasskube custom resources will only be picked up by ArgoCD after placing the package definition files inside the &lt;code&gt;packages&lt;/code&gt; directory.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;⚠️ Please do not delete/uninstall the argo-cd package, as this will also remove everything else!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Note that the parent application used to bootstrap (bootstrap/glasskube-application.yaml) will not be synced after the initial setup. If you want to change something about it, you will have to change the application via argo directly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cluster setup
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;p&gt;You will have to have access to an empty Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;The easiest would be creating a new Minikube cluster with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minikube start -p gitops
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;⚠️ Glasskube should&lt;/em&gt; &lt;strong&gt;&lt;em&gt;not yet be bootstrapped&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;in the cluster.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Install the Glasskube CLI
&lt;/h3&gt;

&lt;p&gt;Make sure to have at least Glasskube version 0.16.0 &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;installed&lt;/a&gt; locally. If you don’t, you can simply run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install glasskube/tap/glasskube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to use the template
&lt;/h3&gt;

&lt;p&gt;Use &lt;a href="https://github.com/glasskube/gitops-template" rel="noopener noreferrer"&gt;this&lt;/a&gt; repository as your GitOps template&lt;/p&gt;

&lt;p&gt;Create a public GitHub repository based on this starter template by clicking “Use this template“. You can move it and/or make it private afterward.&lt;/p&gt;

&lt;p&gt;Replace the placeholder &lt;strong&gt;repoURL&lt;/strong&gt; in your local GitOps repository&lt;/p&gt;

&lt;p&gt;Replace the default value of &lt;code&gt;repoURL&lt;/code&gt; to your repository url:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Line 12 in: &lt;code&gt;bootstrap/glasskube-application.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  Lines 11, 16 and 26 in: &lt;code&gt;bootstrap/glasskube/applicationset.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Bootstrap ArgoCD and Glasskube for your Kubernetes cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube bootstrap git --url &amp;lt;your-repo&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The result
&lt;/h3&gt;

&lt;p&gt;As a result, your cluster will be powered with GitOps capabilities by ArgoCD, as well as package management features by Glasskube. Argo manages itself, the Glasskube installation, as well as Glasskube packages — all of which you can now manage GitOps-style with this repo.&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;glasskube serve&lt;/code&gt; to open the Glasskube UI and either open the ArgoCD UI there, or with the command glasskube open argo-cd – but of course you can also use the Argo CLI. Follow the &lt;a href="https://argo-cd.readthedocs.io/en/stable/getting_started/#4-login-using-the-cli" rel="noopener noreferrer"&gt;ArgoCD docs&lt;/a&gt; to get and reset the password to log in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;💡 Note that it might take a couple of minutes to start up ArgoCD, and for the initial GitOps sync to happen.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this template, for demonstration purposes we’ve also installed the &lt;code&gt;cloudnative-pg&lt;/code&gt; and &lt;code&gt;kube-prometheus-stack&lt;/code&gt;clusterpackages and a bookmarking application (&lt;a href="https://github.com/go-shiori/shiori" rel="noopener noreferrer"&gt;shiori&lt;/a&gt;), which is making use of cloudnative-pg.&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing your cluster
&lt;/h3&gt;

&lt;p&gt;Both CLI and UI offer features to manage your cluster following GitOps best practices.&lt;/p&gt;

&lt;h4&gt;
  
  
  Using the CLI
&lt;/h4&gt;

&lt;p&gt;The relevant CLI commands offer the flags &lt;code&gt;--dry-run&lt;/code&gt; and &lt;code&gt;-o yaml&lt;/code&gt; which output the yaml object code which should then be pushed to your repository to be deployed.&lt;/p&gt;

&lt;h4&gt;
  
  
  Through the UI
&lt;/h4&gt;

&lt;p&gt;The UI, when installed with the above &lt;code&gt;glasskube bootstrap git&lt;/code&gt; command, will also output the &lt;code&gt;yaml&lt;/code&gt; objects which you can copy to use in your git repo, instead of applying your changes directly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Installing packages
&lt;/h3&gt;

&lt;p&gt;To install a ClusterPackage, e.g. cert-manager, use the install command like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube install cert-manager --dry-run -o yaml --yes &amp;gt; cert-manager.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of directly installing the ClusterPackage, this will write the ClusterPackage custom resource to the cert-manager.yaml file, which can now be put into a new directory &lt;code&gt;packages/cert-manager/&lt;/code&gt; in the git repository. Once pushed to the repo, ArgoCD will pick up the changes after at most 5 minutes, create the ArgoCD Application wrapping the Glasskube ClusterPackage. After that, the Glasskube operator will pick up the ClusterPackage and finally install it in the cluster.&lt;/p&gt;

&lt;p&gt;Similarly, when using the Glasskube UI, one can generate the ClusterPackage resource by using the “Show YAML” button on the page of the ClusterPackage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Updating packages
&lt;/h3&gt;

&lt;p&gt;There are two options handling package version updates:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Manually&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Using the &lt;code&gt;glasskube update --dry-run -o yaml&lt;/code&gt; command, or the corresponding button on the Glasskube UI. And then pushing to your repo as seen before. &lt;br&gt;&lt;br&gt;
The downside of doing it that way, is that someone has to manually execute the command, even though checking for updates and preparing the updates to the git repository as an automatable task.&lt;/p&gt;
&lt;h4&gt;
  
  
  Automatically with Renovate
&lt;/h4&gt;

&lt;p&gt;Once Renovate is &lt;a href="https://github.com/renovatebot/renovate" rel="noopener noreferrer"&gt;integrated&lt;/a&gt; to track your GitOps repo, it will look for Glasskube packages and compare their versions to the official package repositories. When new versions are available, it will automatically open a PR. Once merged, you’ll be running the latest versions of your packages.&lt;/p&gt;
&lt;h3&gt;
  
  
  Uninstalling packages
&lt;/h3&gt;

&lt;p&gt;To uninstall a package or a &lt;code&gt;ClusterPackage&lt;/code&gt;, simply remove the custom resource from the git repository.&lt;/p&gt;
&lt;h3&gt;
  
  
  Updating Glasskube
&lt;/h3&gt;

&lt;p&gt;When a new Glasskube version is available, the manifests have to be updated. To update the Glasskube manifests in your git repo, run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube bootstrap --dry-run -o yaml --force &amp;gt; bootstrap/glasskube/glasskube.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After reviewing and merging those changes the update will be picked up by ArgoCD. The &lt;code&gt;--force&lt;/code&gt; flag is necessary for the command to continue manifest validation, even though failures occur.&lt;/p&gt;

&lt;h3&gt;
  
  
  Working with Apps
&lt;/h3&gt;

&lt;p&gt;This template also contains a demo application: a bookmark manager called &lt;a href="https://github.com/go-shiori/shiori" rel="noopener noreferrer"&gt;shiori&lt;/a&gt;.&lt;br&gt;
Its manifests are defined in &lt;code&gt;apps/shiori&lt;/code&gt;, which is a pattern you can follow for your own custom applications.&lt;/p&gt;

&lt;p&gt;In a minikube environment, two manual steps are required to access the application (for more information consult the &lt;br&gt;
&lt;a href="https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/" rel="noopener noreferrer"&gt;minikube docs&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;minikube addons enable ingress -p gitops&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;minikube ip -p gitops&lt;/code&gt; and add the line &lt;code&gt;&amp;lt;your-IP&amp;gt; my-shiori.example&lt;/code&gt; to your &lt;code&gt;/etc/hosts&lt;/code&gt; file. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After that you will be able to access the application via &lt;a href="http://my-shiori.example" rel="noopener noreferrer"&gt;http://my-shiori.example&lt;/a&gt; in your browser. &lt;br&gt;
The default login credentials are &lt;code&gt;shiori&lt;/code&gt; / &lt;code&gt;gopher&lt;/code&gt; – for more information check the &lt;a href="https://github.com/go-shiori/shiori/tree/master/docs" rel="noopener noreferrer"&gt;shiori docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In general, you can use the &lt;code&gt;apps&lt;/code&gt; directory to deploy such custom applications into your cluster. Any subdirectory will be&lt;br&gt;
picked up by ArgoCD and grouped as an &lt;code&gt;Application&lt;/code&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring with &lt;code&gt;kube-prometheus-stack&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;This template also installs the &lt;code&gt;kube-prometheus-stack&lt;/code&gt; clusterpackage, which is an easy way to get started with monitoring your cluster. You can open Grafana with &lt;code&gt;glasskube open kube-prometheus-stack&lt;/code&gt;. It does not come preconfigured in this example, but you can easily add a nice postgres dashboard and observe the metrics of the database while you are working with the bookmarking application.&lt;/p&gt;

&lt;h4&gt;
  
  
  Setting up a postgres dashboard
&lt;/h4&gt;

&lt;p&gt;We are going to make use of the &lt;a href="https://grafana.com/grafana/dashboards/20417-cloudnativepg/" rel="noopener noreferrer"&gt;cloudnativepg dashboard&lt;/a&gt;.&lt;br&gt;
Import it by opening the &lt;a href="http://localhost:8888/dashboard/import" rel="noopener noreferrer"&gt;dashboard-import page&lt;/a&gt;, pasting&lt;br&gt;
&lt;a href="https://grafana.com/grafana/dashboards/20417-cloudnativepg/" rel="noopener noreferrer"&gt;https://grafana.com/grafana/dashboards/20417-cloudnativepg/&lt;/a&gt;&lt;br&gt;
into the first textfield, and pressing "Load". Use the "Prometheus" data source on the following screen and finish the import process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faltn1dz7oypxf9i0bggi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faltn1dz7oypxf9i0bggi.png" alt="CloudNativePG dashboard" width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course monitoring your experimental minikube cluster is a bit of an overkill, but this is simply to demonstrate how these kind of cluster administration tasks can be integrated into this gitops stack. &lt;/p&gt;

&lt;h3&gt;
  
  
  Template setup walkthrough
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Xbs2Tq-dgbI"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;h3&gt;
  
  
  Upcoming Features
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Private Repo Support
&lt;/h4&gt;

&lt;p&gt;We are aware that GitOps repositories should not be public, but for simplicity we omitted this feature in the first version of the new GitOps-bootstrap command. Supporting private repos with authentication of course has high priority for the upcoming releases. We will also replace the repoURL automatically, such that you don’t need to this step manually when setting up the repo.&lt;/p&gt;

&lt;h4&gt;
  
  
  Improved Renovate Integration
&lt;/h4&gt;

&lt;p&gt;As described above, the renovate integration currently is regex-based, and it does not consider dependencies yet. However, we don’t see these shortcomings as a blocker and recommend to try out the renovate integration in the Glasskube/Argo Gitops setup.&lt;/p&gt;

&lt;h4&gt;
  
  
  Improved Dependency Resolution
&lt;/h4&gt;

&lt;p&gt;Installing packages with dependencies is not 100% GitOps-compatible yet, as the dependencies will be created by the operator. Consider this: To install a &lt;code&gt;ClusterPackage &amp;lt;P&amp;gt;&lt;/code&gt; that has a dependency on &lt;code&gt;D&lt;/code&gt;, one would do &lt;code&gt;glasskube install &amp;lt;P&amp;gt; --dry-run -o yaml&lt;/code&gt;, which would output the &lt;code&gt;ClusterPackage&lt;/code&gt; custom resource for &lt;code&gt;&amp;lt;P&amp;gt;&lt;/code&gt;. However, the dependency &lt;code&gt;D&lt;/code&gt; will only be resolved at reconciliation time by the package operator, and will therefore not be represented in the git repository at all.&lt;/p&gt;

&lt;p&gt;A temporary workaround would be to have a closer look at the output of the install command, which also shows the dependencies which will be installed and in which version. One could then manually add the required packages custom resources to the git repo as well. However, this will be tackled in a future version to make the user experience better, see this &lt;a href="https://github.com/glasskube/glasskube/issues/430" rel="noopener noreferrer"&gt;issue&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;With this template repository and guide we show how Glasskube can easily be set up in a ArgoCD powered Gitops environment, and how efficient package management is possible with this stack. Additionally we install a web application to show how custom applications can make use of the Gitops setup and Glasskube packages.&lt;/p&gt;

&lt;p&gt;This is a first concept with some minor shortcomings, but we will continue to improve GitOps support. &lt;/p&gt;

&lt;h3&gt;
  
  
  Feedback
&lt;/h3&gt;

&lt;p&gt;We love feedback! Whether you are just starting out or you are a seasoned professional, we'd like to hear your thoughts, inputs and questions regarding this starter template and corresponding guide here, in the &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;glasskube/glasskube repo&lt;/a&gt; or on our &lt;a href="https://discord.gg/SxH6KUCGH7" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;. Thanks!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloud</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why building an IDP for Series A companies doesn't make sense</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Wed, 07 Aug 2024 10:21:01 +0000</pubDate>
      <link>https://dev.to/distr/why-building-an-idp-for-series-a-companies-doesnt-make-sense-36d4</link>
      <guid>https://dev.to/distr/why-building-an-idp-for-series-a-companies-doesnt-make-sense-36d4</guid>
      <description>&lt;p&gt;CTO of a Series A company? Before reading on, just give yourself a quick pat on the back. What you and your team have done so far is no easy task, so fair play to you.&lt;/p&gt;

&lt;p&gt;Realistically though, the work is far from done. Many scaling and growth decisions lay ahead and probably more questions than clear convictions.&lt;/p&gt;

&lt;p&gt;You might be tempted to preemptively adopt tooling and processes, positioning your engineering team for the potential growth to come. In this piece we’ll explain why you are more likely to succeed by doubling down on what brought you to this point over adopting new processes or fancy Internal Developer platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting the right foundations
&lt;/h3&gt;

&lt;p&gt;Series A companies are exciting environments to be in, usually a reasonable influx of new faces join the company, processes are increasingly standardised and overall, there is a progressive company-wide maturity that is starting to take hold. The instinct to mature the engineering org is understandable but nonetheless ill placed.&lt;/p&gt;

&lt;p&gt;No level of maturity or sophisticated tooling can compensate for a lack of Product Market Fit (PMF). Validating PMF across markets should be top of mind at this stage above all else. Elusive as it may be, your best chance of achieving it is staying agile, delivering rapidly and maintaining tight feedback loops.&lt;/p&gt;

&lt;p&gt;The idea of planning for future scalability might be appealing, especially with the buzz around platform engineering and the availability of ready-made internal developer platform (IDP) solutions. However, it’s crucial to understand why these options might not be the right choice for you right now. Let’s delve into the reasons why an IDP isn’t the change you think you need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9zex3wen2xz0ehqkajx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy9zex3wen2xz0ehqkajx.png" alt="platform-engineering" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is an IDP?
&lt;/h3&gt;

&lt;p&gt;An IDP is a self-service layer build on top of your organisation’s infrastructure, that enables your developer teams to deploy and manage applications without the need to have in-depth infrastructure knowledge or relying on the help of traditional infrastructure engineers. It aims to provide consistency, automation, and speed by standardizing workflows and environments as the organization grows.&lt;/p&gt;

&lt;p&gt;Think of an IDP as an internal product maintained by DevOps or Platform engineers, who essentially serve their own customer base, your development teams. To understand why adopting an IDP might be counterproductive for a Series A company, it’s essential to understand why IDPs emerged in the first place.&lt;/p&gt;

&lt;p&gt;As companies expand, so do their engineering teams. In large enterprises, maintaining code quality, keeping up with infrastructure requirements and sustaining deployment velocity is hard if operations teams can’t keep up. IDPs were designed to remove reliance on traditional operations teams, to rely on a platform that actively evolves to fit their needs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;A few assumptions are important to point out here:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You have the resources to maintain a completely new product (the IDP). &lt;strong&gt;&lt;em&gt;You probably don’t.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You have already scaled the engineering org and now need to optimise it. &lt;strong&gt;&lt;em&gt;You probably haven’t and don’t need to.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe72c4qd0rdet9cj60mnu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe72c4qd0rdet9cj60mnu.png" alt="graph-1" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What should Series A companies care about?
&lt;/h3&gt;

&lt;p&gt;Before going on about the types of tools and processes your shouldn’t care about, let’s take a more proactive approach and focus on things that will actually move the needle.&lt;/p&gt;

&lt;h4&gt;
  
  
  The right team
&lt;/h4&gt;

&lt;p&gt;You need a group of people who can run themselves, have the expertise to automate infrastructure related tasks and are open to working in flexible and not overly standardised structures. They should be the ones who propose changes and implement them as needed.&lt;/p&gt;

&lt;h4&gt;
  
  
  Finding and validating PMF
&lt;/h4&gt;

&lt;p&gt;By the time you are at a Series A level you have surely caught the scent of where you might find PMF. Do not let up, ship fast and communicate intensely with your target audience to validate your market assumptions. There is no reward in finding a gap in the market alone, you have to occupy it. Maintain development velocity to increasingly occupy the gap you have identified.&lt;/p&gt;

&lt;h4&gt;
  
  
  Staying agile and flexible
&lt;/h4&gt;

&lt;p&gt;The engineering team, like all teams within the company, should be unequivocally aligned with one primary objective: enabling the business. The engineering team sits at the centre of a short but tightly knit feedback loop which includes sales, feature ideation, feature development, deployment, and gathering feedback. Ideally, the sales team is working flat out, and customer service is maintaining close contact with customer. For the engineering team to keep it’s end of the bargain, it has to stay flexible and agile, ready to respond quickly the other teams inputs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbr6c8ryk7q7qrefs46f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbr6c8ryk7q7qrefs46f.png" alt="graph-2" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Focusing on customer facing products only
&lt;/h4&gt;

&lt;p&gt;Even though we’ve mentioned this before, it’s important to emphasise that an IDP is a fully-fledged product that needs to be created, maintained, and evolved to meet the changing needs of internal developers over time. Focusing on an internal product like this can detract from the attention and resources needed for your customer-facing products, which ultimately bring you in closer contact with PMF and customer satisfaction.&lt;/p&gt;

&lt;h4&gt;
  
  
  Building the right culture
&lt;/h4&gt;

&lt;p&gt;This is a point that should not be overlooked. Regardless of your company’s stage, evolution is always and ongoing dynamic. A culture of alignment, healthy communication principles, and a focus on shared goals is the bedrock that must serve as a base for the discussions about architecture, tooling, and process definitions which enable said evolution. Collective buy-in can only happen if a meaningful shared culture exists.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should a Series A CTO not be thinking about?
&lt;/h3&gt;

&lt;p&gt;It’s not un-common to hear people report having learned more from their bad managers than from their good ones. Why might that be? Because knowing what not to do can sometimes be more important the the opposite.&lt;/p&gt;

&lt;h4&gt;
  
  
  Don’t maintaining internal products
&lt;/h4&gt;

&lt;p&gt;Any time spend not addressing requests from your product and sales teams and hopefully your customers is time wasted.&lt;/p&gt;

&lt;p&gt;Any time spend that doesn’t involve delivering a better experience than your competitors is a mistake.&lt;/p&gt;

&lt;h4&gt;
  
  
  Avoid large engineering teams
&lt;/h4&gt;

&lt;p&gt;Just because the rest of the company is growing doesn’t mean the engineering team has to expand at the same rate. Those who praise the magic that can be harnessed by keeping &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fposthog.com%2Fnewsletter%2Fsmall-teams" rel="noopener noreferrer"&gt;engineering teams small&lt;/a&gt; are on to something.&lt;/p&gt;

&lt;p&gt;At this stage, as you may be bringing on your first DevOps engineers, ensure they integrate into a compact, developer-focused team with a single leader to avoid unnecessary managerial layers, allowing for open communication and quick decisions to be made.&lt;/p&gt;

&lt;h4&gt;
  
  
  Forget about perfection
&lt;/h4&gt;

&lt;p&gt;It’s not news to you that shipping quickly and continuously improving over time is the best way to build a product that eventually wins market share and meets customer expectations. Why would scaling engineering teams be any different? Trying to implement an Internal Developer Platform too soon runs contrary to those principles. There will be a time when you will build one out but let that process happen iteratively in a gradual manner. You have others things to worry about in the meantime.&lt;/p&gt;

&lt;h3&gt;
  
  
  You are on the right track
&lt;/h3&gt;

&lt;p&gt;Reaching a Series A funding round is not the end goal for anybody, you have a lot of room for growth. PMF is more than likely not locked down and occasional engineering bottlenecks should be dealt with on a case by case basis. Now is the time to double down on the strengths and keep on improving you capacity to identify your customer and increase user satisfaction.&lt;/p&gt;

&lt;p&gt;There will be a time to look inwards and improve internal engineering processes, and IDP might make sense in the future, but at this moment in time your limited engineering output should be laser focused on staying lean.&lt;/p&gt;

&lt;p&gt;Implementing internal products that don’t directly enable the business too soon have the potential for dire consequences. Approximately 35% of series A funded startups &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fluisazhou.com%2Fblog%2Fstartup-failure-statistics%2F%23%3A~%3Atext%3DIf%2520a%2520startup%2520makes%2520it%2Cof%252012%2520to%252018%2520months." rel="noopener noreferrer"&gt;fail&lt;/a&gt; before Series B, a lot is at stake.&lt;/p&gt;

&lt;p&gt;No need to worry though, you have made it this far, don’t give into platform engineering FOMO, put you head down and keep doing what you’ve been doing, because it’s working.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We would love to hear from you, what are your thoughts? when is an organization really ready for an IDP?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>programming</category>
      <category>cloud</category>
      <category>startup</category>
    </item>
    <item>
      <title>20 Life hacks for DevOps Engineers</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Tue, 23 Jul 2024 09:29:37 +0000</pubDate>
      <link>https://dev.to/distr/20-life-hacks-for-devops-engineers-3dn7</link>
      <guid>https://dev.to/distr/20-life-hacks-for-devops-engineers-3dn7</guid>
      <description>&lt;p&gt;Tricks of the trade, hacks, trade secrets, cheat sheets, best practices, call them what you will. Every industry has them, and anyone who sticks around long enough builds an arsenal of techniques and finely tuned tools to excel at their job.&lt;/p&gt;

&lt;p&gt;Some things simply take time to master. My dad, a retired builder, could tile a medium-sized bathroom in under an astonishing three hours, while it would take me a full day just to do the grouting afterwards. Experience is key for certain skills, but there are also tips that don’t require years of practice to acquire.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5djnf7s7qtanf42u8hn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5djnf7s7qtanf42u8hn.webp" alt="gif" width="262" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DevOps is no different. There are no shortcuts to becoming a god-tier DevOps savant, put the years in and you might just get there. Having said that, there are some tricks of the trade, life hacks and useful tooling that are sure to give you an instant boost in productivity.&lt;/p&gt;

&lt;p&gt;Here is my non-comprehensive list of life hacks guaranteed to make any DevOps engineer’s life easier.&lt;/p&gt;

&lt;p&gt;The list is broken down into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Tooling 🧰
&lt;/li&gt;
&lt;li&gt;  Skills 🤸
&lt;/li&gt;
&lt;li&gt;  Habits 🔁
&lt;/li&gt;
&lt;li&gt;  Scripts, configs and extensions 💻&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tooling: 🧰
&lt;/h2&gt;

&lt;p&gt;Did you know that if you really want to get somebodies attention in Germany, &lt;a href="https://www.npr.org/2024/05/09/1250136510/germany-has-a-reputation-for-efficiency-so-why-do-fax-machines-remain-popular" rel="noopener noreferrer"&gt;sending a fax&lt;/a&gt; is your best bet? &lt;br&gt;
Also, in Japan up until this year, &lt;a href="https://www.abc.net.au/news/2024-07-10/japan-eliminates-use-of-floppy-disks/104077114" rel="noopener noreferrer"&gt;floppy disks&lt;/a&gt; were still in use by government institutions. &lt;/p&gt;

&lt;p&gt;Knowing which context you find yourself in is essential to then choose the best tools for the job. Even though it’s important not to obsess over having the best, newest, or shiniest tool on the market. The following tools can be real game-changers for DevOps engineers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You don’t need to be the sharpest tool in the shed to use the sharpest tools in the shed" - Anonymous (I might have made it up)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3x70y8c34btmgmth4ou.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp3x70y8c34btmgmth4ou.gif" alt="gif-2" width="480" height="268"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  1. k9s
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://k9scli.io/" rel="noopener noreferrer"&gt;K9s&lt;/a&gt; is a terminal-based UI for interacting with your Kubernetes clusters. It takes very little time to get accustomed to navigating, observing, and managing your live applications through the tool. And once you do, you might never go back. K9s continually monitors Kubernetes for changes and offers many useful commands to interact with your observed resources.&lt;/p&gt;

&lt;p&gt;Link to &lt;a href="https://k9scli.io/topics/install/" rel="noopener noreferrer"&gt;instal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qk2ahx3y75ho015a0mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5qk2ahx3y75ho015a0mo.png" alt="k9s" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  2. tmux
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/tmux/tmux/wiki" rel="noopener noreferrer"&gt;tmux&lt;/a&gt; is a powerful terminal multiplexer that enhances productivity by allowing session persistence, window and pane management, and customization through key bindings and configuration files. It supports scripting for automation, facilitates collaboration with shared sessions, and integrates well with various shells and tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g9z9v1la2z1is08ti6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g9z9v1la2z1is08ti6x.png" alt="tmux" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Glasskube
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; is an Open Source package manager for Kubernetes. It makes deploying, updating, and configuring packages on Kubernetes &lt;strong&gt;20 times faster&lt;/strong&gt; than tools like &lt;strong&gt;Helm or Kustomize&lt;/strong&gt;. Inspired by the simplicity of Homebrew and npm. You can decide if you want to use the Glasskube UI, CLI, or directly deploy packages via GitOps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzyje56hrgu3i75phal5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzyje56hrgu3i75phal5.png" alt="glasskube-dash" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Care to support us?
&lt;/h3&gt;

&lt;p&gt;If this is the first time you've heard of Glasskube, we are working to build the next generation &lt;code&gt;Package Manager for Kubernetes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="star-gif" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐️ Star us on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; 🙏&lt;/p&gt;
&lt;h3&gt;
  
  
  4. ripgrep
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/BurntSushi/ripgrep" rel="noopener noreferrer"&gt;Riggrep&lt;/a&gt; is a powerful search tool known for its speed, flexibility, and user-friendly output. It quickly processes large codebases using advanced algorithms, supports a wide range of search patterns, and presents clear, highlighted results. Riggrep integrates well with other tools, is cross-platform, and customizable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx33jvnbgbdzd4li38p9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx33jvnbgbdzd4li38p9x.png" alt="ripgrep" width="769" height="295"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5. Firefox containers for multi cloud account access
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/" rel="noopener noreferrer"&gt;Firefox Multi-Account Containers&lt;/a&gt; is a such an underestimated browser extension for it's utility. It helps manage online activity by separating websites into different containers or tabs, preventing sessions tracking across sites. It’s most useful feature is that it allows users to log into multiple accounts simultaneously within the same browser. By isolating sessions through cookie separation, it protects personal data and improves the overall browsing experience. Have multiple AWS accounts? Not an issues, you can log in to all of them from the same browser window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxr7uji0zrxekr3bt0arq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxr7uji0zrxekr3bt0arq.png" alt="firefox-tabs" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  6. VPA
&lt;/h3&gt;

&lt;p&gt;Vertical Pod Autoscaler (VPA) frees users from the necessity of setting up-to-date resource limits and requests for the containers in their pods. When configured, it will set the requests automatically based on usage and there after allow proper scheduling onto nodes so that appropriate resource amounts are available for each pod.&lt;/p&gt;

&lt;p&gt;Install it &lt;a href="https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler#install-command" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Example config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       my-app
  updatePolicy:
    updateMode: "Auto"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7. Kctx and Kubens
&lt;/h3&gt;

&lt;p&gt;Is just hand’s down the most useful CLI tool for Kubernetes context and Namespace switching.&lt;/p&gt;

&lt;p&gt;Install it &lt;a href="https://github.com/ahmetb/kubectx" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfovv5rex6xirw0o7ltx.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfovv5rex6xirw0o7ltx.gif" alt="kubectx" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  8. ChatGPT for guidance
&lt;/h3&gt;

&lt;p&gt;Use &lt;a href="https://chatgpt.com/" rel="noopener noreferrer"&gt;ChatGPT&lt;/a&gt; as if it were a senior member on your team who is never busy and always happy to answer all of your questions. Make sure your intention is deeper understanding and not blind task resolution.&lt;/p&gt;

&lt;p&gt;Prime ChatGPT to be a senior team member with a prompt like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You will act as a Senior DevOps Engineer to provide life hacks and tips on how to excel in the field of DevOps. You will also be ready to help junior team members with any questions they might have. Please include practical advice, recommended tools, and best practices for managing infrastructure and continuous integration/continuous deployment (CI/CD) pipelines. Write the output using my communication style, which is clear, concise, and practical. Here are examples of my communication style:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;"Focus on automating repetitive tasks to save time and reduce errors."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Leverage tools like Docker and Kubernetes for containerization and orchestration."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Always monitor system performance and be proactive in identifying potential issues."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"When mentoring juniors, be patient and explain concepts in simple terms."&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Here are some questions you can ask ChatGPT to further fine tune the prompt:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Do you want the advice and explanations to cater more to beginner-level juniors or those with some experience in DevOps?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Could you provide more detailed examples of your communication style, especially in scenarios where you explain complex concepts to juniors?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Are there specific challenges or areas of focus within DevOps (e.g., automation, monitoring, security) that you want to prioritize for the advice and junior support?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Skills: 🤸
&lt;/h2&gt;

&lt;p&gt;It's no surprise that skills can't be absorbed instantly, they require time and effort. In the ever-evolving tech world, determining which skills to cultivate can be confusing. However, as DevOps engineers, you can't go wrong with mastering scripting and prioritizing documentation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Build your skills not your resume.” — &lt;a href="https://quotefancy.com/sheryl-sandberg-quotes" rel="noopener noreferrer"&gt;Sheryl Sandberg&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojvxbcr8s76u9yozuhue.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojvxbcr8s76u9yozuhue.webp" alt="skills" width="354" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Scripting
&lt;/h3&gt;

&lt;p&gt;Scripting is like a swiss army knife for DevOps engineers because it automates repetitive tasks, provides essential glue between processes, and ensures consistency across environments. Learning and practicing scripting involves familiarizing yourself with tools like &lt;a href="https://opensource.com/article/18/8/what-how-makefile" rel="noopener noreferrer"&gt;Makefiles&lt;/a&gt;, regular expressions (&lt;a href="https://support.smartbear.com/testcomplete/docs/scripting/regular-expressions.html" rel="noopener noreferrer"&gt;regex&lt;/a&gt;) for efficient text processing, and &lt;a href="https://www.freecodecamp.org/news/bash-scripting-tutorial-linux-shell-script-and-command-line-for-beginners/" rel="noopener noreferrer"&gt;Bash&lt;/a&gt; scripting for powerful command-line operations.&lt;/p&gt;

&lt;p&gt;Don't feel like you have to master scripting before implementing it at work. Look for manual steps in your current software or infrastructure delivery processes and try to script automations that make sense. Leverage an LLM for help if needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Documentation
&lt;/h3&gt;

&lt;p&gt;Write everything down. It’s the best way to take care of your future you.&lt;/p&gt;

&lt;p&gt;Try out a few note taking solutions here are a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.notion.so/" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.getoutline.com/" rel="noopener noreferrer"&gt;Outline&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://keep.google.com/" rel="noopener noreferrer"&gt;Google Keep&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://joplinapp.org/" rel="noopener noreferrer"&gt;Joplin&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It doesn’t matter which one you choose as long as you only choose one and you stick to it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🤔 Don’t fall into the trap of spending too much time organising and optimising your notes. Notes don’t have to be perfect only functional. Spending too much time on note maintenance is &lt;code&gt;meta-work&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Habits: 🔁
&lt;/h2&gt;

&lt;p&gt;You will never get far if you rely solely on pure motivation to get things done and improve. Well-defined and consistent habits are the glue that keep you growing and effective, even when your motivation wanes. Habits seamlessly integrate tools and skills, ensuring you are effective at your job.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Motivation is what gets you started. Habits is what keeps you going." - Jim Ryun&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwuqyzc28my73gb3f0dq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftwuqyzc28my73gb3f0dq.gif" alt="practice" width="600" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  11. Don’t write to-do lists, block time.
&lt;/h3&gt;

&lt;p&gt;I’ve been heavily influenced by Cal Newport’s writing on Deep Work and I’m quite convinced that efforts to preserve a certain amount of time per week dedicated to uninterrupted &lt;strong&gt;deep work&lt;/strong&gt; is crucial for an individual who wants to contributor meaningfully to a team.&lt;/p&gt;

&lt;p&gt;To-do list on their own are just wish lists. Once you plot them on a calendar, that’s when you have a plan.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It’s important to point out that I know very few people who execute on their time block plans with 100% fidelity every day of the week. Use them as north stars, schedule rest time when you need it. Update the list throughout the day even. But at least hold yourself to a plan.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajpplmlajhjl8bpcx05a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajpplmlajhjl8bpcx05a.png" alt="time-block" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  12. Reciprocal meeting blocks
&lt;/h3&gt;

&lt;p&gt;Unless you are your own boss, you’re most likely not 100% in charge of the meetings and commitments you might be obliged to participate in. Reciprocal meeting blocks is a way to counteract unexpected time commitments that just pop up in your calendar. &lt;br&gt;
The idea here to reserve an equivalent deep work block every time a new meeting is added to you calendar. That way you can stay flexible and relatively available without having to compromise on your weekly deep work quota.&lt;/p&gt;
&lt;h3&gt;
  
  
  13. Have a shutdown routine
&lt;/h3&gt;

&lt;p&gt;Especially useful if you are a remote worker. A shutdown routine is a series of questions and steps your run through to finish your working day. Ideally once you complete the checklist you should be able to forget about your work until the next day.&lt;br&gt;&lt;br&gt;
What I track is the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Did I exercise?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did I address all of the miscellaneous tasks I had?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do I have any open conversations?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do I need to push any tasks to the next day?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did I write a diary entry? (not work related but I like to get it done before I leave the desk)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How many deep hours did I do?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Did I check the metrics I’m tracking one last time before I close the laptop for the day?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  14. Take notes during meetings
&lt;/h3&gt;

&lt;p&gt;Taking notes during meetings and sharing them afterward should ideally be a common practice in your organization. If it isn't, this is a perfect opportunity for you to start. Not only does it ensure that no important details slip through your fingers, but it also provides a great service to your team.&lt;/p&gt;
&lt;h3&gt;
  
  
  15. Test run outages
&lt;/h3&gt;

&lt;p&gt;Test run outages are essential for DevOps engineers to prepare for real incidents. You have to know exactly how to swiftly and efficiently connect to your clusters or VMs before an unexpected 1 a.m. alert for example, you can’t be caught off guard. &lt;/p&gt;

&lt;p&gt;Familiarize yourself with moving files, retrieving container logs, and other critical tasks. Setting up SSH keys, kubeconfigs, and other access tools in advance will save valuable time and reduce stress during actual outages. Proactively testing and optimizing these processes ensures that you are ready to respond effectively to any disruption.&lt;/p&gt;
&lt;h2&gt;
  
  
  Scripts, configs and extensions: 💻
&lt;/h2&gt;

&lt;p&gt;If you have to do something more than once, automate it. Why write out a full command when you can save time by using an alias? Over a long career, it might be hard to calculate exactly how much time is saved by typing "k" instead of "kubectl." One thing is for sure: it's a lot, and it's well worth it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You’re either the one that creates the automation or you’re getting automated.” — Tom Preston-Werner&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmrjgt8aa7vdfc1twmvn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgmrjgt8aa7vdfc1twmvn.webp" alt="automation" width="356" height="200"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  16. Use helpful aliases
&lt;/h3&gt;

&lt;p&gt;Don’t waste time typing out the full commands you write every day.&lt;/p&gt;

&lt;p&gt;Here is a small snippet of a few of my configured aliases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;k=kubectl
kctx='kubectl ctx'
kgp='kubectl get pods'
kns='kubectl ns'
l='ls -lah'
la='ls -lAh'
ll='ls -lh'
ls='ls -G'
lsa='ls -lah'
md='mkdir -p'
rd=rmdir
run-help=man
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  17. Efficiently cleaning up finished jobs with TTL controller
&lt;/h3&gt;

&lt;p&gt;You can specify the lifespan of finished jobs or pods before they are automatically removed by setting the &lt;code&gt;.spec.ttlSecondsAfterFinished&lt;/code&gt; field. If you working in a job heavy environment finished jobs can quickly accumulate and become quite resource heavy.&lt;/p&gt;

&lt;p&gt;Example config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: test-ttl-job
spec:
  ttlSecondsAfterFinished: 100
  ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  18. Git script to keep synced with the upstream
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add upstream &amp;lt;upstream-url&amp;gt;
git fetch upstream
git rebase upstream/main
git push --force-with-lease
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  19. Kubectl auto complete
&lt;/h3&gt;

&lt;p&gt;Kubectl autocompletion lets you create an alias for kubectl. This feature saves time by reducing the need for cheat sheets and is especially useful for managing Kubernetes clusters. It's also recommended for the CKA exam due to its time efficiency.&lt;/p&gt;

&lt;p&gt;Set up for Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# install bash-completion
sudo apt-get install bash-completion

# Add the completion script to your .bashrc file
echo 'source &amp;lt;(kubectl completion bash)' &amp;gt;&amp;gt;~/.bashrc

# Apply changes
source ~/.bashrc

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

&lt;/div&gt;



&lt;p&gt;Check out other installation methods &lt;a href="https://komodor.com/learn/kubectl-autocomplete-enabling-and-using-in-bash-zsh-and-powershell/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  20. &lt;strong&gt;Visual Studio Code Remote – SSH&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Remote - SSH extension lets you use any SSH-enabled remote machine for development, making it easier to develop on the same OS you deploy to, use powerful hardware, switch between environments, and debug applications remotely.&lt;/p&gt;

&lt;p&gt;Install it &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;There’s no magic formula for becoming a top 1% DevOps engineer. Like in most professions, it’s a matter of time, dedication, and experience that will gradually shape you into a highly effective professional. Over time, you'll get much better at recognizing patterns, recalling past situations, and finding quick solutions to recurring issues. So, don’t expect any single life hack from this list to instantly earn you a 50% raise and a promotion. &lt;/p&gt;

&lt;p&gt;However, if you consistently focus on refining your tools, honing your skills, refusing to break good habits, and implementing smart automations, you’ll be well on your way to rapidly evolving and surpassing your current self. And who knows, maybe that promotion is just around the corner.&lt;/p&gt;




&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>learning</category>
    </item>
    <item>
      <title>Simplify Kubernetes Monitoring: Kube-prometheus-stack Made Easy with Glasskube</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Mon, 15 Jul 2024 10:18:11 +0000</pubDate>
      <link>https://dev.to/distr/simplify-kubernetes-monitoring-kube-prometheus-stack-made-easy-with-glasskube-54gn</link>
      <guid>https://dev.to/distr/simplify-kubernetes-monitoring-kube-prometheus-stack-made-easy-with-glasskube-54gn</guid>
      <description>&lt;p&gt;What do we, as developers and engineers, value most above all else? The answer is simple: &lt;strong&gt;our time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tools that deliver value in the shortest amount of time have the highest chance of user adoption, it's as simple as that.&lt;/p&gt;

&lt;p&gt;What else do most engineers value? Beautiful and data-rich &lt;strong&gt;dashboards&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyit2k6i4e19o0rb74ly6.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyit2k6i4e19o0rb74ly6.webp" alt="like it" width="240" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://prometheus.io/" rel="noopener noreferrer"&gt;Prometheus&lt;/a&gt; and &lt;a href="https://grafana.com/" rel="noopener noreferrer"&gt;Grafana&lt;/a&gt; are open-source, community-backed solutions with stellar reputations. They bring immense value by fetching and storing metrics while enabling the creation of dashboards that are not only useful but also easy on the eyes.&lt;/p&gt;

&lt;p&gt;The uncomfortable truth is that anyone who has ever set up &lt;code&gt;Prometheus&lt;/code&gt; alongside &lt;code&gt;Grafana&lt;/code&gt; as their environment's monitoring stack from scratch has probably felt the frustration of not getting value especially quickly. Metric exporter configuration, dashboard widget customisation and deciding what to monitor and alert on in the first place takes time.&lt;/p&gt;

&lt;p&gt;That's why &lt;a href="https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack" rel="noopener noreferrer"&gt;Kube-Prometheus-Stack&lt;/a&gt; was created. It installs a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules, providing an easy-to-operate, end-to-end Kubernetes cluster monitoring solution with Prometheus using the Prometheus Operator.&lt;/p&gt;

&lt;p&gt;This sounds like good news, and it is, but the stack is bundled in a Helm chart, and just the &lt;code&gt;values.yaml&lt;/code&gt; file has &lt;em&gt;over 4000 lines&lt;/em&gt;. Configuring and maintaining the Helm chart isn’t necessarily straightforward or “fun.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyjxge3kqk26cy92xx66.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyjxge3kqk26cy92xx66.gif" alt="long-values-file" width="480" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With so many configuration options, we must be getting something good right? Well yeah, we are, by deploying kube-prometheus-stack we get all of this right out of the box: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fcquzgd73xf9cc83ap1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2fcquzgd73xf9cc83ap1.png" alt="stack-diagram" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Top Layer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User:&lt;/strong&gt; Interacts with Grafana and Kubernetes API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Visualization and Alerting Layer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://grafana.com/" rel="noopener noreferrer"&gt;Grafana&lt;/a&gt;:&lt;/strong&gt; Connects to Prometheus for data visualization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://prometheus.io/docs/alerting/latest/alertmanager/" rel="noopener noreferrer"&gt;Alertmanager&lt;/a&gt;:&lt;/strong&gt; Connected to Prometheus for alert management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/prometheus/prometheus" rel="noopener noreferrer"&gt;Prometheus Server&lt;/a&gt;:&lt;/strong&gt; Central component collecting and storing metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://observability.thomasriley.co.uk/prometheus/configuring-prometheus/using-service-monitors/" rel="noopener noreferrer"&gt;ServiceMonitors &amp;amp; PodMonitors&lt;/a&gt;:&lt;/strong&gt; Define how Prometheus scrapes metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/" rel="noopener noreferrer"&gt;Prometheus Rules&lt;/a&gt;:&lt;/strong&gt; Includes both alerting and recording rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exporters Layer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://prometheus.io/docs/guides/node-exporter/" rel="noopener noreferrer"&gt;Node Exporter&lt;/a&gt;:&lt;/strong&gt; Collects node-level metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/kubernetes/kube-state-metrics" rel="noopener noreferrer"&gt;Kube State Metrics&lt;/a&gt;:&lt;/strong&gt; Collects metrics from Kubernetes API objects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other Exporters:&lt;/strong&gt; Additional exporters for various applications and services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Kubernetes Cluster:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Kubernetes Nodes&lt;/strong&gt;: Running applications and system components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applications:&lt;/strong&gt; Monitored by the Kube Prometheus Stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Luckily, &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; now supports the &lt;code&gt;Kube-Prometheus-Stack&lt;/code&gt;. Package configuration, lifecycle management, and installation can be done in record time.&lt;/p&gt;

&lt;p&gt;In this blog post, we will explore the steps to configure and install the &lt;code&gt;Kube-Prometheus-Stack&lt;/code&gt; using &lt;a href="https://glasskube.dev/" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt;, wasting no unnecessary time wrestling with never-ending values files and getting you working dashboards and alerts quicker than ever before.&lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Access to a &lt;strong&gt;Kubernetes cluster&lt;/strong&gt; (&lt;a href="https://minikube.sigs.k8s.io/docs/start" rel="noopener noreferrer"&gt;Minikube&lt;/a&gt; will be fine)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; installed&lt;/li&gt;
&lt;li&gt;An extra screen for all the cool dashboards you are going to want to look at all the time. 🤣&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fys9jr0f6ke1f7db3kfn0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fys9jr0f6ke1f7db3kfn0.gif" alt="image" width="350" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Before we begin
&lt;/h2&gt;

&lt;p&gt;For us at &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; crafting great content is as important as building great software. If this is the first time you've heard of us, we are working to build the next generation &lt;code&gt;Package Manager for Kubernetes&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a cluster
&lt;/h2&gt;

&lt;p&gt;Install &lt;a href="https://minikube.sigs.k8s.io/docs/start" rel="noopener noreferrer"&gt;Minikube&lt;/a&gt; then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minikube start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check your installation by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;minukube status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Desired output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  ~ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Glasskube
&lt;/h2&gt;

&lt;p&gt;If you already &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;installed&lt;/a&gt; glasskube you can skip this step.&lt;br&gt;
If not, glasskube can easily be installed by following your distribution's specific instructions.&lt;/p&gt;

&lt;p&gt;MacOs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install glasskube/tap/glasskube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linux (Ubuntu/Debian)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -LO https://releases.dl.glasskube.dev/glasskube_v0.4.0_amd64.deb
sudo dpkg -i glasskube_v0.4.0_amd64.deb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More installation &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;guides here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After installing Glasskube on your local machine, make sure to install the necessary components in your Kubernetes cluster by running &lt;code&gt;glasskube bootstrap&lt;/code&gt;. For more information, check out our bootstrap guide.&lt;/p&gt;

&lt;p&gt;Once Glasskube has been installed access the UI with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Navigate to &lt;code&gt;http://localhost:8580/&lt;/code&gt; to access it. &lt;/p&gt;

&lt;h2&gt;
  
  
  Kube-prometheus-stack installation
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Installation can be done via the CLI, UI or even through a YAML package definition file. Since we will customize the deployment we will use the UI for this example.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Package Customization
&lt;/h2&gt;

&lt;p&gt;Glasskube offers a series of customisations that we can be tweaked and adjusted from the CLI or GUI, saving you from having to render and configure the &lt;code&gt;values.yaml&lt;/code&gt; file directly. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7txd2o9vw0mxvrebj3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7txd2o9vw0mxvrebj3g.png" alt="parameter config" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s take them one by one. &lt;/p&gt;

&lt;h3&gt;
  
  
  Enable Alertmanager 🚨
&lt;/h3&gt;

&lt;p&gt;We want &lt;code&gt;Alertmanager&lt;/code&gt; to be enabled so we can leverage the metrics prometheus exposes to create helpful alerts.  &lt;/p&gt;

&lt;h3&gt;
  
  
  Grafana Domain 📊
&lt;/h3&gt;

&lt;p&gt;We will leave this empty for this demo since we would need to deploy an ingress controller to our cluster to handle the ingress object associated with the Grafana service. We could use &lt;a href="https://glasskube.dev/guides/ingress-nginx/" rel="noopener noreferrer"&gt;Ingress-nginx&lt;/a&gt; or &lt;a href="https://github.com/caddyserver/ingress" rel="noopener noreferrer"&gt;Caddy-ingress&lt;/a&gt; which are also supported by Glasskube for this. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Glasskube will automatically port-forward the Grafana pod so we can access the dashboard via the &lt;code&gt;Open&lt;/code&gt; button.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Node Exporter host network 💽
&lt;/h3&gt;

&lt;p&gt;Let’s also enable this to export node level metrics like memory and node level CPU usage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prometheus retention 📅
&lt;/h3&gt;

&lt;p&gt;This is a duration in days for how long we want to persist the collected metrics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prometheus storage size
&lt;/h3&gt;

&lt;p&gt;The amount of storage requests we consider the package will need. &lt;/p&gt;

&lt;h3&gt;
  
  
  Parameter input methods 🗄️
&lt;/h3&gt;

&lt;p&gt;Glasskube allows for various methods of parameter input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From a &lt;strong&gt;Kubernetes Secret&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;From &lt;strong&gt;ConfigMap&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Value from &lt;strong&gt;Package Configuration&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Via the &lt;strong&gt;UI&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8dd9vj10hqw13qk98td.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8dd9vj10hqw13qk98td.png" alt="data input methods" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By choosing to inject data via &lt;strong&gt;Kubernetes Secrets&lt;/strong&gt;, &lt;strong&gt;ConfigMaps&lt;/strong&gt; and &lt;strong&gt;Package configuration&lt;/strong&gt; we can maintain simplicity without compromising security. &lt;/p&gt;

&lt;p&gt;Here is the example of how we would reference a specific &lt;code&gt;configMap&lt;/code&gt; we have already created and deployed to our cluster. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67dqnt7cxgpeq1zvdea4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67dqnt7cxgpeq1zvdea4.png" alt="Value from ConfigMap" width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 If you're using &lt;code&gt;Kube-prometheus-stack&lt;/code&gt; and considering Glasskube for package lifecycle management but need support for specific key parameter customizations, please &lt;a href="https://github.com/glasskube/glasskube/issues" rel="noopener noreferrer"&gt;open an issue&lt;/a&gt; on GitHub with your use case. We'll do our best to expand the parameter list accordingly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Install via Glasskkube
&lt;/h2&gt;

&lt;p&gt;Once the configuration section is complete, install &lt;code&gt;kube-prometheus-stack.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ch181euwexulffkli9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ch181euwexulffkli9d.png" alt="Glasskube UI" width="800" height="376"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upon installation you can see that the &lt;code&gt;kube-prometheus-stack&lt;/code&gt; namespace has been created. And a series of pods have been deployed, including the &lt;code&gt;grafana&lt;/code&gt; dashboard, the &lt;code&gt;prometheus operator&lt;/code&gt; and the &lt;code&gt;kube state metrics&lt;/code&gt; pods too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3pgws4cf2qtib4449m3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3pgws4cf2qtib4449m3.png" alt="cli output" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Access the dashboards
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In next weeks blog post we will access the dashboard via a custom dedicated Grafana URL&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmnt9zl5qxuq8cd54qwni.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmnt9zl5qxuq8cd54qwni.gif" alt="open command" width="560" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit the &lt;code&gt;Open&lt;/code&gt; button or if you want to access Grafana on a different port you can simply &lt;code&gt;port-forward&lt;/code&gt; the pod, which will map the exposed Grafana port to a port on your localhost. I've arbitrarily chosen to &lt;code&gt;port-forward&lt;/code&gt; to &lt;code&gt;localhost 52222&lt;/code&gt; since it's available.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl port-forward POD_NAME 52222:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Head over to &lt;code&gt;http://localhost:52222/&lt;/code&gt; and you will then be greated by the Granfana login page. To find your credentials which are stored in a Kubernetes secret that was generated as part of the deployed stack, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl get secret kube-prometheus-stack-kube-prometheus-stack-grafana  -o go-template='
{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which will output something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;admin-password: prom-operator
admin-user: admin
ldap-toml:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Upon access you we be greeted by a long list of powerful pre-configured Grafana dashboards which are already showing local cluster metrics:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qet3srm7xly065jfbx5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qet3srm7xly065jfbx5.png" alt="dashboards" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Easily access CPU usage information
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikbx8hwn3ffssi7zeutr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fikbx8hwn3ffssi7zeutr.png" alt="CPU dashboard" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Here is a segment of the nifty CoreDNS dashboard that also comes preconfigured
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywy90tbmkhuhrz0bb0ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fywy90tbmkhuhrz0bb0ul.png" alt="CoreDNS" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Alerting
&lt;/h2&gt;

&lt;p&gt;We already get many useful alerts created for us right out of the box. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptnr7vl5hux0hur8tzh3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptnr7vl5hux0hur8tzh3.png" alt="alerting rules" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this snippet you can see that some of the preconfigured alerts are already firing: ↘️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dguekqv6cg5yox9ofq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0dguekqv6cg5yox9ofq4.png" alt="firing alerts" width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to be notified in via &lt;strong&gt;email&lt;/strong&gt;, &lt;strong&gt;PagerDuty&lt;/strong&gt; or any number of third party supported you will just need to add your &lt;a href="https://grafana.com/docs/grafana/latest/alerting/fundamentals/notifications/contact-points/#:~:text=A%20contact%20point%20is%20a,custom%20message%2C%20or%20notification%20templates." rel="noopener noreferrer"&gt;contact points&lt;/a&gt; of preference and then add them as destination inside &lt;a href="https://grafana.com/docs/grafana/latest/alerting/configure-notifications/create-notification-policy/" rel="noopener noreferrer"&gt;custom notification policies&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The &lt;code&gt;Kube-prometheus-stack&lt;/code&gt; offers tremendous &lt;strong&gt;"out-of-the-box"&lt;/strong&gt; value for Kubernetes cluster monitoring, eliminating the need to start from scratch. It bundles essential components for metrics exposure, extraction, alerting, and visualization, helping you establish a robust monitoring posture from the get-go. With official support from &lt;code&gt;Glasskube&lt;/code&gt;, managing and updating a comprehensive, best practice-compliant monitoring stack has never been easier.&lt;/p&gt;




&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>opensource</category>
      <category>kubernetes</category>
      <category>monitoring</category>
    </item>
    <item>
      <title>Log and trace management made easy. Quickwit Integration via Glasskube</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Mon, 01 Jul 2024 12:14:52 +0000</pubDate>
      <link>https://dev.to/distr/log-and-trace-management-made-easy-quickwit-integration-via-glasskube-2hg2</link>
      <guid>https://dev.to/distr/log-and-trace-management-made-easy-quickwit-integration-via-glasskube-2hg2</guid>
      <description>&lt;p&gt;Distributed application troubleshooting can be a nightmare. Unless you have the budget for expensive proprietary monitoring SaaS solutions or the expertise to run and maintain an complex ELK stack you might feel as if you are stuck in a cave without a flashlight. &lt;/p&gt;

&lt;p&gt;Luckily, viable open-source alternatives like &lt;a href="https://quickwit.io/" rel="noopener noreferrer"&gt;Quickwit&lt;/a&gt; are here to come to the rescue. By weaving together existing tooling for log and trace ingesting as well as pairing well with dashboard and visualisation tools such as Grafana and Jaeger. And sandwiching powerful indexing storage and search capabilities in between. Even if the tool sounds new, it won’t be for long. &lt;/p&gt;

&lt;p&gt;We recently integrated Quickwit with &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; and it’s available to be easily deployed to your cluster. I spoke directly with Quickwit co-founder &lt;a href="https://www.linkedin.com/in/fran%C3%A7ois-massot-473006b/" rel="noopener noreferrer"&gt;François Massot&lt;/a&gt; to get the insider scoop, and to learn how the tool works. Let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  But what is Quickwit exactly? 🤷
&lt;/h2&gt;

&lt;p&gt;Quickwit is a cloud-native search engine that emerged with the goal of creating an open-source alternative to expensive monitoring software like Datadog and Splunk. Along the way, they’ve also developed and open-sourced several components, including ChitChat (cluster membership protocol), mrecordlog (WAL), Whichlang (fast language detection), witty actors (actor framework), and bitpacking (SIMD algorithms for integer compression).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F154x37vzjunqayriczlx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F154x37vzjunqayriczlx.png" alt="quickmit-diagram" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quickwit, with its robust Elasticsearch-compatible API, integrates well with tooling from the OSS ecosystem, such as Grafana, Jaeger, and OpenTelemetry. Users are successfully deploying Quickwit at scale, with hundreds of nodes and hundreds of terabytes of data ingested daily, all while enjoying significant cost reductions and how thanks to Glasskube to can get up and running in no time.&lt;/p&gt;

&lt;p&gt;Quickwit excels in handling logs, traces, security data, and append-only datasets, with plans to support metrics soon. A key feature is the usage of object storage for the indexed data, which simplifies cluster management, cuts infrastructure costs, and enhances reliability. Multiple storage options are available such as local disk, Amazon S3, Azure Blob storage or Garage, an OSS distributed object storage, are available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions for the co-founder François Massot 🙋
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What are the benefits of using external Object Storage as opposed to node attached storage?
&lt;/h3&gt;

&lt;p&gt;There are a lot of benefits! From the beginning, we chose to decouple compute and storage to make our search engine scalable, reliable, and very cost-efficient. If you want to remember one thing distinguishing Quickwit from traditional search engines, this is decoupled storage and computing.&lt;/p&gt;

&lt;p&gt;Firstly, it provides elasticity, allowing us to scale storage and compute resources independently, which is ideal for cloud environments. Secondly, it’s cost-efficient, as object storage like S3 is cheaper than traditional disk storage, especially for large volumes of log data. And you don’t need to replicate your index data; this is done by the object storage layer. Additionally, it ensures high durability and availability, reducing the risk of data loss. Last, but not least, it simplifies cluster management as most of Quickiwt’s components are stateless.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Comparison: Is Quickwit Faster than Elasticsearch?
&lt;/h3&gt;

&lt;p&gt;It depends!&lt;/p&gt;

&lt;p&gt;On indexing, Quickwit is generally twice as fast as Elasticsearch and uses less CPU. Our users, like Binance, report a reduction of 80% of CPU usage at indexing!&lt;/p&gt;

&lt;p&gt;The story is different regarding querying, as Elasticsearch has all its data on a local disk, typically SSD, and Quickwit has its indexed data in very slow object storage. In this case, you can expect query time to be lower. But Quickwit's main goal is to be sub-second queries, which is perfectly fine in the observability/security domains. If we look at this indicator, Quickwit is on par with Elasticsearch and is even faster for demanding analytics queries, whereas the data is stored on object storage!&lt;/p&gt;

&lt;h3&gt;
  
  
  What's in store for quickwit in the future?
&lt;/h3&gt;

&lt;p&gt;We have a very ambitious roadmap! Here are the key features that will be added in the following 12 months:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distributed ingest (July 2024)&lt;/strong&gt;: High-throughput indexing on tens of thousands of indexes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OpenSearch Dashboard support (Q3 2024)&lt;/strong&gt;: This will enable OpenSearch users to migrate seamlessly to Quickwit with their existing dashboards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Metrics support (Q4 2024)&lt;/strong&gt;: New storage engine optimized for time series data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Distributed SQL engine (Q1 2025)&lt;/strong&gt;: Distributed SQL engine for analytics on top of Apache Arrow, Datafusion, and Ballista.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pipe-based query language (Q2 2025)&lt;/strong&gt;: Introduction of a flexible and powerful query language similar to SPL (Splunk Query Language)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Log management 🪵
&lt;/h3&gt;

&lt;p&gt;Quickwit is built from the ground up to efficiently index unstructured data, and search it effortlessly on cloud storage. Moreover, Quickwit supports OpenTelemetry gRPC and HTTP (protobuf only) protocols out of the box and provides a REST API ready to ingest any JSON formatted logs. This makes Quickwit a perfect fit for logs!&lt;/p&gt;

&lt;h3&gt;
  
  
  Distributed tracing 📊
&lt;/h3&gt;

&lt;p&gt;Distributed Tracing involves monitoring application requests as they traverse various services like frontend, backend, and databases. It's instrumental for understanding application behavior and diagnosing performance issues.&lt;/p&gt;

&lt;p&gt;Additionally, Quickwit seamlessly integrates with OpenTelemetry using gRPC and HTTP protocols (protobuf only), as well as Jaeger's gRPC API (SpanReader only). This means you can store traces in Quickwit and effortlessly query them using Jaeger's UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key features 🔑
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Full-text &lt;em&gt;search&lt;/em&gt; and &lt;em&gt;aggregation&lt;/em&gt; queries&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Elasticsearch&lt;/em&gt; query language support&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Sub-second search&lt;/em&gt; on cloud storage (Amazon S3, Azure Blob Storage, …)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Decoupled compute&lt;/em&gt; and &lt;em&gt;storage&lt;/em&gt;, stateless &lt;em&gt;indexers &amp;amp; searchers&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Schemaless&lt;/em&gt; or &lt;em&gt;strict&lt;/em&gt; schema &lt;em&gt;indexing&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Schemaless analytics&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Grafana&lt;/em&gt; data source&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Jaeger-native&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;OTEL-native&lt;/em&gt; for logs and traces&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Kubernetes ready&lt;/em&gt; via Glasskube&lt;/li&gt;
&lt;li&gt;&lt;em&gt;RESTful API&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation guide 🦮
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites​
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Access to a Kubernetes cluster (you can easily create a local cluster by using &lt;a href="https://minikube.sigs.k8s.io/docs/start/?arch=%2Fmacos%2Fx86-64%2Fstable%2Fbinary+download" rel="noopener noreferrer"&gt;Minikube&lt;/a&gt; or &lt;a href="https://kind.sigs.k8s.io/" rel="noopener noreferrer"&gt;Kind&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kubernetes.io/docs/tasks/tools/" rel="noopener noreferrer"&gt;kubectl&lt;/a&gt; isn't strictly speaking a dependency for installing packages via glasskube, but it is the recommended way to interact with the cluster. Therefore, it is highly recommended. Installation instructions are available for macOS, Linux and Windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install Glasskube
&lt;/h2&gt;

&lt;p&gt;If you already &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;installed&lt;/a&gt; glasskube you can skip this step.&lt;br&gt;
If not, glasskube can easily be installed by following your distribution's specific instructions.&lt;/p&gt;

&lt;p&gt;For this demo I'll be using a MacOs distribution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;glasskube/tap/glasskube &lt;span class="c"&gt;# install the glasskube cli&lt;/span&gt;
minikube start &lt;span class="c"&gt;# start a minikube Kubernetes cluster&lt;/span&gt;
glasskube bootstrap &lt;span class="c"&gt;# install glasskube on the kind cluster&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more installation &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;guides, find them here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once Glasskube has been installed access via the UI with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;glasskube serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The dashboard will open up on &lt;code&gt;http://localhost:8580/&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating an S3-Compatible Bucket
&lt;/h2&gt;

&lt;p&gt;Before installing Quickwit, you'll need to create an object storage bucket to hold your Quickwit &lt;code&gt;indexes&lt;/code&gt;. You can use use your choice of Cloud provider such as &lt;a href="https://www.scaleway.com/en/" rel="noopener noreferrer"&gt;Scaleway&lt;/a&gt;, &lt;a href="https://aws.amazon.com/" rel="noopener noreferrer"&gt;AWS&lt;/a&gt; S3 or &lt;a href="https://min.io/" rel="noopener noreferrer"&gt;MinIO&lt;/a&gt;. Refer to our official Quickwit &lt;a href="https://quickwit.io/docs/configuration/storage-config" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for storage configuration details.&lt;/p&gt;

&lt;p&gt;Here I will be creating an &lt;code&gt;AWS S3 bucket&lt;/code&gt; to store the Quickwit indexes.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3aed8xtewfgf10filkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa3aed8xtewfgf10filkj.png" alt="s3-dashboard" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Navigate to the AWS management console and create a new S3 bucket.&lt;/li&gt;
&lt;li&gt;In &lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html" rel="noopener noreferrer"&gt;IAM generate an API key&lt;/a&gt;, with S3 permissions, save the 'Access Key Id' and 'Secret Key', we will need them shortly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Deploy Quickwit​
&lt;/h2&gt;

&lt;p&gt;From the Glasskube dashboard, find the Quickwit pacakge and add your custom configuration parameters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ye6uqvhdwciumt65aal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ye6uqvhdwciumt65aal.png" alt="quickmit-parameters" width="800" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;defaultIndexRootUri&lt;/strong&gt;: for this demo it's &lt;code&gt;s3://quickwit-indexes&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;metastoreUri:&lt;/strong&gt; we won't use PostgreSQL so let's pick the same value we used for &lt;code&gt;defaultIndexRootUri&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;s3AccessKeyId:&lt;/strong&gt; the &lt;code&gt;"Access Key Id"&lt;/code&gt; from AWS we generated before.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;s3Endpoint:&lt;/strong&gt; Custom endpoint for use with S3-compatible providers. Not needed for S3 configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;s3Flavor:&lt;/strong&gt; we are using the default &lt;code&gt;empty value&lt;/code&gt; for genuine S3-compatible object storage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;s3Region:&lt;/strong&gt; &lt;code&gt;US-east-1&lt;/code&gt; in my case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;s3SecretAccessKey:&lt;/strong&gt; the &lt;code&gt;"Secret Key"&lt;/code&gt; from AWS we generated before.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here you can find the &lt;a href="https://quickwit.io/blog/glasskube" rel="noopener noreferrer"&gt;official Quickwit documentation &lt;/a&gt;for parameter completion. &lt;/p&gt;

&lt;p&gt;It's also possible to install and configure Quickwit using the Glasskube CLI by running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;glasskube &lt;span class="nb"&gt;install &lt;/span&gt;quickwit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once installed, you can see that a &lt;code&gt;quickwit&lt;/code&gt; namespace has been created:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;default
flux-system
glasskube-system
kube-node-lease
kube-public
kube-system
kubernetes-dashboard
quickwit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, check to see if the pods are running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;NAME                                               READY   STATUS    RESTARTS      AGE
quickwit-quickwit-control-plane-86bd9955f7-bwm2r   1/1     Running   1 &lt;span class="o"&gt;(&lt;/span&gt;27m ago&lt;span class="o"&gt;)&lt;/span&gt;   29m
quickwit-quickwit-indexer-0                        1/1     Running   1 &lt;span class="o"&gt;(&lt;/span&gt;27m ago&lt;span class="o"&gt;)&lt;/span&gt;   29m
quickwit-quickwit-janitor-9479697ff-x4x2c          1/1     Running   1 &lt;span class="o"&gt;(&lt;/span&gt;27m ago&lt;span class="o"&gt;)&lt;/span&gt;   29m
quickwit-quickwit-metastore-56ff74df9f-k6d2g       1/1     Running   0             29m
quickwit-quickwit-searcher-0                       1/1     Running   1 &lt;span class="o"&gt;(&lt;/span&gt;27m ago&lt;span class="o"&gt;)&lt;/span&gt;   29m
quickwit-quickwit-searcher-1                       1/1     Running   0             27m
quickwit-quickwit-searcher-2                       1/1     Running   0             27m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can try to access to the Quickwit UI using the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kubectl &lt;span class="nt"&gt;-n&lt;/span&gt; quickwit port-forward pod/quickwit-quickwit-searcher-0 7280
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Head over to &lt;a href="http://localhost:7280" rel="noopener noreferrer"&gt;http://localhost:7280&lt;/a&gt;. And you should be ready to go!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchju7g5d8nqx6nguzhbp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fchju7g5d8nqx6nguzhbp.png" alt="quickwit dashboard" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create your first index​
&lt;/h3&gt;

&lt;p&gt;Before adding &lt;strong&gt;documents&lt;/strong&gt; to &lt;a href="https://quickwit.io/" rel="noopener noreferrer"&gt;Quickwit&lt;/a&gt;, you need to create an &lt;strong&gt;index&lt;/strong&gt; configured with a YAML config file. This config file notably lets you define how to map your input documents to your index fields and whether these fields should be stored and indexed. See the &lt;a href="https://quickwit.io/docs/main-branch/configuration/index-config" rel="noopener noreferrer"&gt;index config documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let's create an index configured to receive Stackoverflow posts (questions and answers).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# First, download the stackoverflow dataset config from Quickwit repository.
curl -o stackoverflow-index-config.yaml https://raw.githubusercontent.com/quickwit-oss/quickwit/main/config/tutorials/stackoverflow/index-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The index config defines three fields: &lt;strong&gt;title&lt;/strong&gt;, &lt;strong&gt;body&lt;/strong&gt; and &lt;strong&gt;creationDate&lt;/strong&gt;. &lt;em&gt;title&lt;/em&gt; and &lt;em&gt;body&lt;/em&gt; &lt;a href="https://quickwit.io/docs/configuration/index-config#text-type" rel="noopener noreferrer"&gt;are indexed and tokenized&lt;/a&gt;, and they are also used as default search fields, which means they will be used for search if you do not target a specific field in your query. &lt;em&gt;creationDate&lt;/em&gt; serves as the timestamp for each record. There are no more explicit field definitions as we can use the default &lt;a href="https://quickwit.io/docs/main-branch/configuration/index-config#mode" rel="noopener noreferrer"&gt;dynamic mode&lt;/a&gt;: the undeclared fields will still be indexed, by default fast fields are enabled to enable aggregation queries. and the raw tokenizer is used for text.&lt;/p&gt;

&lt;p&gt;And here is the complete config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Index config file for stackoverflow dataset.&lt;/span&gt;
&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.7&lt;/span&gt;

&lt;span class="na"&gt;index_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;stackoverflow&lt;/span&gt;

&lt;span class="na"&gt;doc_mapping&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;field_mappings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;title&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text&lt;/span&gt;
      &lt;span class="na"&gt;tokenizer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
      &lt;span class="na"&gt;record&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;position&lt;/span&gt;
      &lt;span class="na"&gt;stored&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;body&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;text&lt;/span&gt;
      &lt;span class="na"&gt;tokenizer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;
      &lt;span class="na"&gt;record&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;position&lt;/span&gt;
      &lt;span class="na"&gt;stored&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;creationDate&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;datetime&lt;/span&gt;
      &lt;span class="na"&gt;fast&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
      &lt;span class="na"&gt;input_formats&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;rfc3339&lt;/span&gt;
      &lt;span class="na"&gt;fast_precision&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;seconds&lt;/span&gt;
  &lt;span class="na"&gt;timestamp_field&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;creationDate&lt;/span&gt;

&lt;span class="na"&gt;search_settings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;default_search_fields&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;indexing_settings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;commit_timeout_secs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;30&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we can create the index with the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./quickwit index create --index-config ./stackoverflow-index-config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that a directory &lt;code&gt;./qwdata/indexes/stackoverflow&lt;/code&gt; has been created, Quickwit will write index files here and a &lt;code&gt;metastore.json&lt;/code&gt; which contains the &lt;a href="https://quickwit.io/docs/overview/architecture#index" rel="noopener noreferrer"&gt;index metadata&lt;/a&gt;. You're now ready to fill the index.&lt;/p&gt;

&lt;p&gt;Continue on to the Quickwit documentation to add your &lt;a href="https://quickwit.io/docs/get-started/quickstart#lets-add-some-documents" rel="noopener noreferrer"&gt;first documents&lt;/a&gt; and execute your &lt;a href="https://quickwit.io/docs/get-started/quickstart#execute-search-queries" rel="noopener noreferrer"&gt;first search queries&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>devops</category>
      <category>database</category>
      <category>opensource</category>
      <category>aws</category>
    </item>
    <item>
      <title>Glasskube v0.10.0 out now!</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Mon, 24 Jun 2024 11:27:08 +0000</pubDate>
      <link>https://dev.to/distr/glasskube-v0100-out-now-3ipi</link>
      <guid>https://dev.to/distr/glasskube-v0100-out-now-3ipi</guid>
      <description>&lt;p&gt;Welcome back to another &lt;code&gt;new release&lt;/code&gt; blog post 🚀&lt;/p&gt;

&lt;p&gt;This is where we cover the newest shipped features, enhancements, bug fixes and cover all of the recent &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; news to make sure you are fully up to speed. We have been riding a continous wave off momentum of internal feature developments as well as interest from the wider community which has led to the delivery of &lt;strong&gt;Glasskube v0.10.0&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Let’s check out what you can expect to find in this new minor release. &lt;/p&gt;

&lt;h2&gt;
  
  
  🚨 Alert: Breaking changes on the horizon ⛓️‍💥
&lt;/h2&gt;

&lt;p&gt;Up until now, Glasskube packages could only be installed once per cluster, which sometimes imposed unnecessary restrictions and limited certain use cases.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From v0.10.0 onwards, the author of a package can specify a &lt;strong&gt;"scope,"&lt;/strong&gt; which can be either &lt;strong&gt;"Cluster"&lt;/strong&gt; or &lt;strong&gt;"Namespaced"&lt;/strong&gt; (with the default being "Cluster"). Based on the package scope, the Glasskube system creates either a cluster-scoped or namespace-scoped custom resource. The name of the cluster-scoped CRD is &lt;code&gt;ClusterPackage&lt;/code&gt;, while the name for the namespace-scoped CRD is &lt;code&gt;Package&lt;/code&gt;. This update introduces a breaking change since we previously used the &lt;code&gt;Package&lt;/code&gt; CRD name for cluster-scoped resources. However, we decided to implement this change to align with common Kubernetes nomenclature (e.g., &lt;code&gt;Role&lt;/code&gt;/ &lt;code&gt;ClusterRole&lt;/code&gt;). &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Additional features and UI enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To assist in upgrading to v0.10.0 the &lt;code&gt;glasskube purge&lt;/code&gt; command was added to help remove the previous installation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;glasskube repo update&lt;/code&gt; command was also added to fetch the latest package manifests from configured Glasskube package repository.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Access to the full changelog &lt;a href="https://github.com/glasskube/glasskube/releases" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading to v0.10.0
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;For first time installations, please follow the installation guide &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To upgrade the Glasskube CLI, Install the newest binary files if you are on &lt;a href="https://glasskube.dev/docs/getting-started/install/" rel="noopener noreferrer"&gt;Linux&lt;/a&gt; or &lt;a href="https://releases.dl.glasskube.dev/glasskube_v0.9.0_windows_x86_64.zip" rel="noopener noreferrer"&gt;Windows&lt;/a&gt; machines. &lt;/p&gt;

&lt;p&gt;For macOS, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew upgrade glasskube
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To upgrade Glasskube’s cluster components follow to &lt;a href="https://glasskube.dev/docs/getting-started/upgrading/" rel="noopener noreferrer"&gt;upgrading guide here&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  🆕 New Packages integrations available now
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quickwit
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://quickwit.io/" rel="noopener noreferrer"&gt;Quickwit&lt;/a&gt; is a cloud-native search engine that emerged with the goal of creating an open-source alternative to expensive monitoring software like Datadog/Splunk. With its robust Elasticsearch-compatible API, Quickwit integrates well with tooling from the OSS ecosystem, such as Grafana, Jaeger, and OpenTelemetry. &lt;/p&gt;

&lt;p&gt;Users are successfully deploying Quickwit at scale, with hundreds of nodes and hundreds of terabytes of data ingested daily, all while enjoying significant cost reductions and how thanks to Glasskube to can get up and running in no time. Quickwit excels in handling logs, traces, security data, and append-only datasets, with plans to support metrics soon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49oonpe9gv2zet0vs9aj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49oonpe9gv2zet0vs9aj.png" alt="Glasskube and Quickwit" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hatchet
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://hatchet.run/" rel="noopener noreferrer"&gt;Hatchet&lt;/a&gt; is a distributed, fault-tolerant task queue which replaces traditional message brokers and pub/sub systems, built to solve problems like concurrency, fairness, and durability.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7p2mniv0hgb9q7hhzz0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv7p2mniv0hgb9q7hhzz0.png" alt="Hatchet-glasskube" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find installation instructions &lt;a href="https://docs.hatchet.run/self-hosting/kubernetes-glasskube" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⏭️ Next packages to be supported
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Kubeflow
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://www.kubeflow.org/" rel="noopener noreferrer"&gt;Kubeflow&lt;/a&gt; project is dedicated to making deployments of machine learning (ML) workflows on Kubernetes simple, portable and scalable. Their goal is not to recreate other services, but to provide a straightforward way to deploy best-of-breed open-source systems for ML to diverse infrastructures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Headlamp
&lt;/h3&gt;

&lt;p&gt;Out of the box, &lt;a href="https://headlamp.dev/" rel="noopener noreferrer"&gt;Headlamp&lt;/a&gt; is a fully functional Kubernetes UI. By leveraging its powerful plugin system, builders can shape Headlamp to fit their bespoke use-cases, products, and environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Velero
&lt;/h3&gt;

&lt;p&gt;Under the VMWare umbrella, &lt;a href="https://velero.io/" rel="noopener noreferrer"&gt;Velero&lt;/a&gt; is an open source tool to safely backup and restore, perform disaster recovery, and migrate Kubernetes cluster resources and persistent volumes.&lt;/p&gt;

&lt;h2&gt;
  
  
  📹 Updated demo video
&lt;/h2&gt;

&lt;p&gt;Check out the newest Glasskube demo video delivered by Philip, where you can find the latest project updates up to v0.9.0.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/aIeTHGWsG2c"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;

&lt;p&gt;If you haven’t already, head on over to the &lt;a href="https://www.youtube.com/@glasskube/videos" rel="noopener noreferrer"&gt;Glasskube YouTube channel&lt;/a&gt; where you can find the growing archive of weekly Community Calls, Release videos and even some short form content. &lt;/p&gt;
&lt;h2&gt;
  
  
  ☁️ Join Glasskube Cloud
&lt;/h2&gt;

&lt;p&gt;We are starting to build our Glasskube cloud offering to include advanced features in security, accessibility, and team collaboration. Stay updated on our progress by signing up &lt;a href="https://glasskube.cloud/signup.html" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jya4p0vqd8dgpmoy74c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jya4p0vqd8dgpmoy74c.png" alt="Glasskube cloud snippet" width="800" height="326"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>programming</category>
    </item>
    <item>
      <title>10 Essential Books to Accelerate your Cloud Career</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Wed, 19 Jun 2024 13:17:44 +0000</pubDate>
      <link>https://dev.to/distr/10-essential-books-to-accelerate-your-cloud-career-6jf</link>
      <guid>https://dev.to/distr/10-essential-books-to-accelerate-your-cloud-career-6jf</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR 🤓
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DevOps&lt;/strong&gt; and &lt;strong&gt;cloud engineers&lt;/strong&gt; need not have a floor-to-ceiling bookshelf full of books to enhance their skills. &lt;strong&gt;A few key books are all you need (at least at the beginning)&lt;/strong&gt;. Below I highlight key titles for both junior and senior DevOps and cloud engineers, focusing on improving productivity, understanding cloud native technologies and cloud infrastructure. Emphasizing &lt;strong&gt;practical application&lt;/strong&gt; and continuous learning is essential for advancing a career in the rapidly evolving cloud industry.&lt;/p&gt;




&lt;p&gt;With the vast amount of valuable and entertaining sources of Cloud Engineering information, from &lt;a href="https://open.spotify.com/show/6VRDZ6E89JfNY9BCANx70m?si=c08f83248aee4df7" rel="noopener noreferrer"&gt;podcasts&lt;/a&gt; and &lt;a href="https://www.youtube.com/@KodeKloud" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt; channels to even &lt;a href="https://www.youtube.com/watch?v=BE77h7dmoQU" rel="noopener noreferrer"&gt;movies&lt;/a&gt;, it can sometimes make us question the authenticity of the well-stocked bookshelves we see behind team members on our daily Zoom calls. &lt;strong&gt;Do they actually read those books, or are they just for show?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As someone who has always loved books for their content and entertainment value, I've found myself increasingly drawn to them in recent years for the change of mental pace they provide compared to other modern content mediums.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femn3uta3irrsmltoiku7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Femn3uta3irrsmltoiku7.gif" alt="reading-gif" width="470" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unlike other technical book recommendation articles, I want to distinguish between four distinct categories of books that I find helpful to keep in mind. Not every book on this list is meant to be read from cover to cover, nor is every book a dense technical textbook that will gather dust on your shelf after a quick leaf-through. &lt;/p&gt;

&lt;p&gt;The handful of book recommendations that have made an impact on my own cloud journey &lt;strong&gt;fall into the following categories&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core concepts:&lt;/strong&gt; 🏗️&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud Computing: Concepts, Technology &amp;amp; Architecture&lt;/li&gt;
&lt;li&gt;The DevOps Handbook&lt;/li&gt;
&lt;li&gt;Cloud Native Infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reference books:&lt;/strong&gt; 🔎&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site Reliability Engineering&lt;/li&gt;
&lt;li&gt;AWS Fundamentals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Page turners:&lt;/strong&gt; 📑&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Phoenix Project&lt;/li&gt;
&lt;li&gt;Accelerate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Not cloud specific but still must reads:&lt;/strong&gt;📍&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wiring the winning organisation&lt;/li&gt;
&lt;li&gt;Slow productivity&lt;/li&gt;
&lt;li&gt;Designing Data-Intensive Applications&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;🚨 Disclaimer: Gene Kim is going to feature prominently on this list &lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Before we begin
&lt;/h2&gt;

&lt;p&gt;For us at &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; crafting great content is as important as building great software. If this is the first time you've heard of us, we are working to build the next generation &lt;code&gt;Package Manager for Kubernetes&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Core concepts 🏗️
&lt;/h2&gt;

&lt;p&gt;These are the types of books that provide beginners with &lt;strong&gt;essential core concepts and frameworks&lt;/strong&gt;, forming a solid foundation that helps future lessons fall right into place.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cloud Computing: Concepts, Technology &amp;amp; Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpfg6ecfvb1o7r26cdf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnpfg6ecfvb1o7r26cdf7.png" alt="cloud-computing" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Originally published in 2013, this book is respected industry wide and is a comprehensive guide to cloud computing by exploring its history, models, mechanisms, architectures, and security considerations. Combining case studies with technical analysis, the book examines topics ranging from cloud-enabling technologies to cloud service level agreements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will get a comprehensive and &lt;strong&gt;vendor-neutral understanding of cloud technologies&lt;/strong&gt;, making it easier to assess various cloud solutions and providers objectively.&lt;/li&gt;
&lt;li&gt;Fundamental &lt;strong&gt;cloud computing concepts, models, and mechanisms&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A deeper understanding of &lt;strong&gt;cloud characteristics, security threats, and risk management frameworks&lt;/strong&gt;, crucial for designing secure and reliable cloud solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"There is no greater danger to a business than approaching cloud computing adoption with ignorance. The magnitude of a failed adoption effort not only correspondingly impacts IT departments, but can actually regress a business to a point where it finds itself steps behind from where it was prior to the adoption—and, perhaps, even more steps behind competitors that have been successful at achieving their goals in the meantime."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi00obtif4agkln48lwv7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi00obtif4agkln48lwv7.png" alt="cloud-review" width="800" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://www.oreilly.com/library/view/cloud-computing-concepts/9780133387568/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. The DevOps Handbook
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn870tcuyzreoqcwzvus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzn870tcuyzreoqcwzvus.png" alt="devops-hb-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;By presenting the “Three ways” as the principles for mitigating these challenges and achieving world-class performance, the book illustrates how organizations can adopt DevOps principles and practices to accelerate delivery, improve reliability, and create a more satisfying and productive work environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Three Ways&lt;/strong&gt; (Flow, Feedback &amp;amp; Continual Learning and Experimentation).&lt;/li&gt;
&lt;li&gt;Focus on &lt;strong&gt;Deployment Lead Time.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Conway%27s_law" rel="noopener noreferrer"&gt;Conway’s law.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"DevOps isn't about automation, just as astronomy isn't about telescopes."&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0j47u1q1fb4jamxcyva.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0j47u1q1fb4jamxcyva.png" alt="devops-review" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://itrevolution.com/product/the-devops-handbook-second-edition/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Cloud Native Infrastructure
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1k95xt1eulbux4o1geb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1k95xt1eulbux4o1geb.png" alt="cn-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The authors explain key concepts like representing infrastructure through code, APIs, managing application life cycles in a cloud-native way, and ensuring security and compliance, but overall the book stresses that cloud native infrastructure is about adapting principles and processes more than specific technologies, impacting application management as much as hardware. &lt;/p&gt;

&lt;p&gt;It guides readers on when and why to adopt these practices, outlining how they differ from traditional approaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud native infrastructure &lt;strong&gt;prioritizes building infrastructure with software&lt;/strong&gt; over manual configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resiliency&lt;/strong&gt; is paramount in cloud native infrastructure.&lt;/li&gt;
&lt;li&gt;Cloud native infrastructure &lt;strong&gt;necessitates a shift in mindset&lt;/strong&gt; and company culture.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Embracing chaos&lt;/strong&gt; and designing for failure are essential.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The only systems that should never fail are those that keep you alive (e.g., heart implants, and brakes)"&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam7khik68bij17hznpsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam7khik68bij17hznpsb.png" alt="Cloud-native-review" width="800" height="186"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://www.oreilly.com/library/view/cloud-native-infrastructure/9781491984291/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference books 🔎
&lt;/h2&gt;

&lt;p&gt;Keep these books close by, preferably within arm's reach. In truth, the "Core Concepts" books could also fall into this category and vice versa. As you build your personal home library, you'll definitely want hard copies of these books. This way, you can reference them easily, make annotations, earmark important sections, and fully extract the valuable insights they offer.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Site Reliability Engineering (SRE)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36edy12z1m1md5gj1icr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F36edy12z1m1md5gj1icr.png" alt="sre-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Site Reliability Engineering (SRE), a discipline pioneered by Google, offers a distinct approach to managing large-scale software systems by emphasizing the application of software engineering principles to operations. The book explores this approach in detail, providing insights into Google's production environment, SRE principles such as embracing risk and eliminating toil, and practical practices including monitoring, incident response, and capacity planning. &lt;/p&gt;

&lt;p&gt;It emphasizes the importance of automation, simplicity in software design, and a blameless postmortem culture for continuous improvement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;core&lt;/strong&gt; principles and practices of &lt;strong&gt;Site Reliability Engineering&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Gain insights into Google's production environment and the challenges of running &lt;strong&gt;large-scale systems&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;How to apply &lt;strong&gt;SRE principles&lt;/strong&gt; to their own organizations, regardless of size or technical expertise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"If a human operator needs to touch your system during normal operations, you have a bug. The definition of normal changes as your systems grow."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pedygn90llvtg9sdczl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pedygn90llvtg9sdczl.png" alt="sre-review" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://sre.google/books/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. AWS Fundamentals
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqqe3pyhrpgcsn296qlu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiqqe3pyhrpgcsn296qlu.png" alt="aws-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;"AWS Fundamentals" guides readers through the essentials of Amazon Web Services (AWS), emphasizing practical application over certification preparation. It provides a comprehensive overview of core AWS services like EC2, S3, RDS, DynamoDB, Lambda, and more, categorized by function (compute, database and storage, messaging, etc. &lt;/p&gt;

&lt;p&gt;The authors offer practical examples, use cases, configuration recommendations, and tips for each service. Additionally, the book introduces Infrastructure as Code (IaC), explaining its importance and demonstrating how to use frameworks like CloudFormation, Serverless, and CDK to provision infrastructure. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding the &lt;strong&gt;core building blocks of AWS&lt;/strong&gt; (a lot of core cloud concepts are valid for over cloud providers).&lt;/li&gt;
&lt;li&gt;Learning how to apply AWS knowledge in &lt;strong&gt;real-world scenarios.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Gaining an understanding of &lt;strong&gt;Infrastructure as Code&lt;/strong&gt; (IaC).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Learning AWS doesn’t need to be hard. It is important to focus on the basics and to understand them well. Once this is done all new services or features can be understood really well.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu2fyrkna92rek37y3zv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiu2fyrkna92rek37y3zv.png" alt="aws-fundamentals-review" width="432" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://awsfundamentals.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Page turners 📑
&lt;/h2&gt;

&lt;p&gt;Apart from teaching valuable professional lessons these books have felt as entertaining as other non technical works of fiction or non-fiction. All three left me with a strong “I need you to read this“ feeling. &lt;/p&gt;

&lt;h3&gt;
  
  
  6. The Phoenix project
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcz8ipmf9j77l3ht5wpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgcz8ipmf9j77l3ht5wpb.png" alt="phoenix-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;A novel (yes an actual novel) that follows Bill Palmer, a VP of IT Operations at Parts Unlimited, who is tasked with salvaging the company's failing IT project, code-named "Phoenix." As Bill navigates the challenges of a stressful work environment full of miscommunication, finger-pointing, and a looming audit, he crosses paths with Erik, a board member who introduces him to the principles of DevOps, without calling it that. &lt;/p&gt;

&lt;p&gt;Throughout the story, Bill and his team work to implement these principles, striving to streamline their workflow and improve collaboration between Development and IT Operations. The book is special since the conceptual thrust of the book of spreading DevOps practices is delivered in the refreshing form of a fully fledged narrative novel. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;three ways&lt;/strong&gt; is also touched upon in this book (similar to the DevOps Handbook).&lt;/li&gt;
&lt;li&gt;The importance of &lt;strong&gt;identifying and managing constraints&lt;/strong&gt; to optimize the flow of work.&lt;/li&gt;
&lt;li&gt;The importance of &lt;strong&gt;collaboration&lt;/strong&gt; and &lt;strong&gt;communication&lt;/strong&gt; between Development, IT Operations, and the business as a whole.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Being able to take needless work out of the system is more important than being able to put more work into the system.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fww59cx1cecsa4s2ru3nq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fww59cx1cecsa4s2ru3nq.png" alt="phoenix-review" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://itrevolution.com/product/the-phoenix-project/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Accelerate
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbgt8w1disnuykguanqq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbgt8w1disnuykguanqq.png" alt="accelerate-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;The book presents four years of research exploring the practices that contribute to high-performing technology organizations. The authors sought to identify the capabilities that drive software delivery performance and, in turn, impact organizational performance. Their findings highlight twenty-four key capabilities, categorized as continuous delivery, architecture, product and process, lean management and monitoring, and cultural, that demonstrably improve software delivery and overall business outcomes. &lt;/p&gt;

&lt;p&gt;The book emphasizes that these capabilities are measurable and improvable, offering guidance for organizations to assess their current state and embark on a journey of continuous improvement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Software delivery performance&lt;/strong&gt; is a key predictor of organizational performance&lt;/li&gt;
&lt;li&gt;A set of capabilities, including &lt;strong&gt;technical practices&lt;/strong&gt;, &lt;strong&gt;Lean management&lt;/strong&gt;, and a &lt;strong&gt;generative culture&lt;/strong&gt;, drive improvements in software delivery performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transformational leadership&lt;/strong&gt; is crucial in enabling and amplifying the adoption of these capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The most important characteristic of high-performing teams is that they are never satisfied: they always strive to get better."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxskcoibuunvft84mvq5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgxskcoibuunvft84mvq5.png" alt="accelerate-review" width="800" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://itrevolution.com/product/accelerate/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not cloud specific but still must reads📍
&lt;/h2&gt;

&lt;p&gt;Not specifically cloud related at all but these are book that for different reasons I feel can round out a cloud engineer. &lt;/p&gt;

&lt;h3&gt;
  
  
  8. Wiring the Winning Organization
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7k50mm9pvqllxki6nyt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7k50mm9pvqllxki6nyt.png" alt="wiring-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I'm a huge fan of reading "leadership" or "management" focused books, even though I'm not in either of those positions. Learning what leadership should care about and the key ingredients needed to achieve excellent results serves as a cheat sheet for any individual contributor wanting to stand out by being impactful. Change doesn’t always have to come from the top, you can push it from wherever you find yourself.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;The book presents a new theory of performance management, emphasizing how leaders can create the conditions for their organizations to achieve exceptional results. The book introduces three key mechanisms for building a "winning organization": slowification (making problem-solving easier), simplification (making problems easier to solve), and amplification (making problems more visible). &lt;/p&gt;

&lt;p&gt;Through a combination of theoretical explanations, practical case studies, and real-world examples, the authors demonstrate how these mechanisms can be applied across diverse industries and organizational contexts to achieve superior performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greatness in any endeavor is achievable through a focus on refining the &lt;strong&gt;"social circuitry"&lt;/strong&gt; of an organization.&lt;/li&gt;
&lt;li&gt;Three key mechanisms &lt;strong&gt;slowification&lt;/strong&gt;, &lt;strong&gt;simplification&lt;/strong&gt;, and &lt;strong&gt;amplification&lt;/strong&gt; can be employed to move an organization from a &lt;strong&gt;"danger zone"&lt;/strong&gt; to a "&lt;strong&gt;winning&lt;/strong&gt; zone".&lt;/li&gt;
&lt;li&gt;Leaders who embrace these mechanisms can create organizations that achieve extraordinary results.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;“Slowification enables the shift from reactive, "fast thinking" based on ingrained habits to more effective "slow thinking" that allows for deliberation, reflection, and creativity in problem-solving.“&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy73k0tmgjyk5jehu4oj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgy73k0tmgjyk5jehu4oj.png" alt="wiring-review" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://itrevolution.com/product/wiring-the-winning-organization/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Slow productivity
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj76w8setfiv38hjs354.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxj76w8setfiv38hjs354.png" alt="slow-prod-cover" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Slow Productivity by Cal Newport challenges the modern obsession with visible busyness as a measure of productivity, what he terms pseudo-productivity. Instead, the book champions a slow productivity philosophy based on three core principles: doing fewer things, working at a natural pace, and obsessing over quality. &lt;br&gt;
This philosophy argues that by intentionally limiting workloads, embracing a sustainable work pace, and prioritizing quality over quantity, knowledge workers can achieve greater meaning and produce superior results. &lt;/p&gt;

&lt;p&gt;The book explores the theoretical underpinnings of these principles and offers practical strategies for implementing them in various professional settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To do &lt;strong&gt;less&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Work at the more &lt;strong&gt;natural pace&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Obsess over &lt;strong&gt;quality&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"for all of our complaining about the term, knowledge workers have no agreed-upon definition of what “productivity” even means."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84ck5pcb3idjgi7oj6yl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84ck5pcb3idjgi7oj6yl.png" alt="slow-review" width="800" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://calnewport.com/slow/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10. Designing Data-Intensive Applications
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb26uimgoj36uc95x1hd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb26uimgoj36uc95x1hd4.png" alt="data-intensive-book" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;As cloud engineers, we collaborate closely with the developers in our organization who write the applications we deploy and maintain. While this book doesn’t provide directly actionable knowledge for our day-to-day tasks, it has given me a deeper understanding of the concepts underpinning the creation of our organization’s apps. More importantly, it has provided me with a common language to effectively communicate with the developers on my team.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Designing Data-Intensive Applications, by Martin Kleppmann, explores the fundamental principles and practical considerations for building reliable, scalable, and maintainable data systems. The book examines various data models, including relational, document, and graph-based models, and their respective query languages, analyzing their suitability for different applications. &lt;/p&gt;

&lt;p&gt;It also examines storage engines, data encoding formats, and schema evolution. A key focus is the exploration of distributed data systems, including replication, partitioning (sharding), and the challenges of maintaining consistency and consensus in such environments. The book uses real-world examples of successful data systems to illustrate key concepts and trade-offs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you will learn:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Various &lt;strong&gt;data models&lt;/strong&gt;, including relational, document, and graph-based models, and their respective query languages, analyzing their suitability for different applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage engines&lt;/strong&gt; and how databases arrange data on disk to find it again efficiently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;, &lt;strong&gt;scalability&lt;/strong&gt;, and &lt;strong&gt;maintainability&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quote from the book:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that when a thing that cannot possibly go wrong goes wrong it usually turns out to be impossible to get at or repair."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A review that caught my eye:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkx4z0k4x269gn7qdtaxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkx4z0k4x269gn7qdtaxa.png" alt="data-review" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Get it &lt;a href="https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;If you like our content and want to support us on this mission, we'd appreciate it if you could give us a star ⭐️ on GitHub.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz881yt0e33ikhnsnta79.gif" alt="giff" width="480" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" class="ltag_cta ltag_cta--branded" rel="noopener noreferrer"&gt;⭐️ Star us on GitHub 🙏&lt;/a&gt;
&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>devops</category>
      <category>career</category>
    </item>
    <item>
      <title>Glasskube reaches 1k stars 🌟</title>
      <dc:creator>Jake Page</dc:creator>
      <pubDate>Mon, 10 Jun 2024 09:04:10 +0000</pubDate>
      <link>https://dev.to/distr/glasskube-reaches-1k-stars-o5j</link>
      <guid>https://dev.to/distr/glasskube-reaches-1k-stars-o5j</guid>
      <description>&lt;p&gt;I was trying to thinking of sayings or mantra’s ambitious people repeat to themselves to keep themselves motivated. A few came to mind: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Fortune favors the bold."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"No guts, no glory."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"You miss 100% of the shots you don't take."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Nothing ventured, nothing gained."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Many of us have heard these sayings or something similar before, what you have less often which I think is &lt;strong&gt;equally important&lt;/strong&gt; maybe doesn’t fit that well into a motivating one liner but might go something like this: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Sure, shoot for the stars but make sure to celebrate every win along the way. Because the journey is equally as important as the eventual goal.&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While nobody starts a project with the sole aim of getting 1,000 GitHub stars, the entire &lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; team is incredibly proud of reaching this milestone so quickly. I wanted to take a moment to reflect on our rapid organic growth and celebrate our achievements.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Glasskube?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;Glasskube&lt;/a&gt; is the next-generation Kubernetes package manager, now available in its beta version. With Glasskube, you can effortlessly install, upgrade, configure, and manage your Kubernetes cluster packages. Check out the available packages here. Glasskube streamlines repetitive and cumbersome maintenance tasks, making cluster management a breeze. The project is evolving rapidly, with new functionalities being shipped with every weekly release.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7j70qlz9agbi24zhtar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7j70qlz9agbi24zhtar.png" alt="glasskube-dashboard" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So go ahead, dive in, explore, and share your thoughts with us! Your feedback is incredibly valuable as we strive to make Glasskube the best Kubernetes package manager out there. We're also beginning to develop Glasskube Cloud, building on the requests from our current users to enhance the tool further. We're eager to hear which features you'd like to see included in the Glasskube Cloud offering.&lt;/p&gt;

&lt;p&gt;The best way to stay in the loop is to sign up for Glasskube Cloud and be informed when it's ready: &lt;a href="https://glasskube.cloud/" rel="noopener noreferrer"&gt;https://glasskube.cloud/&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The story of our organic growth so far
&lt;/h2&gt;

&lt;p&gt;Having oficially launched the project in February 2024 we are super happy to have hit the 1000k milestone in the first days of June. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8qw0vnkgs16fj9q5xph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk8qw0vnkgs16fj9q5xph.png" alt="Glasskube star growth" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s take a look at some of the work be have been doing to make this happen. &lt;/p&gt;

&lt;h3&gt;
  
  
  We’ve been shipping 🚢
&lt;/h3&gt;

&lt;p&gt;In the past few months, our team and a growing legion of open-source contributors have helped us ship eight minor version releases, the latest being v0.8.0. You can find the full changelog &lt;a href="https://github.com/glasskube/glasskube/releases" rel="noopener noreferrer"&gt;here&lt;/a&gt;. Jakob and Christophe, both Glasskube developers, have been hard at work rolling out new features and functionalities. They've also been invaluable in providing feedback and managing the PR review process, ensuring that code is merged swiftly and safely.&lt;/p&gt;

&lt;p&gt;Every contributor, found on the &lt;a href="https://discord.gg/STk5Z3nFmT" rel="noopener noreferrer"&gt;Glasskube Discord server&lt;/a&gt;, has brought something valuable to the community. However, a few deserve a special shoutout: Hanshal, Utkarsh, and Baalakshan. These contributors have been diligently submitting valuable PRs, addressing open issues, and advocating for Glasskube wherever they go.&lt;/p&gt;

&lt;p&gt;We've been organizing weekly community calls every Monday on the Discord server. These calls have been a fantastic opportunity to share news, align expectations, and grow together. Some contributors have even given short talks exploring concepts like Kubernetes CRDs, presented by Hanshal, and Chaos Engineering, shared by Baalakshan.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/c0Y9m7HQv9s"&gt;
&lt;/iframe&gt;
 &lt;/p&gt;
&lt;h3&gt;
  
  
  Meetups
&lt;/h3&gt;

&lt;p&gt;Cofounders Philip and Louis, myself and Community members have been really active attending meetups and conferences around Europe and India. We were at a few KCD’s, AWS Summit Madrid and other CNCF meetups too. It has been a great way to spark conversations and share the work that’s being done. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8FSaYcJgQXo?start=607"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Partnerships 🫂
&lt;/h3&gt;

&lt;p&gt;We have partnered with third party packages such as &lt;a href="https://keptn.sh/latest/docs/installation/#install-keptn-via-glasskube" rel="noopener noreferrer"&gt;Keptn&lt;/a&gt; and &lt;a href="https://quickwit.io/" rel="noopener noreferrer"&gt;Quickwit&lt;/a&gt; to expedite their integration onto Glasskube.&lt;/p&gt;

&lt;p&gt;You can now find installation steps right in the documentation of the supported packages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fed24wokm42bo6l01xpde.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fed24wokm42bo6l01xpde.png" alt="Keptn install" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Content creation 📚
&lt;/h3&gt;

&lt;p&gt;As we build and continually refine a quality product to support our ever-expanding user base, we aim to be a consistent source of valuable content. This includes in-depth Kubernetes topics like this, more technical product explorations like this, and even broader opinion pieces like our Git guide and our article on the current state of the DevOps scene.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh99pcowhe2oett5o0n08.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh99pcowhe2oett5o0n08.gif" alt="content" width="600" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check out our latest launch video 🚀
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/HAtWQZ0Ex-I"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Building Glasskube so far has been such a gratifiying experience, on the one hand we are connecting and understanding the issues so many cloud practitioners are having in there efforts to deal with Kubernetes Package management in their daily routines. Better understanding them and delivering on their requests is special. &lt;/p&gt;

&lt;p&gt;On the other hand, collaborating with so many stellar open-source community contributors is a massive perk and added bonus of building an OSS tool in public. Much of our early growth can be directly attributed to these outstanding OSS contributors. We hope to continue this collaboration as we aim for 2, 3, and 10k stars, and more importantly, to make Glasskube a tool installed in Kubernetes clusters far and wide.&lt;/p&gt;




&lt;p&gt;If you get value from the work we do, we'd appreciate it if you could&lt;br&gt;
&lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;⭐️ Star Glasskube on GitHub 🙏&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/glasskube/glasskube" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwm56xwcn9qhzp7xnndu.gif" alt="star-on-github" width="400" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>kubernetes</category>
      <category>cloud</category>
      <category>github</category>
    </item>
  </channel>
</rss>
