<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Shivam Kumar</title>
    <link>https://www.kshivam.com</link>
    <description>Platform and SRE engineer. The 3 AM Brew: incident notes and design write-ups on Kubernetes, autoscaling, storage and AWS.</description>
    <language>en</language>
    <atom:link href="https://www.kshivam.com/feed.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title><![CDATA[Bounding an Agent’s Authority During Kubernetes Incident Response]]></title>
      <link>https://www.kshivam.com/blog/agent-permissions-kubernetes-incident-response</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/agent-permissions-kubernetes-incident-response</guid>
      <pubDate>Wed, 14 Oct 2026 08:00:00 GMT</pubDate>
      <description><![CDATA[Intent classification can choose a specialist, but it cannot grant access. A practical design for routing incident work across clusters while keeping authorization in scoped grants and Kubernetes RBAC.]]></description>
      <category>Kubernetes</category>
      <category>Platform</category>
      <category>Security</category>
      <category>AI</category>
    </item>
    
    <item>
      <title><![CDATA[Shell Access That Expires on its Own: Building Just-in-Time kubectl exec]]></title>
      <link>https://www.kshivam.com/blog/jit-kubectl-exec-access</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/jit-kubectl-exec-access</guid>
      <pubDate>Fri, 18 Sep 2026 08:40:00 GMT</pubDate>
      <description><![CDATA[Standing exec permissions in production are a liability. This is the design of a just-in-time replacement (request, approval, namespace lock, broker, scheduled expiry), and the long tail of making expiry recoverable as well as fail-closed: retry semantics, durable notifications, CloudFormation imports and evicted pods.]]></description>
      <category>Kubernetes</category>
      <category>Security</category>
      <category>AWS</category>
      <category>Platform</category>
    </item>
    
    <item>
      <title><![CDATA[Eight hours for a Ten-Minute Job: EFS Burst Credits, NFS Cache Flags and SQLite]]></title>
      <link>https://www.kshivam.com/blog/efs-burst-credits-nfs-cache-sqlite</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/efs-burst-credits-nfs-cache-sqlite</guid>
      <pubDate>Tue, 23 Jun 2026 14:05:00 GMT</pubDate>
      <description><![CDATA[Same image, three regions, one of them eight hours slow. The cause sat in a credit balance, a 4 KiB metering rule and three mount options. The first fix then broke an unrelated upload service, which taught me more about NFS close-to-open consistency than I ever wanted to know.]]></description>
      <category>AWS</category>
      <category>Kubernetes</category>
      <category>Storage</category>
      <category>Troubleshooting</category>
    </item>
    
    <item>
      <title><![CDATA[79% NXDOMAIN: How ndots:5 Turned One Queue Worker Into a DNS Flood]]></title>
      <link>https://www.kshivam.com/blog/kubernetes-ndots-dns-amplification</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/kubernetes-ndots-dns-amplification</guid>
      <pubDate>Tue, 14 Apr 2026 09:20:00 GMT</pubDate>
      <description><![CDATA[Three node-local DNS caches were pinned at their CPU limit while CoreDNS looked bored. The cause was a resolver option most people never set, multiplied by 75 replicas on three oversized nodes. A full walk from resolv.conf to packet capture to node-pool design.]]></description>
      <category>Kubernetes</category>
      <category>DNS</category>
      <category>Networking</category>
      <category>AWS</category>
      <category>Troubleshooting</category>
    </item>
    
    <item>
      <title><![CDATA[Admission Controllers In Kubernetes]]></title>
      <link>https://www.kshivam.com/blog/introduction-to-admission-controllers-in-kubernetes</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/introduction-to-admission-controllers-in-kubernetes</guid>
      <pubDate>Fri, 16 May 2025 07:45:00 GMT</pubDate>
      <description><![CDATA[We already know, Control Planes in Kubernetes exposes API of various Group, Version and Kinds [GVK]. An admission control plug-in works as a webhook in Kubernet...]]></description>
      <category>Getting Started</category>
    </item>
    
    <item>
      <title><![CDATA[Cuncurrent Programming in Python - Async.io]]></title>
      <link>https://www.kshivam.com/blog/concurrent-programming-in-python</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/concurrent-programming-in-python</guid>
      <pubDate>Thu, 29 Aug 2024 10:20:00 GMT</pubDate>
      <description><![CDATA[Let's introduce Async.io, a Python framework enabling asynchronous single-threaded concurrent code using coroutines. If you haven't used it yet that's perfect, ...]]></description>
      <category>Getting Started</category>
    </item>
    
    <item>
      <title><![CDATA[Logs as a Pipeline, Not a Pile: Running Vector on Kubernetes]]></title>
      <link>https://www.kshivam.com/blog/vector-kubernetes-logging-pipeline</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/vector-kubernetes-logging-pipeline</guid>
      <pubDate>Wed, 08 Nov 2023 09:35:00 GMT</pubDate>
      <description><![CDATA[Agents that only forward, an aggregator that owns durability, Kafka in the middle, disk buffers on gp3, dead-letter routing for events that fail to parse, and S3 keys designed around the query engine. Plus the three things that bit us: a queue that throttled sends, a metrics label that leaked forever, and two containers sharing one name.]]></description>
      <category>Kubernetes</category>
      <category>Observability</category>
      <category>Kafka</category>
      <category>AWS</category>
    </item>
    
    <item>
      <title><![CDATA[Six-figure Subject Counts: Why Our Schema Registry Fell Over Every Day]]></title>
      <link>https://www.kshivam.com/blog/schema-registry-too-many-subjects</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/schema-registry-too-many-subjects</guid>
      <pubDate>Thu, 27 Apr 2023 07:50:00 GMT</pubDate>
      <description><![CDATA[Daily 5xx from Schema Registry took down JSON-to-Avro converters and Kafka Connect sinks. The cause was not traffic. It was a registry carrying a few hundred thousand subjects, replaying them on every restart, and a cold-cache stampede whenever Connect rebalanced. What we found, how the registry stores state, and the four fixes.]]></description>
      <category>Kafka</category>
      <category>Data</category>
      <category>Troubleshooting</category>
    </item>
    
    <item>
      <title><![CDATA[Exactly 100, Not 101: Distributed Rate Limiting with Envoy and Redis]]></title>
      <link>https://www.kshivam.com/blog/envoy-global-rate-limiting-redis</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/envoy-global-rate-limiting-redis</guid>
      <pubDate>Tue, 06 Dec 2022 10:25:00 GMT</pubDate>
      <description><![CDATA[Per-tenant quotas for internal APIs, enforced across many instances, on VMs and Kubernetes, on x86 and ARM. Why we picked Envoy over Kong, Caddy and a managed WAF, how descriptors really compose, how we proved a 100-per-hour quota lets exactly 100 through, and the sidecar plumbing that made it a one-line opt-in.]]></description>
      <category>Networking</category>
      <category>Kubernetes</category>
      <category>Platform</category>
      <category>AWS</category>
    </item>
    
    <item>
      <title><![CDATA[Read-Only File System, But Only on Some Spot Nodes: cloud-init, instance store and fstab]]></title>
      <link>https://www.kshivam.com/blog/cloud-init-instance-store-read-only-filesystem</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/cloud-init-instance-store-read-only-filesystem</guid>
      <pubDate>Tue, 11 Oct 2022 13:15:00 GMT</pubDate>
      <description><![CDATA[Workers in one autoscaling group kept failing with "Read-only file system". Same AMI, same user data, and only some instances affected. The difference was hardware: the Spot mix included instance types with local disks, and cloud-init rewrote fstab on exactly those. How we found it, how cloud-init turns "ephemeral0" into a device path, what ext4 does when it stops trusting a filesystem (and how that changed in 2024), and how to make the AMI boring again.]]></description>
      <category>AWS</category>
      <category>Storage</category>
      <category>Troubleshooting</category>
    </item>
    
    <item>
      <title><![CDATA[Ten Million Objects a Day: Paying The Small-Files Tax on a Kafka-to-S3 Pipeline]]></title>
      <link>https://www.kshivam.com/blog/kafka-s3-small-files-data-lake</link>
      <guid isPermaLink="true">https://www.kshivam.com/blog/kafka-s3-small-files-data-lake</guid>
      <pubDate>Thu, 22 Jul 2021 11:10:00 GMT</pubDate>
      <description><![CDATA[Our Kafka backup to S3 wrote small objects, around ten million a day. The bill was driven by request count, not bytes. Here is how we stopped partitioning at write time, got Parquet out of schemaless JSON, compacted hourly inside Athena around its 100-partition limit, and why five other designs lost.]]></description>
      <category>AWS</category>
      <category>Data</category>
      <category>Storage</category>
      <category>Kafka</category>
    </item>
    
  </channel>
</rss>