<?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: IT-Craftsman</title>
    <description>The latest articles on DEV Community by IT-Craftsman (@itcraftsman).</description>
    <link>https://dev.to/itcraftsman</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2553368%2Fb5285653-2bf1-48ee-a9c3-1100ef8c6485.jpg</url>
      <title>DEV Community: IT-Craftsman</title>
      <link>https://dev.to/itcraftsman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/itcraftsman"/>
    <language>en</language>
    <item>
      <title>The easiest way to monitor complex Kubernetes Deployments (using Harbor as an example)</title>
      <dc:creator>IT-Craftsman</dc:creator>
      <pubDate>Thu, 01 Oct 2026 12:30:00 +0000</pubDate>
      <link>https://dev.to/itcraftsman/the-easiest-way-to-monitor-complex-kubernetes-deployments-using-harbor-as-an-example-4f7f</link>
      <guid>https://dev.to/itcraftsman/the-easiest-way-to-monitor-complex-kubernetes-deployments-using-harbor-as-an-example-4f7f</guid>
      <description>&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffp3qix6nylbd758279k5.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffp3qix6nylbd758279k5.png" alt="AliveSignal Kubernetes Container Monitoring" width="720" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’ve ever deployed &lt;a href="https://goharbor.io/" rel="noopener noreferrer"&gt;Harbor Container Registry&lt;/a&gt; on Kubernetes, you know it’s an incredibly powerful tool. But you also know that it has &lt;em&gt;a lot&lt;/em&gt; of moving parts. A standard Harbor deployment consists of multiple Deployments and StatefulSets: &lt;code&gt;harbor-core&lt;/code&gt;, &lt;code&gt;harbor-jobservice&lt;/code&gt;, &lt;code&gt;harbor-portal&lt;/code&gt;, &lt;code&gt;registry&lt;/code&gt;, &lt;code&gt;trivy&lt;/code&gt;, &lt;code&gt;redis&lt;/code&gt;, and a database.&lt;/p&gt;

&lt;p&gt;When everything is running smoothly, Harbor is a joy to use. But what happens when the &lt;code&gt;harbor-jobservice&lt;/code&gt; quietly crashes? Your images stop being scanned for vulnerabilities, replication policies fail, and you might not notice until a developer complains hours later.&lt;/p&gt;

&lt;p&gt;You need a way to monitor pod availability. &lt;/p&gt;

&lt;p&gt;The industry standard is to deploy Prometheus, set up Grafana, write PromQL queries, configure Alertmanager, and maintain all of this infrastructure. If you just want to answer the simple question: &lt;em&gt;"Are my Harbor pods actually running?"&lt;/em&gt;, this feels like massive overkill.&lt;/p&gt;

&lt;p&gt;I wanted a simpler solution. I didn't want to install more heavy monitoring agents inside my cluster just to check if my pods were alive.&lt;/p&gt;

&lt;p&gt;That’s why I used &lt;strong&gt;&lt;a href="https://alivesignal.itcraftsman.de" rel="noopener noreferrer"&gt;AliveSignal&lt;/a&gt;&lt;/strong&gt; to monitor the entire Harbor namespace using a zero-agent, heartbeat-based approach. The best part? It took me exactly 60 seconds. Here is how you can do it too.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Push vs. Pull Paradigm
&lt;/h3&gt;

&lt;p&gt;Traditional monitoring systems (like Prometheus) use a &lt;strong&gt;Pull&lt;/strong&gt; model. A central server scrapes metrics from your pods. This requires your pods to expose metric endpoints and often requires a dedicated agent running on your cluster nodes.&lt;/p&gt;

&lt;p&gt;AliveSignal flips this into a &lt;strong&gt;Push&lt;/strong&gt; model (Heartbeat monitoring). Instead of constantly asking the cluster &lt;em&gt;"Are you okay?"&lt;/em&gt;, we run a tiny, lightweight, concurrent CronJob inside the cluster that simply pings AliveSignal every minute: &lt;em&gt;"I'm okay!"&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;If AliveSignal doesn't receive the ping, it alerts you immediately via Email or Webhook. &lt;/p&gt;




&lt;h3&gt;
  
  
  Step-by-Step: Automating Harbor Health Checks
&lt;/h3&gt;

&lt;p&gt;Usually, setting up individual heartbeat monitors for 7 different deployments is tedious. But AliveSignal has a feature called &lt;strong&gt;Kubernetes Auto-Discovery&lt;/strong&gt; that makes this feel like magic. &lt;/p&gt;

&lt;p&gt;Here is the exact workflow.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1: Export your Harbor Namespace
&lt;/h4&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl0vh3sh5e2tscc8ndqpl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl0vh3sh5e2tscc8ndqpl.png" alt="AliveSignal Kubernetes Auto-Discovery" width="720" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, we tell Kubernetes to give us the current state of all Deployments and StatefulSets in the Harbor namespace, formatted as JSON.&lt;/p&gt;

&lt;p&gt;Run this command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get deploy,sts &lt;span class="nt"&gt;-n&lt;/span&gt; harbor &lt;span class="nt"&gt;-o&lt;/span&gt; json &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; harbor.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Make sure to replace &lt;code&gt;-n harbor&lt;/code&gt; with your actual namespace if it differs).&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Upload to AliveSignal
&lt;/h4&gt;

&lt;p&gt;Log into your &lt;a href="https://alivesignal.com" rel="noopener noreferrer"&gt;AliveSignal Dashboard&lt;/a&gt;. Click on &lt;strong&gt;"K8s Auto-Discovery"&lt;/strong&gt; and upload the &lt;code&gt;harbor.json&lt;/code&gt; file you just generated.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F90emi4yqv39py68uqpu3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F90emi4yqv39py68uqpu3.png" alt="AliveSignal Kubernetes Auto-Discovery success" width="720" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instantly, AliveSignal parses the JSON and detects every single component of your Harbor registry. It automatically creates a separate monitor for &lt;code&gt;harbor-core&lt;/code&gt;, &lt;code&gt;harbor-jobservice&lt;/code&gt;, &lt;code&gt;trivy&lt;/code&gt;, and so on. You don't have to type a single monitor name.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Apply the Zero-Agent Manifest
&lt;/h4&gt;

&lt;p&gt;Once the monitors are created, AliveSignal generates a custom Kubernetes manifest file for you: &lt;code&gt;monitoring.yaml&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This file contains a lightweight Kubernetes &lt;code&gt;CronJob&lt;/code&gt;. It doesn't require any special permissions (no heavy RBAC, no ClusterRoles) and doesn't run as a DaemonSet. It simply uses &lt;code&gt;curl&lt;/code&gt; to concurrently ping the unique URLs for each of your newly created monitors based on pod availability.&lt;/p&gt;

&lt;p&gt;Download the file and apply it to your cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; monitoring.yaml &lt;span class="nt"&gt;-n&lt;/span&gt; harbor
serviceaccount/dms-monitor-sa created
role.rbac.authorization.k8s.io/dms-monitor-role created
rolebinding.rbac.authorization.k8s.io/dms-monitor-rolebinding created
configmap/dms-monitor-config created
cronjob.batch/dms-monitor-cronjob created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;That’s it. You are done.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzpbsz3fi68zayzegx6wy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzpbsz3fi68zayzegx6wy.png" alt="AliveSignal Dashboard for Harbor Kubernetes Resources" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The Result
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcrzoc1v1esmm07f4x498.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcrzoc1v1esmm07f4x498.png" alt="AliveSignal Dashboard for Harbor Kubernetes Resources Status ‘Up’" width="720" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Within 5 minutes, your AliveSignal dashboard will light up green. You now have deep visibility into your Harbor infrastructure without having installed a single heavy agent. &lt;/p&gt;

&lt;p&gt;If the Kubernetes scheduler fails to start your &lt;code&gt;trivy&lt;/code&gt; scanner pod, or if your &lt;code&gt;harbor-core&lt;/code&gt; pod gets stuck in a &lt;code&gt;CrashLoopBackOff&lt;/code&gt;, the internal CronJob will detect the missing pod, stop sending the ping for that specific component, and AliveSignal will alert you before your users notice.&lt;/p&gt;

&lt;h4&gt;
  
  
  Bonus: Instant Public Status Pages
&lt;/h4&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7cbrvolz9scb4kv2aghu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7cbrvolz9scb4kv2aghu.png" alt="AliveSignal Public Status Page" width="720" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because you are running an infrastructure tool that your whole engineering team relies on, transparency is key. &lt;/p&gt;

&lt;p&gt;With AliveSignal, you can take those newly created Harbor monitors and instantly publish them to a &lt;strong&gt;Public Status Page&lt;/strong&gt;. Out-of-the-box, it supports custom domains and Dark Mode. You can link this Status Page in your internal developer documentation, so your team always knows if the Container Registry is healthy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Monitoring doesn't always have to mean maintaining complex metric stacks. For many critical workloads, simple heartbeat monitoring is not just easier to set up—it's more reliable, because it exists completely outside of the infrastructure it is monitoring.&lt;/p&gt;

&lt;p&gt;If you want to secure your Harbor Registry, Apache Airflow, or any other complex Kubernetes workload in under a minute, give &lt;strong&gt;&lt;a href="https://alivesignal.itcraftsman.de" rel="noopener noreferrer"&gt;AliveSignal&lt;/a&gt;&lt;/strong&gt; a try. It’s built for developers who want peace of mind, without the maintenance overhead.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>monitoring</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
