<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Devops on Apurv Kiri | Tech Notes</title>
    <link>https://apurv.me/tags/devops/</link>
    <description>Recent content in Devops on Apurv Kiri | Tech Notes</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-gb</language>
    <lastBuildDate>Fri, 07 Mar 2025 01:55:15 +0530</lastBuildDate><atom:link href="https://apurv.me/tags/devops/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kubernetes - Cluster Rebalancing with Descheduler</title>
      <link>https://apurv.me/posts/kubernetes-cluster-rebalancing-with-descheduler/</link>
      <pubDate>Fri, 07 Mar 2025 01:55:15 +0530</pubDate>
      
      <guid>https://apurv.me/posts/kubernetes-cluster-rebalancing-with-descheduler/</guid>
      
      <description>&lt;hr&gt;
&lt;p&gt;This post is part of our ongoing series of posts for Kubernetes. This post focuses on how Kubernetes Descheduler helps rebalance clusters for better performance and resource utilization. As clusters evolve—pods start or terminate, nodes join or leave, or resource demands shift—the initial pod placement may no longer be optimal for current conditions.&lt;/p&gt;
&lt;p&gt;Descheduler addresses this challenge by identifying and relocating pods that no longer align with current cluster requirements, enabling Kubernetes to redistribute them more efficiently across the available infrastructure.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kubernetes - Automating ConfigMap and Secret Reloads with Reloader</title>
      <link>https://apurv.me/posts/kubernetes-automating-configmap-secret-reloads-with-reloader/</link>
      <pubDate>Thu, 06 Mar 2025 01:55:15 +0530</pubDate>
      
      <guid>https://apurv.me/posts/kubernetes-automating-configmap-secret-reloads-with-reloader/</guid>
      
      <description>&lt;hr&gt;
&lt;p&gt;This post is part of our ongoing series of posts for Kubernetes. In this post, we will explore how to automate the reloading of ConfigMaps and Secrets in your Kubernetes clusters using Reloader, a powerful tool designed to streamline application configuration updates without manual intervention.&lt;/p&gt;
&lt;p&gt;When working with applications that rely on configuration data or sensitive information stored in ConfigMaps and Secrets, manually restarting pods to apply changes can be tedious, error-prone, and disruptive to service availability. Reloader elegantly solves this problem by automatically detecting configuration changes and triggering rolling updates for the associated deployments, ensuring your applications always run with the latest configurations while maintaining high availability.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kubernetes - Replicate Secrets with Reflector</title>
      <link>https://apurv.me/posts/kubernetes-replicate-secrets-with-reflector/</link>
      <pubDate>Wed, 05 Mar 2025 01:55:15 +0530</pubDate>
      
      <guid>https://apurv.me/posts/kubernetes-replicate-secrets-with-reflector/</guid>
      
      <description>&lt;hr&gt;
&lt;p&gt;This post is part of our ongoing series of posts for Kubernetes. In this post, we will dive into replicating secrets across namespaces using Reflector, a powerful tool for ensuring consistency and security in your Kubernetes environment.&lt;/p&gt;
&lt;p&gt;By default, Kubernetes secrets are scoped to individual namespaces. However, there are common use cases where sensitive information, such as API tokens, database credentials, or container registry credentials, needs to be shared across multiple namespaces. Manually managing these secrets can be error-prone and time-consuming.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kubernetes GitOps with FluxCD - Part 7 - Resource Optimization and Automated Version Management with Github Actions</title>
      <link>https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-7/</link>
      <pubDate>Tue, 04 Mar 2025 01:55:15 +0530</pubDate>
      
      <guid>https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-7/</guid>
      
      <description>&lt;hr&gt;
&lt;p&gt;In our &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-6/&#34;&gt;previous post&lt;/a&gt;, we set up push based reconciliation using webhooks. Building on what we&amp;rsquo;ve learned so far—&lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-1/&#34;&gt;basic FluxCD setup&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-2/&#34;&gt;SOPS-based secret management&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-3/&#34;&gt;image update automation&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-4/&#34;&gt;Helm chart automation&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-5/&#34;&gt;alerts&lt;/a&gt; and &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-6/&#34;&gt;push based reconciliation&lt;/a&gt; — this article focuses on critical day-two operational concerns: optimizing FluxCD resource allocation and establishing automated version management through Github Actions.&lt;/p&gt;
&lt;h2 id=&#34;1-sizing-fluxcd-containers&#34;&gt;1. Sizing FluxCD Containers&lt;/h2&gt;
&lt;p&gt;By default, FluxCD components are provisioned with the following resource configurations for CPU and memory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;kubectl -n flux-system get pods -o json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;[&amp;#34;container&amp;#34;, &amp;#34;cpu_requests&amp;#34;, &amp;#34;cpu_limits&amp;#34;, &amp;#34;memory_requests&amp;#34;, &amp;#34;memory_limits&amp;#34;], (.items[].spec.containers[] | [.image, .resources.requests.cpu, .resources.limits.cpu, .resources.requests.memory, .resources.limits.memory]) | @csv&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; column -t -s,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 2&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 3&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 4&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;                                           &lt;span class=&#34;s2&#34;&gt;&amp;#34;cpu_requests&amp;#34;&lt;/span&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;cpu_limits&amp;#34;&lt;/span&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;memory_requests&amp;#34;&lt;/span&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;memory_limits&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 5&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ghcr.io/fluxcd/helm-controller:v1.2.0&amp;#34;&lt;/span&gt;               &lt;span class=&#34;s2&#34;&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 6&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ghcr.io/fluxcd/image-automation-controller:v0.40.0&amp;#34;&lt;/span&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 7&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ghcr.io/fluxcd/image-reflector-controller:v0.34.0&amp;#34;&lt;/span&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 8&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ghcr.io/fluxcd/kustomize-controller:v1.5.0&amp;#34;&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt; 9&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ghcr.io/fluxcd/notification-controller:v1.5.0&amp;#34;&lt;/span&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;100m&amp;#34;&lt;/span&gt;          &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;ln&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ghcr.io/fluxcd/source-controller:v1.5.0&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;50m&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;           &lt;span class=&#34;s2&#34;&gt;&amp;#34;64Mi&amp;#34;&lt;/span&gt;             &lt;span class=&#34;s2&#34;&gt;&amp;#34;1Gi&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For our environment with a smaller cluster footprint, these default limits are unnecessarily generous and could lead to resource contention. We&amp;rsquo;ll refine these allocations by modifying &lt;code&gt;cluster/default/flux-system/kustomization.yaml&lt;/code&gt; to better align with our actual resource capacity and workload requirements:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kubernetes GitOps with FluxCD - Part 6 - Push-based Reconciliation with Webhook Receivers</title>
      <link>https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-6/</link>
      <pubDate>Mon, 03 Mar 2025 01:55:15 +0530</pubDate>
      
      <guid>https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-6/</guid>
      
      <description>&lt;hr&gt;
&lt;p&gt;In our &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-5/&#34;&gt;previous post&lt;/a&gt;, we set up Discord alerts to get notifications about our cluster&amp;rsquo;s status. Building on what we&amp;rsquo;ve learned so far—&lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-1/&#34;&gt;basic FluxCD setup&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-2/&#34;&gt;SOPS-based secret management&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-3/&#34;&gt;image update automation&lt;/a&gt;, &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-4/&#34;&gt;Helm chart automation&lt;/a&gt;, and &lt;a href=&#34;https://apurv.me/posts/kubernetes-gitops-with-fluxcd-part-5/&#34;&gt;alerts&lt;/a&gt;—this article focuses on &lt;strong&gt;webhook receivers&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;By default, FluxCD polls Git repositories at the configured frequency to detect changes. With webhook receivers, your Git provider can notify FluxCD immediately when changes occur, ensuring the reconciliation process doesn&amp;rsquo;t have to wait for the next scheduled polling interval. This significantly expedites deployments and enhances overall cluster efficiency.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
