<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Karpenter on Shawn Sorichetti</title>
    <link>/tags/karpenter/</link>
    <description>Recent content in Karpenter on Shawn Sorichetti</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>me@ssoriche.com (Shawn Sorichetti)</managingEditor>
    <webMaster>me@ssoriche.com (Shawn Sorichetti)</webMaster>
    <copyright>© 2026 Shawn Sorichetti</copyright>
    <lastBuildDate>Mon, 20 Apr 2026 09:51:44 -0400</lastBuildDate><atom:link href="/tags/karpenter/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Use maxSkew: 2 with Kubernetes Topology Spread Constraints</title>
      <link>/til/kubernetes-maxskew-topology-spread/</link>
      <pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate>
      <author>me@ssoriche.com (Shawn Sorichetti)</author>
      <guid>/til/kubernetes-maxskew-topology-spread/</guid>
      <description>&lt;p&gt;&lt;code&gt;maxSkew: 1&lt;/code&gt; on a &lt;code&gt;topologySpreadConstraints&lt;/code&gt; config looks like the obviously correct choice — maximum spread, tightest guarantee. We ran it that way in production until it caused a partial outage. Turns out &lt;code&gt;maxSkew: 2&lt;/code&gt; is almost always the safer default, and the difference only shows up in the failure case.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The phantom domain problem&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;With &lt;code&gt;topologyKey: kubernetes.io/hostname&lt;/code&gt; and &lt;code&gt;whenUnsatisfiable: DoNotSchedule&lt;/code&gt;, the &lt;a href=&#34;https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;Kubernetes scheduler&lt;/a&gt; counts every node registered in the API as a topology domain — including nodes that exist but can&amp;rsquo;t accept pods. A node that&amp;rsquo;s resource-exhausted but not tainted, or registered but not yet &lt;code&gt;Ready&lt;/code&gt;, still participates in the skew calculation. Its count is 0.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
