<?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: suresh devops</title>
    <description>The latest articles on DEV Community by suresh devops (@suresh_devops_ffa0728a190).</description>
    <link>https://dev.to/suresh_devops_ffa0728a190</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%2F3761300%2F92deda14-6c82-4fd9-b585-fa6555c3d99f.png</url>
      <title>DEV Community: suresh devops</title>
      <link>https://dev.to/suresh_devops_ffa0728a190</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suresh_devops_ffa0728a190"/>
    <language>en</language>
    <item>
      <title>Our Ollama /LLM Production Setup</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Sat, 08 Aug 2026 05:16:35 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/our-ollama-llm-production-setup-3anf</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/our-ollama-llm-production-setup-3anf</guid>
      <description>&lt;h1&gt;
  
  
  Response to Ollama Production Queries to the previous post
&lt;/h1&gt;

&lt;p&gt;Excellent questions — you've clearly been in the trenches with Ollama at scale! Let me address your specific concerns about our production setup, now updated with our actual deployment architecture.&lt;/p&gt;




&lt;h2&gt;
  
  
  On GPU Residency &amp;amp; VRAM Thrashing
&lt;/h2&gt;

&lt;p&gt;You're absolutely right — this is the &lt;strong&gt;single biggest operational challenge&lt;/strong&gt; with Ollama in production. We've implemented a hybrid strategy:&lt;/p&gt;

&lt;h3&gt;
  
  
  Our Approach:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hot Models Pinned in Memory&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;qwen3:8b&lt;/code&gt; (primary inference)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bge-m3&lt;/code&gt; (embedding service)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;qwen3:4b-instruct&lt;/code&gt; (NER-specific)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These stay resident with &lt;code&gt;OLLAMA_KEEP_ALIVE=-1&lt;/code&gt; in the container environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cold Models on Separate Instance&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gemma3:4b&lt;/code&gt;, &lt;code&gt;llama3.2&lt;/code&gt;, custom &lt;code&gt;RatnaDveLinga&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;These run on a secondary Ollama instance with a lower concurrency limit&lt;/li&gt;
&lt;li&gt;The load balancer routes to this instance only for specific workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VRAM Monitoring&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# We run this in a sidecar container&lt;/span&gt;
   watch &lt;span class="nt"&gt;-n&lt;/span&gt; 1 nvidia-smi &lt;span class="nt"&gt;--query-gpu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;memory.used,memory.free &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;csv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Keep-Alive Tuning We Use:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose environment section&lt;/span&gt;
&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OLLAMA_KEEP_ALIVE=5m&lt;/span&gt;  &lt;span class="c1"&gt;# Not -1 to avoid holding all models&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OLLAMA_NUM_PARALLEL=4&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OLLAMA_MAX_LOADED_MODELS=3&lt;/span&gt;  &lt;span class="c1"&gt;# Critical! Prevents thrashing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key insight&lt;/strong&gt;: Setting &lt;code&gt;OLLAMA_MAX_LOADED_MODELS&lt;/code&gt; to 3 forces eviction behavior to be predictable rather than reactive. We learned this after a production incident where p99 latency jumped from 200ms to 8 seconds during a batch processing job!&lt;/p&gt;




&lt;h2&gt;
  
  
  On Concurrent Load &amp;amp; Service Architecture
&lt;/h2&gt;

&lt;p&gt;Great observation about &lt;code&gt;OLLAMA_NUM_PARALLEL&lt;/code&gt; — default is 1 in many versions! Here's our production design at scale:&lt;/p&gt;

&lt;h3&gt;
  
  
  Our Actual Deployment Architecture:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Instance Count&lt;/th&gt;
&lt;th&gt;RAM (GB)&lt;/th&gt;
&lt;th&gt;CPU (Cores)&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;LLM inference engine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama-WebUI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Web interface for model management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forms-service-ner-v4-api&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;7.5&lt;/td&gt;
&lt;td&gt;Production NER API endpoints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forms-service-ner-v4-celery&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;7.5&lt;/td&gt;
&lt;td&gt;Async NER task workers (prod)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forms-service-ner-qa-api&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;QA environment NER APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forms-service-ner-qa-celery-server&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;QA async task workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forms-service-ner-api(sales)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;Production -specific NER APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;forms-service-ner-celery(sales)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;Production async task workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;signal-summarizer-llm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Main summarizer service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;signal-summarizer-llm workflow-aggregator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Workflow orchestration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;signal-summarizer-llm worker-model1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Model execution workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;signal-summarizer-llm celery-flower&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;Celery monitoring dashboard&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Load Distribution Strategy:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌──────────────────────────────────────┐
                    │       KONG API Gateway               │
                    │  (Least Connection Algorithm)        │
                    └─────────────┬────────────────────────┘
                                  │
            ┌─────────────────────┼─────────────────────┐
            │                     │                     │
    ┌───────▼──────┐    ┌────────▼────────┐    ┌───────▼──────┐
    │  NER Services │    │  Summarizer     │    │  Ad-hoc      │
    │  (17 pods)    │    │  Services       │    │  Queries     │
    └───────┬──────┘    │  (20 pods)      │    └───────┬──────┘
            │           └────────┬────────┘            │
            └─────────────────────┼─────────────────────┘
                                  │
                    ┌─────────────▼─────────────┐
                    │   21 Ollama Instances      │
                    │   (Distributed Pool)       │
                    └────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How KONG's Least Connection Load Balancing Helps:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. NER Service Distribution (17 instances total):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Production NER&lt;/strong&gt;: 2 API + 3 Celery = 5 instances (high memory/CPU)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QA NER&lt;/strong&gt;: 2 API + 6 Celery = 8 instances (lower CPU, more workers)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales NER&lt;/strong&gt;: 4 API + 4 Celery = 8 instances (balanced)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;KONG routes traffic to the least loaded instance, which is crucial for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Preventing any single NER instance from being overwhelmed by large document batches&lt;/li&gt;
&lt;li&gt;Allowing Celery workers to scale independently based on queue depth&lt;/li&gt;
&lt;li&gt;Isolating QA traffic from production traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Summarizer Service Distribution (20 instances total):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main service&lt;/strong&gt;: 2 instances&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow aggregators&lt;/strong&gt;: 9 instances (coordinating multi-step summaries)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model workers&lt;/strong&gt;: 9 instances (doing the heavy lifting)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Celery flower&lt;/strong&gt;: 1 instance (monitoring)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Request Flow with Backpressure:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Simplified version of our queue management with distributed instances
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OllamaLoadBalancer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Track load across all 21 Ollama instances
&lt;/span&gt;        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;instance_pool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discover_ollama_instances&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;route_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service_type&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Find least loaded instance via KONG
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;service_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ner&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Route to NER-specific Celery queue
&lt;/span&gt;            &lt;span class="c1"&gt;# Celery distributes across 13 NER workers (2+3+4+4)
&lt;/span&gt;            &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_least_loaded&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;forms-ner-v4&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;forms-ner-qa&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;forms-ner-sales&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;service_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;summarizer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Route to summarizer Celery queue
&lt;/span&gt;            &lt;span class="c1"&gt;# Celery distributes across 9 model workers
&lt;/span&gt;            &lt;span class="n"&gt;instance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_least_loaded&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;summarizer-workflow&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;summarizer-model1&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

        &lt;span class="c1"&gt;# Set appropriate parallelism per service type
&lt;/span&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;service_type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ner&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;ollama_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;  &lt;span class="c1"&gt;# seconds
&lt;/span&gt;            &lt;span class="n"&gt;ollama_concurrency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;  &lt;span class="c1"&gt;# OLLAMA_NUM_PARALLEL
&lt;/span&gt;        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;  &lt;span class="c1"&gt;# summarizer
&lt;/span&gt;            &lt;span class="n"&gt;ollama_timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;  &lt;span class="c1"&gt;# seconds (larger context)
&lt;/span&gt;            &lt;span class="n"&gt;ollama_concurrency&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;  &lt;span class="c1"&gt;# careful with VRAM
&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_least_loaded&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# Query KONG's least-connection algorithm
&lt;/span&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;kong_api&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_least_connected_instance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What We've Learned at This Scale
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Good:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;21 Ollama instances&lt;/strong&gt; across servers provide excellent fault tolerance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Least connection algorithm&lt;/strong&gt; naturally handles hot spots&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate QA vs Production&lt;/strong&gt; instances (8 NER QA pods) allow safe testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales-specific NER&lt;/strong&gt; (8 pods) isolates business-critical workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Challenges:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Model Consistency&lt;/strong&gt;: Keeping all 21 Ollama instances synchronized with same models and versions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solution: We use a shared NFS volume for models, or have a model-sync cron job&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Celery Worker Configuration&lt;/strong&gt;: With 13 NER Celery workers and 9 summarizer workers, we had to tune:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;   &lt;span class="c1"&gt;# Celery config
&lt;/span&gt;   &lt;span class="n"&gt;CELERYD_PREFETCH_MULTIPLIER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# Prevent worker hogging
&lt;/span&gt;   &lt;span class="n"&gt;CELERY_ACKS_LATE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;  &lt;span class="c1"&gt;# Re-queue if worker crashes
&lt;/span&gt;   &lt;span class="n"&gt;CELERY_TASK_TIME_LIMIT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;  &lt;span class="c1"&gt;# 5 min max
&lt;/span&gt;   &lt;span class="n"&gt;CELERY_TASK_SOFT_TIME_LIMIT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;240&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;KONG Routing Complexity&lt;/strong&gt;: With least-connection across heterogeneous instance types (some 7.5 CPU cores, some 3.9), we had to implement:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;   &lt;span class="c1"&gt;-- Kong plugin to weigh instances by capacity&lt;/span&gt;
   &lt;span class="c1"&gt;-- Instance with 7.5 cores should get ~2x traffic of 3.9 core instance&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Specific Q &amp;amp; A
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: "Given your NER and summarizer run on the large-document path, how are you handling concurrent load — one instance per service, or a shared pool with request queuing in front?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A: Distributed pool with service-specific queues&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NER&lt;/strong&gt;: 17 total instances (5 prod + 8 QA + 4 sales) each with &lt;code&gt;OLLAMA_NUM_PARALLEL=4&lt;/code&gt; → &lt;strong&gt;68 concurrent NER requests possible&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summarizer&lt;/strong&gt;: 20 total instances (2 main + 9 workflow + 9 workers) with &lt;code&gt;OLLAMA_NUM_PARALLEL=2&lt;/code&gt; → &lt;strong&gt;40 concurrent summarizer requests possible&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All fronted by KONG with least-connection algorithm&lt;/strong&gt; → no single point of overload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The key insight&lt;/strong&gt;: With 21 Ollama instances, even if one gets busy, KONG routes to the next least-loaded. Celery handles the queue depth and retries.&lt;/p&gt;




&lt;h2&gt;
  
  
  Critical Monitoring in Production
&lt;/h2&gt;

&lt;p&gt;We track these metrics per service:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service&lt;/th&gt;
&lt;th&gt;Critical Metrics&lt;/th&gt;
&lt;th&gt;Alert Threshold&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NER (All)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Queue length &amp;gt; 50 per celery worker&lt;/td&gt;
&lt;td&gt;Scale up workers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NER (Prod)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99th percentile latency &amp;gt; 3s&lt;/td&gt;
&lt;td&gt;Investigate model/instance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Summarizer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;99th percentile latency &amp;gt; 8s&lt;/td&gt;
&lt;td&gt;Check GPU usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ollama Instances&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memory usage &amp;gt; 80%&lt;/td&gt;
&lt;td&gt;Evict cold models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;KONG&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;504/502 errors rate &amp;gt; 1%&lt;/td&gt;
&lt;td&gt;Check instance health&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  One More Thing: Metrics Are Your Friend
&lt;/h2&gt;

&lt;p&gt;With 21 Ollama instances and 37 service instances (NER + Summarizer), observability is critical:&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="c"&gt;# Distributed tracing across services&lt;/span&gt;
&lt;span class="c"&gt;# We use OpenTelemetry with Jaeger&lt;/span&gt;
&lt;span class="c"&gt;# This helps identify if latency is in:&lt;/span&gt;
&lt;span class="c"&gt;# 1. KONG routing&lt;/span&gt;
&lt;span class="c"&gt;# 2. Celery queuing&lt;/span&gt;
&lt;span class="c"&gt;# 3. Ollama inference&lt;/span&gt;
&lt;span class="c"&gt;# 4. Network between instances&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: Your assessment is spot-on. The production challenges with Ollama aren't getting it running — they're keeping it running &lt;em&gt;predictably&lt;/em&gt; under mixed workloads across 21 instances. We've found that explicit model management with &lt;code&gt;OLLAMA_MAX_LOADED_MODELS&lt;/code&gt;, proper Celery tuning, and KONG's least-connection balancing are non-negotiable at this scale.&lt;/p&gt;

&lt;p&gt;The 21-instance deployment gives us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High availability&lt;/strong&gt; (can lose 2-3 instances without impact)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt; (can route QA vs Prod traffic separately)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; (least-connection ensures no single instance is overwhelmed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to dive deeper into any of these aspects further 🚀&lt;/p&gt;

</description>
      <category>devops</category>
      <category>infrastructure</category>
      <category>llm</category>
      <category>ollama</category>
    </item>
    <item>
      <title>Posted our LLM / Ollama process here:

https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Fri, 07 Aug 2026 09:08:36 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/posted-our-llm-ollama-process-here-1lab</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/posted-our-llm-ollama-process-here-1lab</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f" class="crayons-story__hidden-navigation-link"&gt;Powering ML Services with Ollama: A Complete Setup for Self-Hosted LLMs&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/suresh_devops_ffa0728a190" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3761300%2F92deda14-6c82-4fd9-b585-fa6555c3d99f.png" alt="suresh_devops_ffa0728a190 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/suresh_devops_ffa0728a190" class="crayons-story__secondary fw-medium m:hidden"&gt;
              suresh devops
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                suresh devops
                
              
              &lt;div id="story-author-preview-content-4339042" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/suresh_devops_ffa0728a190" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3761300%2F92deda14-6c82-4fd9-b585-fa6555c3d99f.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;suresh devops&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 7&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f" id="article-link-4339042"&gt;
          Powering ML Services with Ollama: A Complete Setup for Self-Hosted LLMs
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ollama"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ollama&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mlops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mlops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/machinelearning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;machinelearning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;3&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              4&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Powering ML Services with Ollama: A Complete Setup for Self-Hosted LLMs</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Fri, 07 Aug 2026 09:05:23 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/powering-ml-services-with-ollama-a-complete-setup-for-self-hosted-llms-3o7f</guid>
      <description>&lt;p&gt;Our ML Services need LLMs to process the large documents and data. We started using Ollama since 2024 and the learnings below:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ollama&lt;/strong&gt;, an open-source tool that packages LLMs into a simple CLI and REST server, has emerged as a game-changer for developers and organizations seeking privacy, cost-efficiency, and offline capabilities&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;What is Ollama and Why Use It? *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ollama is often described as "Docker for LLMs" – you pull a model by name, and Ollama handles quantization, memory mapping, and inference runtime behind the scenes. The core reasons developers choose Ollama over cloud APIs include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy&lt;/strong&gt;: Your prompts and data never leave your machine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost&lt;/strong&gt;: Zero per-token charges after the one-time model download&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Latency&lt;/strong&gt;: No network round-trip, especially fast on modern GPUs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline use&lt;/strong&gt;: Works without any internet connection once models are downloaded &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our ML Services Environment&lt;/p&gt;

&lt;p&gt;Our setup runs a variety of models optimized for different tasks, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Qwen3 series&lt;/strong&gt; (8B, 4B-instruct, 0.6B) for general-purpose inference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama3.2&lt;/strong&gt; and custom variants for specialized tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma3:4b&lt;/strong&gt; and &lt;strong&gt;Gemma2:2b&lt;/strong&gt; for lightweight processing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BGE-M3&lt;/strong&gt; for embedding generation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;llm&lt;/strong&gt; – a custom model created from GGUF format &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also maintain two dedicated services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ner&lt;/strong&gt;: For Named Entity Recognition in forms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;summarizer-llm&lt;/strong&gt;: For summarizing signals and communications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Complete Setup Walkthrough&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install Dependencies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start by updating your system and installing essential packages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
apt &lt;span class="nb"&gt;install &lt;/span&gt;git docker-compose curl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install NVIDIA Drivers and Container Toolkit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For GPU acceleration (which provides 10-100x speedup over CPU inference) , install NVIDIA drivers and the NVIDIA Container Toolkit:&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;distribution&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt; /etc/os-release&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$ID$VERSION_ID&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; https://nvidia.github.io/nvidia-docker/gpgkey | &lt;span class="nb"&gt;sudo &lt;/span&gt;apt-key add -
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; https://nvidia.github.io/nvidia-docker/&lt;span class="nv"&gt;$distribution&lt;/span&gt;/nvidia-docker.list | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/nvidia-docker.list

&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nvidia-docker2
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;ubuntu-drivers autoinstall
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reboot the system after driver installation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone and Configure the Ollama Repository
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/sujithrpillai/ollama.git
&lt;span class="nb"&gt;cd &lt;/span&gt;ollama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;docker-compose.yml&lt;/code&gt; file with GPU support:&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;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3.8'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ollama&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;ollama/ollama:latest&lt;/span&gt;
    &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ollama&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;11434:11434"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./models:/root/.ollama/models&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;genai-network&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;reservations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;devices&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nvidia&lt;/span&gt;
              &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;all&lt;/span&gt;
              &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;gpu&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;runtime&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nvidia&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;

  &lt;span class="na"&gt;open-webui&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;ghcr.io/open-webui/open-webui:main&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3000:8080"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;OLLAMA_BASE_URL=http://ollama:11434&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./backend/data:/app/backend/data&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;genai-network&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;

&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;genai-network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bridge&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;genai-network&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The GPU configuration in the &lt;code&gt;deploy&lt;/code&gt; section enables hardware acceleration for supported NVIDIA GPUs .&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start the Services
&lt;/li&gt;
&lt;/ol&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Pull Models&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Access the Ollama container and download models:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama pull qwen3:8b
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama pull gemma2:2b
docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama ollama pull llama3.2:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create Custom Models from GGUF Files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ollama allows creating custom models from GGUF format files :&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="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install &lt;/span&gt;git-lfs
git clone https://huggingface.co/org/llm-v3-270k-GGUF
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a &lt;code&gt;Modelfile&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; /home/RatnaDveLinga-v3-270k-GGUF/RatnaDveLinga-v3-270k.gguf&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then create the model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama create llmname &lt;span class="nt"&gt;-f&lt;/span&gt; Modelfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Verify Setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check models available:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@ollama:/ ollama list

NAME                                ID              SIZE      MODIFIED
qwen3:8b                            500a1f067a9f    5.2 GB    8 months ago
qwen3:4b-instruct                   0edcdef34593    2.5 GB    8 months ago
qwen2.5:1.5b                        65ec06548149    986 MB    9 months ago
gemma3:4b                           a2af6cc3eb7f    3.3 GB    13 months ago
llama3.2:latest                     a80c4f17acd5    2.0 GB    13 months ago
bge-m3:latest                       790764642607    1.2 GB    13 months ago
RatnaDveLinga:latest                decc819a53b1    1.7 GB    21 months ago
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Model Management Commands&lt;/p&gt;

&lt;p&gt;Essential CLI commands for managing your Ollama setup :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;List all downloaded models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama pull &amp;lt;model&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Download a model without running it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama run &amp;lt;model&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Run a model interactively&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama stop &amp;lt;model&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stop a running model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama rm &amp;lt;model&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Remove a model from disk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama ps&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show currently running models&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama show &amp;lt;model&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Display model metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Performance Considerations&lt;/p&gt;

&lt;p&gt;GPU acceleration can provide &lt;strong&gt;10-100x faster inference&lt;/strong&gt; compared to CPU-only operation . To verify GPU usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; ollama nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Open WebUI interface available at &lt;code&gt;http://localhost:3000&lt;/code&gt; provides a user-friendly way to interact with models, pull new ones, and manage your setup without using the command line .&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This setup provides a robust, self-hosted LLM environment with GPU acceleration, a comprehensive model library, and a web interface for easy interaction. Whether you're running specialized NER services, summarization tasks, or general-purpose inference, Ollama combined with Open WebUI delivers a powerful and private AI platform.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy prompting!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>ollama</category>
      <category>mlops</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Why Your Elasticsearch Backups Might Fail When You Need Them Most</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Tue, 04 Aug 2026 04:01:43 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/why-your-elasticsearch-backups-might-fail-when-you-need-them-most-2cid</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/why-your-elasticsearch-backups-might-fail-when-you-need-them-most-2cid</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why Your Elasticsearch Backups Might Fail When You Need Them Most: Lessons from the July 2026 Recovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the world of Site Reliability Engineering, there is a painful, often career-defining difference between having a backup and having a recovery. This reality hit our team with visceral clarity during a high-stakes production recovery event in July 2026. &lt;/p&gt;

&lt;p&gt;While we believed our standard operating procedures were robust, the technical nuances of Elasticsearch 7.17.x proved otherwise. Our previous SOP didn't just have "gaps"—it allowed for a "Partial" success state that nearly resulted in total data loss.&lt;/p&gt;

&lt;p&gt;The following insights are derived from the hard-won lessons of that recovery. We have since scrapped the old methods and codified these findings into our formal SOP (Version 1.0). If you are responsible for Elasticsearch clusters, these changes are the difference between a clean restoration and a catastrophic failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Partial" Snapshot is a Silent Failure:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The most dangerous trap in Elasticsearch administration is accepting a snapshot that isn't perfect. In July 2026, we learned that a snapshot can complete with a state of PARTIAL, a "silent failure" that often occurs due to node shutdowns, shard unavailability, or filesystem issues on the NFS server. A partial snapshot means some shards were simply skipped, leaving invisible data holes that you won't discover until your application is back online and throwing errors.&lt;/p&gt;

&lt;p&gt;Our updated SOP now strictly forbids proceeding with a restoration if the state is anything other than SUCCESS. If you encounter a PARTIAL state, do not attempt to overwrite or restart the full process immediately. Instead, you must resolve the underlying infrastructure issue and take a NEW, dedicated snapshot specifically for the missing indices.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"A backup is considered successful when: Snapshot state is SUCCESS."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Global State Bloat:&lt;/strong&gt;&lt;br&gt;
When executing a backup, the default behaviour is often to capture the cluster’s global state. While this seems comprehensive, it is an architectural poison when restoring to a different environment. During our recovery, we moved data from our source cluster (Primary Node) to a target cluster (Restore Cluster). Including the global state risked "poisoning" the new cluster with shard allocation awareness attributes and persistent tasks that were specific to the old hardware.&lt;/p&gt;

&lt;p&gt;By explicitly setting "include_global_state": false, we ensure the backup is truly portable.&lt;/p&gt;

&lt;p&gt;PUT /&lt;em&gt;snapshot/es_backup/all_indices&lt;/em&gt;&lt;br&gt;
{&lt;br&gt;
  "indices":"*",&lt;br&gt;
  "include_global_state":false&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This prevents the target cluster from trying to mimic the source's runtime configuration, which is essential for a clean start on the Restore Cluster cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't Restore the "Ghost" Indices:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A common reflex during a disaster is to restore everything inside the snapshot. However, our recovery post-mortem identified several "ghost" indices—system indices like .tasks and .geoip_databases—that should be ignored.&lt;/p&gt;

&lt;p&gt;These are runtime indices that Elasticsearch 7.17.x recreates automatically. Attempting to force a restore of .tasks, for example, can cause the target cluster to hang or crash as it tries to resume background tasks that were specific to the source cluster's state. &lt;/p&gt;

&lt;p&gt;Always exclude these system indices to allow the target cluster’s native operations to initialize correctly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "Green" Health Mandate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A successful recovery begins long before the PUT command is run; it starts with the health of the source. One of our key lessons from July 2026 was that snapshots taken during node restarts or maintenance windows are inherently unreliable.&lt;/p&gt;

&lt;p&gt;We now mandate a "Status Green" precondition. If your cluster is "Yellow," you have unassigned or initializing shards. Taking a snapshot of a degraded cluster is effectively building on shifting sand—it is the primary recipe for the PARTIAL failures mentioned earlier. Before you touch the backup API, verify that there are no relocating shards and the cluster is stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Metadata is the True Backup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A snapshot file residing on the NFS server is useless if the cluster that created it is gone and you have no record of what was inside. During the heat of a recovery, you cannot rely on the Elasticsearch API to tell you what you have if the cluster itself is down.&lt;/p&gt;

&lt;p&gt;We now require engineers to archive snapshot metadata—JSON output detailing index counts, shard status, and failure logs—off-cluster. This metadata should be stored in a version-controlled repository or a secondary secure bucket, not just on the cluster being backed up.&lt;/p&gt;

&lt;p&gt;GET /_snapshot/es_backup/?pretty&lt;/p&gt;

&lt;p&gt;"Archive snapshot metadata (indices, failures, timestamps, shard status) along with operational records for future audits and disaster recovery."&lt;br&gt;
This allows you to verify that the document counts on your new Restore Cluster exactly match what was captured from the Primary Node source, providing the empirical proof required for a successful sign-off.&lt;br&gt;
The Quarterly Integrity Test&lt;/p&gt;

&lt;p&gt;The "set it and forget it" mentality is the enemy of Site Reliability. You do not have a backup until you have proven you can restore it. Our SOP now mandates a test restore on a non-production cluster under three specific triggers:&lt;/p&gt;

&lt;p&gt;• Quarterly: A routine scheduled validation.&lt;br&gt;
• Post-Upgrade: Immediately following any Elasticsearch version change.&lt;br&gt;
• Infrastructure Change: Whenever there are modifications to the NFS backup server or network pathing.&lt;/p&gt;

&lt;p&gt;These tests verify more than just data; they validate your Recovery Time Objective (RTO) and ensure that your application remains compatible with the restored mappings and settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion: The Future of Resilience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The transition to Version 1.0 of our Elasticsearch SOP marks our shift from "checking a box" to building true operational resilience. By enforcing "Green" state preconditions, excluding dangerous global state, and rigorously archiving metadata off-cluster, we have replaced "Partial" hope with technical certainty.&lt;/p&gt;

&lt;p&gt;The July 2026 recovery was a wake-up call that forced us to evolve. If your primary cluster vanished today, would your metadata stored off the Backup server be enough to rebuild, or are you currently relying on a "Partial" hope?&lt;/p&gt;

</description>
      <category>elasticsearch</category>
      <category>es</category>
      <category>cluster</category>
      <category>devops</category>
    </item>
    <item>
      <title>Can we survive as DevOps Engineers in AI Era ?</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Sat, 21 Feb 2026 12:11:06 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/can-we-survive-as-devops-engineers-in-ai-era--2gc5</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/can-we-survive-as-devops-engineers-in-ai-era--2gc5</guid>
      <description>&lt;p&gt;&lt;strong&gt;_(Haunted by AI and trying to find answers - Notes -1)&lt;br&gt;
_&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As DevOps professionals, the most dangerous thing we can do right now is mistake our ability to write a CI/CD pipeline for job security. We are witnessing a violent divergence in the DevOps career path. &lt;/p&gt;

&lt;p&gt;AI is not coming for the architects; it is coming for the executors—the engineers who have spent their careers living at "YAML-level depth."&lt;/p&gt;

&lt;p&gt;The central thesis of this new era is : The manual pipeline builder is a dying breed. The AI-Orchestrating Architect is the future.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The Great Split: Tool Operators vs. Platform Architects&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
The industry is bifurcating into two distinct paths with vastly different lifespans. Understanding which path you are on is the difference between professional obsolescence and becoming a linchpin of the enterprise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Divergent Paths&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Path 1&lt;/strong&gt;: The Tool Operator (High Risk) This role is defined by routine execution: writing pipelines, drafting Helm charts, deploying containers, and patching minor configuration drift. Because AI can already automate 60–70% of these commodity tasks, this layer of the profession is rapidly becoming a low-value commodity.&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;Path 2&lt;/strong&gt;: The Platform Architect / Reliability Strategist (High Value) This is the domain of the AI-Orchestrating Architect. It involves high-level systemic design: failure domains, multi-region architecture, SLO/SLA strategy, and governing how AI is integrated into the SDLC.&lt;br&gt;
Analysis: The automation of commodity tasks makes the move to Path 2 an urgent strategic necessity. To survive this shift, you must stop being the person who moves the bricks and start being the person who designs the structural integrity of the building.&lt;/p&gt;

&lt;p&gt;"AI will replace DevOps engineers who stay at YAML-level depth."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1: Distributed Systems Depth Over CLI Commands&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mastering Kubernetes syntax or specific CLI flags is no longer a competitive advantage—it’s a baseline. AI can generate infrastructure code and deploy clusters with high proficiency. However, AI lacks the systemic intuition required to prevent or debug a total system collapse. To reach the architect level, you must master the mechanics of distributed systems:&lt;/p&gt;

&lt;p&gt;• Consensus &amp;amp; Leader Election: Mastering the Raft protocol and how state is maintained.&lt;br&gt;
• The CAP Theorem: Navigating the brutal trade-offs between Consistency, Availability, and Partition Tolerance.&lt;br&gt;
• Failure Management: Managing Eventual Consistency, Backpressure, Circuit Breaking, and the logic required to survive Retry Storms.&lt;br&gt;
• Idempotency: Ensuring that system operations can be repeated without unintended side effects.&lt;/p&gt;

&lt;p&gt;Analysis: While AI can build the infrastructure, human architectural thinking is required to manage the complexity of distributed failure. AI might build the bridge, but the Architect understands why the resonance of a thousand footsteps will make it collapse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2: The SRE Mindset and the "Error Budget"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The definition of "success" is shifting from binary uptime to Site Reliability Engineering (SRE). A Strategic Lead doesn't just ask if a service is "up"; they manage the reliability of the system as a product feature.&lt;/p&gt;

&lt;p&gt;Key SRE pillars from the source include:&lt;/p&gt;

&lt;p&gt;• SLO Design and Golden Signals: Measuring the metrics that actually impact the business.&lt;br&gt;
• Error Budgets: Using data to negotiate the tension between feature velocity and system stability.&lt;br&gt;
• Incident Analysis and Chaos Engineering: Proactively testing resilience and performing deep-dive postmortems to find the "why" behind the "what."&lt;/p&gt;

&lt;p&gt;Analysis: Designing for failure before it happens is a uniquely human skill. It requires a proactive, strategic mindset that views every incident not as a chore, but as an architectural data point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3: FinOps – Cost is Now an Architectural Pillar&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the age of massive cloud scale, infrastructure cost is no longer an accounting problem—it is a primary architectural constraint. As an architect, you must treat "Cost Architecture" with the same rigor as security.&lt;/p&gt;

&lt;p&gt;This requires mastering:&lt;/p&gt;

&lt;p&gt;• Bin Packing Math: Optimizing resource density to ensure maximum ROI on compute.&lt;br&gt;
• Spot vs. On-Demand Strategy: Designing workloads that can survive the volatility of spot instances to slash OpEx.&lt;br&gt;
• Observability Cost Control: Ensuring the cost of monitoring the system doesn't exceed the value of the data gathered.&lt;br&gt;
• Workload Rightsizing: Constant, automated tuning of resource requests to match actual utilization.&lt;/p&gt;

&lt;p&gt;Analysis: AI can generate a thousand instances in seconds, but it lacks the organizational context to know if those instances are a waste of capital. FinOps isn't just about saving money; it’s about reclaiming the innovation budget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4: The Rise of the Internal Developer Platform (IDP)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The future of DevOps is Platform Engineering. &lt;em&gt;&lt;u&gt;This marks a fundamental shift from "deploying applications" to "designing the systems that deploy applications."&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The goal of the Architect is to move from being a manual bottleneck to becoming a platform provider. This is achieved through:&lt;/p&gt;

&lt;p&gt;• Golden Path Templates: "Secure-by-default" workflows that make the right way the easy way.&lt;br&gt;
• Guardrails and Policy as Code: Automated governance that prevents disasters before they are committed to main.&lt;br&gt;
• Self-Service Environments: Empowering developers to move at speed within safe, pre-defined boundaries.&lt;/p&gt;

&lt;p&gt;Analysis: When you stop being the person who manually runs the deployment and start being the architect of the IDP, you become a force multiplier for the entire engineering organization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5: Judgment Under Uncertainty – The Irreplaceable Skill&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What makes a professional truly irreplaceable is not a collection of certifications, but judgment under uncertainty. You must become the AI-Orchestrating Architect who uses AI for root cause exploration, log pattern detection, threat modeling, and IaC reviews, but retains the final word.&lt;/p&gt;

&lt;p&gt;Critical "When to..." decisions include:&lt;/p&gt;

&lt;p&gt;• When to re-architect a legacy system vs. when to maintain the "technical debt."&lt;br&gt;
• When to deprecate a service that no longer serves the business.&lt;br&gt;
• When to accept calculated risk for the sake of market speed.&lt;br&gt;
"AI suggests. Architect decides."&lt;/p&gt;

&lt;p&gt;Analysis: This level of judgment is your career "moat." It is the protective layer that automation cannot cross because it requires context, experience, and the accountability to own the outcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Strategic Roadmap:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transitioning from an executor to a Reliability Strategist requires a structured evolution:&lt;/p&gt;

&lt;p&gt;Foundations &amp;amp; Distributed Systems Deep dive into Raft/Consensus, master observability, design High Availability (HA) across zones/regions, and take the lead on high-stakes incident analysis.&lt;/p&gt;

&lt;p&gt;Platform Ownership &amp;amp; Governance Own the platform architecture, design organization-wide cost governance models, and build the reusable DevOps frameworks that others consume.&lt;/p&gt;

&lt;p&gt;Strategy &amp;amp; Enterprise Architecture Define the enterprise-level DevOps strategy, lead multi-cluster/multi-region global designs, and move into the role of Principal Engineer or Enterprise Architect.&lt;/p&gt;

&lt;p&gt;The Hard Truth:&lt;/p&gt;

&lt;p&gt;The era of the "pipeline builder" is ending. &lt;u&gt;&lt;em&gt;The demand for those who can navigate platform engineering, reliability, cost optimization, and AI governance is exploding.&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Ignoring AI is the only certain way to be replaced. Those who integrate AI to handle the "grunt work" of log analysis and threat modeling will always outperform those who try to compete with the machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOps as “platform + reliability + cost + AI governance” will expand massively&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How we fixed Real Kubernetes Production Incidents</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Wed, 18 Feb 2026 15:30:28 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/kubernetes-advanced-scheduling-we-fixed-real-production-incidents-43de</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/kubernetes-advanced-scheduling-we-fixed-real-production-incidents-43de</guid>
      <description>&lt;p&gt;We Used 'Kubernetes Advanced Scheduling' to Fix Real Production Incidents as below:&lt;/p&gt;

&lt;p&gt;Kubernetes scheduling looks simple — until production traffic hits.&lt;br&gt;
In lower environments, the default scheduler works beautifully.&lt;/p&gt;

&lt;p&gt;In production, under load, across multiple AZs, with service mesh, sidecars, GPUs, and mixed workloads?&lt;/p&gt;

&lt;p&gt;That’s when we discovered:&lt;br&gt;
The scheduler is not “basic.”&lt;/p&gt;

&lt;p&gt;It’s powerful — if we know how to use it.&lt;/p&gt;

&lt;p&gt;Based on real issues we resolved in a live Kubernetes environment running critical workloads, these were 2 AM incidents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident 1: All Pods in One AZ – The Near-Outage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Situation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had a 3-zone cluster.&lt;br&gt;
A critical API deployment had 9 replicas.&lt;br&gt;
One evening, during a traffic spike, one Availability Zone had network degradation.&lt;br&gt;
Suddenly, 6 of our 9 pods were unreachable.&lt;br&gt;
Why?&lt;br&gt;
Because the default scheduler had “helpfully” packed pods into fewer zones for efficiency.&lt;br&gt;
ReplicaSet guarantees count.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;It does NOT guarantee distribution.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That night we learned:&lt;br&gt;
High Availability is not automatic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix: Pod Topology Spread Constraints&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We implemented:&lt;br&gt;
• topologyKey: topology.kubernetes.io/zone&lt;br&gt;
• maxSkew: 1&lt;br&gt;
• whenUnsatisfiable: DoNotSchedule&lt;/p&gt;

&lt;p&gt;This forced the scheduler to maintain balanced pod distribution across zones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Changed Immediately&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Pods spread 3-3-3 across AZs&lt;br&gt;
• Rolling updates maintained balance&lt;br&gt;
• Zone failure no longer meant partial collapse&lt;/p&gt;

&lt;p&gt;**Why This Matters &lt;/p&gt;

&lt;p&gt;Unlike anti-affinity (which is binary), &lt;strong&gt;Topology Spread Constraints are quantitative.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They enforce distribution math.&lt;br&gt;
That’s the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Real Production Lesson&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During a rolling update before the fix:&lt;/p&gt;

&lt;p&gt;New pods filled one AZ first.&lt;br&gt;
Traffic imbalance followed.&lt;br&gt;
Latency spikes happened.&lt;/p&gt;

&lt;p&gt;After implementing spread constraints:&lt;/p&gt;

&lt;p&gt;Updates remained balanced from the first pod.&lt;br&gt;
No traffic concentration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident 2: Node Memory Pressure – “But Requests Look Fine”&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;The Situation&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We were using:&lt;br&gt;
• Service mesh (Istio sidecars)&lt;br&gt;
• Kata Containers for isolated workloads&lt;/p&gt;

&lt;p&gt;Pods were requesting 512MB.&lt;br&gt;
Nodes were showing allocatable capacity sufficient for 20 pods.&lt;/p&gt;

&lt;p&gt;But after deploying 15 pods:&lt;/p&gt;

&lt;p&gt;• Memory pressure started&lt;br&gt;
• Evictions happened&lt;br&gt;
• Latency increased&lt;/p&gt;

&lt;p&gt;Metrics didn’t make sense.&lt;br&gt;
Until we realized:&lt;br&gt;
The scheduler was blind to runtime overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix: Pod Overhead via RuntimeClass&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We defined a RuntimeClass with:&lt;/p&gt;

&lt;p&gt;overhead:&lt;br&gt;
  podFixed:&lt;br&gt;
    memory: "50Mi"&lt;br&gt;
    cpu: "50m"&lt;br&gt;
Now every pod using that RuntimeClass automatically added overhead to scheduling math.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before:&lt;br&gt;
Scheduler thought 512MB per pod.&lt;/p&gt;

&lt;p&gt;After:&lt;br&gt;
Scheduler calculated ~562MB per pod.&lt;br&gt;
Node fitting became accurate.&lt;br&gt;
Evictions stopped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical Insight&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pod Overhead creates an “invisible container” in scheduling math.&lt;/p&gt;

&lt;p&gt;Without it:&lt;br&gt;
You overcommit silently.&lt;/p&gt;

&lt;p&gt;With it:&lt;br&gt;
Scheduling becomes financially and operationally accurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident 3: GPU Pods Landing on Spot Nodes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Situation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We had:&lt;/p&gt;

&lt;p&gt;• GPU nodes (on-demand)&lt;br&gt;
• General compute nodes (Spot instances)&lt;br&gt;
A training workload got scheduled on a Spot node without GPU.&lt;/p&gt;

&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;• CrashLoopBackOff&lt;br&gt;
• Wasted compute&lt;br&gt;
• Delayed ML training pipeline&lt;/p&gt;

&lt;p&gt;Node labels existed.&lt;br&gt;
But scheduling preference wasn’t strict enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix: Scheduler Profiles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of rewriting the scheduler, we:&lt;/p&gt;

&lt;p&gt;• Created a separate scheduler profile&lt;br&gt;
• Configured specific scoring behavior for ML workloads&lt;br&gt;
• Used taints + tolerations + stricter filtering&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;p&gt;• General workloads used default scheduling&lt;br&gt;
• ML workloads used a GPU-aware scheduling profile&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Production Impact&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Zero misplacements&lt;br&gt;
• Predictable GPU utilization&lt;br&gt;
• Better cost control&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incident 4: Bin Packing Wasn’t Actually Packing&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Situation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We were optimizing for cost.&lt;br&gt;
Using bin packing strategy (MostRequested scoring).&lt;br&gt;
But nodes were underutilized by 5–7%.&lt;/p&gt;

&lt;p&gt;Finance asked:&lt;/p&gt;

&lt;p&gt;“Why are we scaling nodes when CPU is still free?”&lt;br&gt;
The missing variable?&lt;br&gt;
Pod Overhead wasn’t being considered in our mental math.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Real Scheduler Math&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When NodeResourceFit runs:&lt;/p&gt;

&lt;p&gt;Total Pod Compute =&lt;br&gt;
(Sum of container requests) + (Pod Overhead)&lt;/p&gt;

&lt;p&gt;During scoring:&lt;br&gt;
Scheduler evaluates:&lt;br&gt;
(Current Node Usage + Total Pod Compute)&lt;/p&gt;

&lt;p&gt;With overhead included,&lt;br&gt;
Bin packing becomes more accurate.&lt;br&gt;
Without understanding this,&lt;br&gt;
You miscalculate cluster density.&lt;/p&gt;

&lt;p&gt;After adjusting runtime overhead correctly:&lt;br&gt;
• Node utilization improved&lt;br&gt;
• Fewer nodes required&lt;br&gt;
• Monthly cloud cost dropped noticeably&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Most Teams Don’t Realize&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The scheduler is not a black box.&lt;/p&gt;

&lt;p&gt;It has phases:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Filtering&lt;/li&gt;
&lt;li&gt; Scoring&lt;/li&gt;
&lt;li&gt; Binding&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can influence each phase.&lt;br&gt;
Advanced scheduling is not “nice to have.”&lt;/p&gt;

&lt;p&gt;It is production engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lessons learnt&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Replica count ≠ High Availability :
Use Topology Spread Constraints.&lt;/li&gt;
&lt;li&gt;Container request ≠ Total consumption :
Use Pod Overhead when sidecars or microVMs are involved.&lt;/li&gt;
&lt;li&gt;One scheduler profile ≠ All workloads :
Use Scheduler Profiles for workload classes.&lt;/li&gt;
&lt;li&gt;Bin packing requires correct math
Understand NodeResourceFit + Overhead interaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Running Kubernetes vs Engineering Kubernetes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anyone can deploy pods.&lt;br&gt;
Engineering Kubernetes means:&lt;br&gt;
• Designing failure domains intentionally&lt;br&gt;
• Accounting for invisible compute&lt;br&gt;
• Aligning scheduling with business rules&lt;br&gt;
• Optimizing cost through math, not guesswork&lt;/p&gt;

&lt;p&gt;The scheduler is not just a placement tool.&lt;/p&gt;

&lt;p&gt;It is:&lt;br&gt;
A control plane decision engine.&lt;br&gt;
And this separates:&lt;br&gt;
Clusters that survive production&lt;br&gt;
from&lt;br&gt;
Clusters that collapse under it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;(You no need to be a Kubestronaut to learn and apply not so known features of Kubernetes. All you need is a 'crisis' at 2 AM)&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>sre</category>
    </item>
    <item>
      <title>DevOps Books - A DevOps enthusiast's bucket list</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Wed, 18 Feb 2026 09:57:28 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/8-devops-books-that-rewire-you-into-a-devops-architect-1oof</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/8-devops-books-that-rewire-you-into-a-devops-architect-1oof</guid>
      <description>&lt;p&gt;Today’s default learning path for most techies looks like this:&lt;/p&gt;

&lt;p&gt;Problem → Panic → Open GPT → Copy → Deploy → Pray.&lt;/p&gt;

&lt;p&gt;We’ve optimized for speed of answers, not depth of understanding.&lt;/p&gt;

&lt;p&gt;Here’s the uncomfortable truth:&lt;/p&gt;

&lt;p&gt;GPT can give you answers.&lt;br&gt;
Books rewire how you think.&lt;/p&gt;

&lt;p&gt;And DevOps at the Architect level?&lt;br&gt;
It’s not about YAML. It’s about perception.&lt;/p&gt;

&lt;p&gt;If you want to think like a DevOps Architect — beyond what you do — you need something deeper than prompts.&lt;/p&gt;

&lt;p&gt;You need frameworks.&lt;br&gt;
You need mental models.&lt;br&gt;
You need immersion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The DevOps Architect Bucket List&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you truly want to think beyond tools and certifications, add these to your professional bucket list:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;☐ The Phoenix Project – Understand organizational chaos&lt;br&gt;
☐ Accelerate – Learn what high performance actually looks like&lt;br&gt;
☐ Continuous Delivery – Master deployment flow&lt;br&gt;
☐ The DevOps Handbook – Structure transformation&lt;br&gt;
☐ The Docker Book – Build container foundations&lt;br&gt;
☐ Lean IT: Enabling and Sustaining Your Lean Transformation – Eliminate systemic waste&lt;br&gt;
☐ The Journey to DevOps – A Testing Perspective – Strengthen quality culture&lt;/p&gt;

&lt;p&gt;This is about intentionally studying 7 foundational works that shape how DevOps Architects think — beyond how tool operates, configure pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: The Phoenix Project&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Author: Gene Kim&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Starts with story.&lt;/p&gt;

&lt;p&gt;This book humanizes DevOps. It exposes silos, burnout, firefighting culture, and broken flow.&lt;/p&gt;

&lt;p&gt;Before you design scalable systems, you must understand why organizations collapse under their own complexity.&lt;/p&gt;

&lt;p&gt;Architects first learn to see the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: Accelerate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Authors:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Nicole Forsgren, Jez Humble, Gene Kim&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;(Based on research from the State of DevOps Reports)&lt;/p&gt;

&lt;p&gt;This book moves DevOps from belief to evidence.&lt;/p&gt;

&lt;p&gt;Deployment frequency.&lt;br&gt;
Lead time.&lt;br&gt;
Change failure rate.&lt;br&gt;
MTTR.&lt;/p&gt;

&lt;p&gt;Now you’re not “suggesting improvements.”&lt;br&gt;
You’re defending architecture with science.&lt;br&gt;
Architects use data as leverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: Continuous Delivery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Authors:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Jez Humble, David Farley&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is your technical deep dive.&lt;/p&gt;

&lt;p&gt;Understanding how code moves safely from commit to production is more important than learning any specific CI/CD tool.&lt;/p&gt;

&lt;p&gt;Tools evolve.&lt;br&gt;
Delivery principles do not.&lt;/p&gt;

&lt;p&gt;Spend time mapping these concepts into your real infrastructure.&lt;/p&gt;

&lt;p&gt;Architects understand flow before scale.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: The DevOps Handbook&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Gene Kim, Patrick Debois, John Willis, Jez Humble&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If DevOps had a constitution, this would be it.&lt;/p&gt;

&lt;p&gt;Culture.&lt;br&gt;
Automation.&lt;br&gt;
Measurement.&lt;br&gt;
Sharing.&lt;/p&gt;

&lt;p&gt;This book connects technical practices with leadership and organizational design.&lt;/p&gt;

&lt;p&gt;It transforms DevOps from “engineering initiative” into “business strategy.”&lt;/p&gt;

&lt;p&gt;Architects think beyond pipelines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: The Docker Book&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Author: James Turnbull&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before Kubernetes.&lt;br&gt;
Before large-scale orchestration.&lt;/p&gt;

&lt;p&gt;You must understand containers deeply.&lt;/p&gt;

&lt;p&gt;Isolation.&lt;br&gt;
Portability.&lt;br&gt;
Consistency.&lt;/p&gt;

&lt;p&gt;Modern cloud architecture stands on this foundation.&lt;/p&gt;

&lt;p&gt;Architects master primitives before abstractions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: Lean IT: Enabling and Sustaining Your Lean Transformation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Authors:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Mike Orzen, Steven Bell&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DevOps without Lean becomes automation theater.&lt;/p&gt;

&lt;p&gt;Lean IT teaches systems thinking.&lt;/p&gt;

&lt;p&gt;Every delay.&lt;br&gt;
Every handoff.&lt;br&gt;
Every unnecessary approval.&lt;/p&gt;

&lt;p&gt;That’s waste.&lt;/p&gt;

&lt;p&gt;Architects remove friction before automating it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book: The Journey to DevOps – A Testing Perspective&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Author: Chris Riley&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This phase sharpens your quality mindset.&lt;/p&gt;

&lt;p&gt;DevOps is incomplete without testing strategy.&lt;/p&gt;

&lt;p&gt;Automation without validation is chaos at scale.&lt;/p&gt;

&lt;p&gt;This book reinforces that DevOps maturity includes strong testing culture and continuous validation.&lt;/p&gt;

&lt;p&gt;Architects design reliability into the system — not after it breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Real Difference comes from Long-form reading:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It Builds pattern recognition, Strengthens systems thinking, Improves strategic communication , Develops architectural intuition&lt;/p&gt;

&lt;p&gt;Most engineers consume snippets.&lt;br&gt;
Architects build frameworks.&lt;/p&gt;

&lt;p&gt;These Seven books.&lt;br&gt;
(May be in Twelve months?)&lt;/p&gt;

&lt;p&gt;That’s the blueprint.&lt;/p&gt;

&lt;p&gt;By committing to this roadmap, you move from:&lt;/p&gt;

&lt;p&gt;Tool operator&lt;br&gt;
  to&lt;br&gt;
  Systems thinker&lt;br&gt;
  to&lt;br&gt;
  Strategic DevOps Architect&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Most engineers collect certifications&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Architects collect mental models.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Choose wisely.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(I completed some. The rest are scheduled — long before the final production shutdown)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>containers</category>
      <category>kubernetes</category>
      <category>ai</category>
    </item>
    <item>
      <title>My Accidental 20-Year DevOps Journey : from Cruise Control to Cloud Native</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Mon, 16 Feb 2026 04:49:48 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/from-cruisecontrol-to-cloud-native-my-accidental-20-year-devops-journey-2kgc</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/from-cruisecontrol-to-cloud-native-my-accidental-20-year-devops-journey-2kgc</guid>
      <description>&lt;h2&gt;
  
  
  **Or: How I Learned to Stop Worrying and start living with Pipelines
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2007.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was there, typing away in a dimly lit office, surrounded by the gentle hum of servers that were actually in the same building (kids, ask your parents about "server rooms").&lt;/p&gt;

&lt;p&gt;My tools of the trade? CruiseControl (bless its XML-filled heart). Ant scripts that looked like ancient scrolls. ClearCase—the version control system that required a PhD in theoretical physics and the patience of a saint. And good old SVC, because Git was still just a twinkle in Linus Torvalds' eye.&lt;/p&gt;

&lt;p&gt;Back then, we called it "Build Release and Management." BRM. It sounded like a mild skin condition or perhaps a small-town accounting firm. Nobody outside our immediate team knew what we did. When people asked my job title, I'd say "I handle builds" and watch their eyes glaze over faster than a Windows 98 boot screen.&lt;/p&gt;

&lt;p&gt;I had absolutely zero idea that I was standing at the foot of a mountain that would consume the next two decades of my professional life—and fundamentally reshape how the entire world builds software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The Accidental Pioneer:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the thing about being "early" to something: you don't know it's early. You just know you're tired of manually deploying code at 2 AM while the developer who broke the build sleeps peacefully, dreaming of clean compilations.&lt;br&gt;
We weren't trying to start a revolution. We were just trying to get CruiseControl to send emails that weren't caught by the corporate spam filter.&lt;br&gt;
But somewhere between wrestling with ClearCase branching strategies and writing Ant targets that would make a masochist wince, something was happening. The seeds were being planted. The industry was slowly realizing: "Wait, maybe the people who write code and the people who run it should probably... talk to each other?"&lt;br&gt;
Revolutionary stuff, I know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Unstoppable Tidal Wave&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then DevOps happened. Or rather, DevOps happened to us.&lt;br&gt;
Suddenly, everyone cared about what we did. Developers wanted to know about deployment pipelines. Ops wanted to understand the build process. Managers started using words like "synergy" and "continuous delivery" in meetings, usually incorrectly, but the intent was there!&lt;/p&gt;

&lt;p&gt;The tools exploded:&lt;br&gt;
• Jenkins rose from the ashes of Hudson&lt;br&gt;
• Git arrived like a glorious messiah of branching&lt;br&gt;
• Puppet, Chef, Ansible—we could finally script servers like code&lt;br&gt;
• Docker containers (containers! that weren't Solaris Zones!)&lt;br&gt;
• Kubernetes—because one container is lonely, but thousands need a therapist&lt;br&gt;
• Terraform—infrastructure as code, because why should apps have all the fun?&lt;br&gt;
Every few years, just when I thought, "Okay, surely we've automated everything now," the universe would respond: "Hold my beer."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From BRM Newbie to DevSecOps Eng. Lead&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fast forward to 2026. Two decades later:&lt;/p&gt;

&lt;p&gt;I'm now DevSecOps strategist, FinOps Focal, ML Ops Starter, AI OPS enthusiast, Forced Innovationist across multiple Platforms. &lt;/p&gt;

&lt;p&gt;The naive BRM learner who once celebrated getting CruiseControl to trigger a build without crashing now spends days thinking about:&lt;/p&gt;

&lt;p&gt;• Shifting security left—so far left that security is practically in the parking lot before development even starts&lt;/p&gt;

&lt;p&gt;• Platform engineering—building internal developer platforms that feel like magic, but with better documentation&lt;/p&gt;

&lt;p&gt;• Compliance as code—because auditors shouldn't need spreadsheets in 2026&lt;/p&gt;

&lt;p&gt;• MLOps—applying DevOps principles to models that have opinions about cats vs. dogs&lt;/p&gt;

&lt;p&gt;• FinOps—because the cloud isn't actually "infinite," it's just "very large and surprisingly expensive"&lt;/p&gt;

&lt;p&gt;• Cognitive load reduction—fancy term for "making sure my engineers don't quit to become goat farmers"&lt;/p&gt;

&lt;p&gt;The tools have changed. The complexity has multiplied exponentially. But the mission remains surprisingly similar: get good software to users reliably, securely, and without waking anyone up at 2 AM.&lt;/p&gt;

&lt;p&gt;Because We're All Still Here…&lt;/p&gt;

&lt;p&gt;After twenty years, here's what I've learned:&lt;/p&gt;

&lt;p&gt;Lesson 1. Nothing ages faster than "cutting edge."&lt;/p&gt;

&lt;p&gt;I once gave a talk about why Maven was the future. I stand by what I said, but I also stand by my cargo shorts from 2007. Some things should stay in the past.&lt;/p&gt;

&lt;p&gt;Lesson 2. The more things change, the more they break.&lt;/p&gt;

&lt;p&gt;We have GitOps, policy-as-code, canary deployments, and chaos engineering. And yet, somewhere today, a developer is pushing directly to main and wondering why prod is on fire. That developer was me in 2008. It might still be me occasionally in 2026.&lt;/p&gt;

&lt;p&gt;Lesson 3. DevOps is still growing because software is still eating the world.&lt;br&gt;
Every industry, every company, every idea eventually becomes software-driven. And software needs to be built, deployed, and run. We're not running out of work anytime soon.&lt;/p&gt;

&lt;p&gt;Lesson 4. The best tool is still the one your team will actually use.&lt;br&gt;
Kubernetes is amazing. So is Bash. So is that weird shell script Frank wrote in 2019 that everyone pretends to understand. The technology matters less than the culture.&lt;/p&gt;

&lt;p&gt;Lesson 5. We're all still learning.&lt;/p&gt;

&lt;p&gt;I've been doing this for twenty years. I still Google basic YAML syntax. I still panic when a pipeline fails. I still celebrate small victories like a deployment that works on the first try.&lt;/p&gt;

&lt;p&gt;I have had infinite lessons with finite scars in my DevOps journey.&lt;/p&gt;

&lt;p&gt;To start with my 'epiphany' during my DevOps dark days, I would refer below books for 'Serious only' DevOps enthusiasts.&lt;/p&gt;

&lt;p&gt;Patrick Debois -   The DevOps Handbook&lt;br&gt;
Gene Kim -          The Phoenix Project, The DevOps Handbook&lt;br&gt;
Jez Humble -        Continuous Delivery, The DevOps Handbook&lt;br&gt;
John Willis -       The DevOps Handbook, Docker tutorial series&lt;br&gt;
James Turnbull-  The Docker Book, The Art Of Monitoring&lt;br&gt;
Nicole Forsgren- State of DevOps Report, The Data on DevOps&lt;br&gt;
Alan Shimel-        Founder DevOps.com &amp;amp; DevOpsInstitute.com&lt;br&gt;
Mike Orzen -        Lean IT: Enabling and Sustaining Your Lean Transformation, Field Guide&lt;br&gt;
Chris Riley -       DevOps.com,  The Journey to DevOps – A Testing Perspective&lt;br&gt;
Sean Hull -         Authors AWS, databases, scalability, and the cloud&lt;/p&gt;

&lt;p&gt;What's Next?&lt;/p&gt;

&lt;p&gt;If someone told me in 2007 that I'd still be doing this in 2026, writing blogs about DevSecOps and platform engineering, I'd have laughed. Then asked if ClearCase finally added Git integration. (It didn't. It really didn't.)&lt;/p&gt;

&lt;p&gt;But here we are. DevOps isn't a job title anymore—it's how software gets made. It's not a team—it's a culture. It's not a trend—it's the baseline.&lt;/p&gt;

&lt;p&gt;And the best part? It's still growing. Still evolving. Still full of problems to solve and puzzles to untangle.&lt;/p&gt;

&lt;p&gt;To the BRM newbies, the DevOps engineers, the platform builders, the SREs, the release managers, and everyone who's ever spent four hours debugging a YAML indentation issue:&lt;/p&gt;

&lt;p&gt;Welcome. The journey is weird, wonderful, and absolutely nowhere near finished.&lt;br&gt;
Come for the automation. Stay for the people. And never, ever trust a deployment on a Friday afternoon.&lt;/p&gt;




&lt;p&gt;A Former BRM Enthusiast, Current YAML Survivor&lt;/p&gt;

&lt;p&gt;P.S. - If anyone needs me, I'll be writing Ant scripts for old times' sake. Just kidding. I'm not a masochist.&lt;/p&gt;

</description>
      <category>career</category>
      <category>cicd</category>
      <category>devjournal</category>
      <category>devops</category>
    </item>
    <item>
      <title>Kubernetes Advanced Scheduling ( Hidden gems of Kubernetes )</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Sun, 15 Feb 2026 12:40:49 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/kubernetes-advanced-scheduling-hidden-gems-of-kubernetes-1--29l9</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/kubernetes-advanced-scheduling-hidden-gems-of-kubernetes-1--29l9</guid>
      <description>&lt;p&gt;Kubernetes is often described as a scheduler’s operating system. The default scheduler (kube-scheduler) does an excellent job of placing pods on nodes based on basic resource requests and limits. However, in complex, production-grade environments, the default "fit and spread" logic is often not enough.&lt;/p&gt;

&lt;p&gt;While Custom Resource Definitions (CRDs) and Operators get most of the spotlight in the ecosystem, the control plane itself hides a treasure trove of powerful scheduling levers. Here is a deep dive into the advanced scheduling features that separate a functional cluster from a finely-tuned, production-ready one.&lt;/p&gt;

&lt;p&gt;Problem 1: Pod Topology Spread Constraints: Orchestrating Disaster Recovery&lt;/p&gt;

&lt;p&gt;The Problem:&lt;br&gt;
By default, a ReplicaSet ensures a certain number of replicas are running, but it doesn't care where they run. In a cloud environment, if all pods land on the same Availability Zone (AZ) and that zone fails, you experience a full outage. Similarly, if pods are packed onto the same node, a node failure takes out the entire service.&lt;/p&gt;

&lt;p&gt;The Solution:&lt;br&gt;
Pod Topology Spread Constraints allow you to enforce strict or best-effort distribution rules across arbitrary failure domains (e.g., zones, nodes, or even custom host labels).&lt;/p&gt;

&lt;p&gt;How it works:&lt;br&gt;
You define a topologySpreadConstraints field in your Pod spec. You specify:&lt;br&gt;
• topologyKey : The label key on nodes that defines the domain (e.g., topology.kubernetes.io/zone).&lt;br&gt;
• maxSkew : The maximum allowable difference in the number of pods across domains.&lt;br&gt;
• whenUnsatisfiable : What to do if the skew can't be met (DoNotSchedule vs ScheduleAnyway).&lt;/p&gt;

&lt;p&gt;Technical Deep Dive:&lt;br&gt;
Unlike PodAffinity/AntiAffinity, which are binary (must be/not be), Spread Constraints are quantitative. They look at the distribution delta.&lt;br&gt;
• Use Case 1: Strict HA: You can ensure that if you have 3 zones, a deployment of 6 pods is scheduled exactly 2 per zone. If a zone is unhealthy and a pod reschedules, the scheduler will wait until the zone recovers or another pod moves to maintain balance.&lt;br&gt;
• Use Case 2: Rolling Updates: During a rolling update, new pods are created. Without spread constraints, the scheduler might fill up one zone first to bin-pack. With spread constraints, the new pods are spread evenly from the start, maintaining balance during the transition.&lt;/p&gt;

&lt;p&gt;Problem 2. Pod Overhead: Accounting for the Invisible Resources&lt;/p&gt;

&lt;p&gt;The Problem:&lt;br&gt;
When using "microVMs" (Kata Containers, gVisor) or sidecar-heavy meshes (Istio), the user container is not the only thing consuming resources. The runtime shim or the sidecar proxy consumes CPU and memory before the main process starts. If the scheduler ignores this, it will overcommit the node, leading to throttling or node pressure.&lt;/p&gt;

&lt;p&gt;The Solution:&lt;br&gt;
Pod Overhead is a feature used primarily with RuntimeClasses. It allows you to define the resources consumed by the infrastructure (the runtime) per pod.&lt;/p&gt;

&lt;p&gt;How it works:&lt;br&gt;
You define a RuntimeClass that includes an overhead field. Any pod using that RuntimeClass automatically adds this overhead to its scheduling calculations.&lt;/p&gt;

&lt;p&gt;Technical Deep Dive:&lt;br&gt;
Scheduling is a math problem. The scheduler sums pod.spec.containers[*].resources.requests to determine node fit.&lt;br&gt;
Pod Overhead injects an additional "invisible container" into this calculation.&lt;/p&gt;

&lt;p&gt;• Example: A Kata container might need 50MB of memory and 5% CPU for the VM kernel and agent. The user requests 512MB for their app. The scheduler will see a total demand of 562MB. Without this, the node would be overprovisioned, and the VM might crash.&lt;br&gt;
• Monitoring Impact: This also affects kubectl top node. The "allocatable" resources now account for this overhead, giving a more accurate picture of node utilization.&lt;/p&gt;

&lt;p&gt;Problem 3. Scheduler Profiles &amp;amp; Extenders: Custom Logic Without Custom Code&lt;/p&gt;

&lt;p&gt;The Problem:&lt;br&gt;
You need a specific scheduling rule (e.g., "Don't schedule GPU pods on nodes with Spot instances," or "Prefer nodes with SSDs for databases"). Rewriting the entire Kubernetes scheduler from scratch is a daunting and fragile task.&lt;/p&gt;

&lt;p&gt;The Solution:&lt;br&gt;
Scheduler Profiles (introduced in v1.18) and Scheduler Extenders (legacy but powerful) allow you to inject custom logic into the scheduling pipeline.&lt;br&gt;
• Scheduler Profiles (Multi-point): Allow you to run multiple scheduling configurations in parallel. You can configure which set of plugins (default or custom) run for specific pods.&lt;br&gt;
• Scheduler Extenders: A process external to the scheduler that acts as a "webhook" for scheduling. The scheduler sends it a list of filtered nodes, and the extender filters or prioritizes them further.&lt;/p&gt;

&lt;p&gt;Technical Deep Dive:&lt;br&gt;
The scheduling cycle is split into phases: Filtering (Predicates), Scoring (Priorities), and Binding.&lt;br&gt;
• Multi-scheduling: With Profiles, you could have one profile for general workloads that bin-packs tightly, and another profile for critical workloads that spreads thinly across nodes.&lt;br&gt;
• Extenders: Imagine you have a hardware accelerator connected via USB to some nodes. The scheduler doesn't know about USB devices. An extender can look at the pod annotation, check an inventory database, and filter out nodes that don't have the USB device plugged in, allowing the pod to land only on physically capable hardware.&lt;/p&gt;

&lt;p&gt;Problem 4. NodeResourceFit with Pod Overhead: The Hidden Math&lt;/p&gt;

&lt;p&gt;The Problem:&lt;br&gt;
While we covered Pod Overhead, it exists in isolation. The real magic happens when the scheduler's NodeResourceFit plugin interacts with it. Many engineers assume that if they set Pod Overhead, the scheduler just "adds it." But understanding how it adds it reveals potential pitfalls.&lt;/p&gt;

&lt;p&gt;The Solution:&lt;br&gt;
The NodeResourceFit plugin is the component that checks if a node has enough resources. Its integration with Pod Overhead ensures that overhead is treated as a first-class citizen during the Filtering and Scoring phases.&lt;/p&gt;

&lt;p&gt;Technical Deep Dive:&lt;br&gt;
There is a nuance here regarding Scoring. The scoring algorithm usually calculates a score based on the ratio of pod requests to node allocatable resources. With Pod Overhead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Total Pod Compute: (Sum of Container Requests) + (Pod Overhead)&lt;/li&gt;
&lt;li&gt; Node Consumption Calculation: When scoring, the scheduler looks at the current node usage + Total Pod Compute.&lt;/li&gt;
&lt;li&gt; MostRequested vs LeastRequested: If you are using MostRequested (bin packing) strategy, the inclusion of overhead means the scheduler will actually pack nodes tighter because it accounts for the "wasted" overhead resource, ensuring the user payload is dense relative to the total claimed resources. If you forget this, your bin-packing algorithm will be inaccurate by the margin of your overhead, potentially leaving CPU on the table.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Conclusion :&lt;/p&gt;

&lt;p&gt;These scheduling features represent the difference between "running Kubernetes" and "engineering Kubernetes." By leveraging Topology Spread Constraints, you ensure business continuity. By using Pod Overhead, you maintain financial and operational accuracy in mixed runtime environments. And by utilizing Scheduler Profiles, you unlock the ability to tailor the control plane to your specific hardware and business logic without fighting the upstream project.&lt;/p&gt;

&lt;p&gt;The scheduler is not a black box; it is a configurable engine. These "hidden gems" are the keys to unlocking its full potential.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>containers</category>
      <category>ai</category>
    </item>
    <item>
      <title>Hidden gems of Kubernetes</title>
      <dc:creator>suresh devops</dc:creator>
      <pubDate>Mon, 09 Feb 2026 12:40:49 +0000</pubDate>
      <link>https://dev.to/suresh_devops_ffa0728a190/hidden-gems-of-kubernetes-25l9</link>
      <guid>https://dev.to/suresh_devops_ffa0728a190/hidden-gems-of-kubernetes-25l9</guid>
      <description>&lt;p&gt;While CRDs and API extensions are well-known, Kubernetes has many powerful but underutilized features. Here are some that even experienced DevOps engineers often overlook:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Advanced Scheduling Features  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pod Topology Spread Constraints  : Fine-grained control over pod distribution across zones, nodes, etc.&lt;/li&gt;
&lt;li&gt;  Pod Overhead  : Account for runtime/daemon overhead when scheduling (critical for Kata Containers, gVisor).&lt;/li&gt;
&lt;li&gt;  Scheduler Profiles &amp;amp; Extenders  : Custom scheduler behavior without writing a custom scheduler.&lt;/li&gt;
&lt;li&gt;  NodeResourceFit with Pod Overhead  : Actually considers runtime overhead in scheduling decisions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Networking Deep Cuts  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Network Policy Port Ranges  : (K8s 1.25+) Specify port ranges like &lt;code&gt;30000-32767&lt;/code&gt; in NetworkPolicies.&lt;/li&gt;
&lt;li&gt;  Service &lt;code&gt;internalTrafficPolicy&lt;/code&gt;: Local   : Prefer routing traffic to pods on same node for NodePort/LoadBalancer.&lt;/li&gt;
&lt;li&gt;  IPVS Session Affinity Fine-Tuning  : Timeout settings, scheduling algorithms beyond round-robin.&lt;/li&gt;
&lt;li&gt;  EndpointSlice  : More scalable alternative to Endpoints (automatic since 1.21, but few leverage its full API).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Storage Gems  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Volume Populators  : (Alpha→Beta) Create PVC content from custom sources (like snapshots, http) pre-attachment.&lt;/li&gt;
&lt;li&gt;  Read-Write-Many (RWX) for block storage  : Some CSI drivers now support it via filesystem layer magic.&lt;/li&gt;
&lt;li&gt;  Volume Health Monitoring  : CSI driver can report volume issues to Kubernetes events.&lt;/li&gt;
&lt;li&gt;  Generic Ephemeral Volumes  : Request temporary storage without creating StorageClass/PVC definitions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Security Obscurities  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pod Security Admission (PSA) Exemptions  : Namespace-level exemptions for specific service accounts.&lt;/li&gt;
&lt;li&gt;  Seccomp/AppArmor Annotations for Windows  : Wait, they exist (some work on Windows Server 2022+).&lt;/li&gt;
&lt;li&gt;  TokenRequest API  : Short-lived service account tokens with audience binding.&lt;/li&gt;
&lt;li&gt;  CSIVolumeFSGroupPolicy  : Control how CSI drivers handle fsGroup ownership changes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;API Machinery &amp;amp; Admission Magic  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  API Priority and Fairness (APF)  : Prevent noisy neighbors in API server with flow control.&lt;/li&gt;
&lt;li&gt;  ValidatingAdmissionPolicy  : (K8s 1.26+) CEL-based policies without webhook complexity.&lt;/li&gt;
&lt;li&gt;  Server-Side Apply Field Management  : Track which manager owns which field for conflict resolution.&lt;/li&gt;
&lt;li&gt;  API Aggregation Layers  : Not just for CRDs - aggregate multiple API servers transparently.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Node &amp;amp; Runtime Features  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Kubelet Credential Providers  : Plugins for dynamic registry credential fetching (ECR, GCR, ACR).&lt;/li&gt;
&lt;li&gt;  RuntimeClass Scheduling  : Schedule pods to specific container runtimes (runc, Kata, gVisor).&lt;/li&gt;
&lt;li&gt;  Node System Swap Support  : (K8s 1.22+) Yes, swap can now be enabled with performance caveats.&lt;/li&gt;
&lt;li&gt;  Pod Memory QoS  : Memory throttling for containers using cgroups v2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Debugging &amp;amp; Observability  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Kubelet Tracing  : Built-in OpenTelemetry traces for kubelet operations.&lt;/li&gt;
&lt;li&gt;  Dynamic Kubelet Configuration  : (Deprecated but interesting) Concept lives on in KEPs.&lt;/li&gt;
&lt;li&gt;  Pod Ready++  : Startup probes are known, but &lt;code&gt;ReadinessGate&lt;/code&gt; for custom conditions isn't.&lt;/li&gt;
&lt;li&gt;  Pod Disruption Budget with Unhealthy Pod Exclusion  : Auto-exclude unhealthy pods from PDB calculations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Workload Features  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Pod Lifecycle Sleep Action  : In postStart/preStop hooks - &lt;code&gt;sleep 60&lt;/code&gt; is more common than you think.&lt;/li&gt;
&lt;li&gt;  Pod Deletion Cost  : (K8s 1.21+) Annotation to control pod deletion order during downscaling.&lt;/li&gt;
&lt;li&gt;  Pod Topology Spread Constraints by Pod Label  : Spread based on pod labels, not just topology.&lt;/li&gt;
&lt;li&gt;  Suspend CronJobs  : Temporarily disable without deleting.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CLI &amp;amp; Client Hidden Gems  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;kubectl alpha debug&lt;/code&gt;  : Node debugging with ephemeral containers (now stable as &lt;code&gt;kubectl debug&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;kubectl events&lt;/code&gt;  : The sorted, combined event view everyone should use but doesn't.&lt;/li&gt;
&lt;li&gt;  Client-Side Apply Server-Side Diff  : &lt;code&gt;kubectl apply --server-side --dry-run=server&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;  Custom Columns with JSONPath  : &lt;code&gt;kubectl get pods -o custom-columns=...&lt;/code&gt; with complex expressions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ecosystem Integration Points  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Container Device Interface (CDI)  : Standard for exposing hardware (GPUs, FPGAs, etc.) to containers.&lt;/li&gt;
&lt;li&gt;  Service Binding Specification  : (K8s 1.21+) Standardized way to bind services to workloads.&lt;/li&gt;
&lt;li&gt;  Cluster Trust Bundles  : Distribute CA certificates to workloads trustlessly.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Why These Are Unknown:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;  Version Skew  : Many use older K8s versions&lt;/li&gt;
&lt;li&gt;  Cloud Provider Abstractions  : Managed services hide complexity&lt;/li&gt;
&lt;li&gt;  Documentation Depth  : Features exist but aren't emphasized&lt;/li&gt;
&lt;li&gt;  Complexity vs. Benefit  : Some are too niche for general use&lt;/li&gt;
&lt;li&gt;  Gradual Rollouts  : Features exist for years in alpha/beta before attention&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
