<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>makgol's note – 버전 변경</title><link>https://docs.makgol.com/platform/kubernetes/karpenter/releases/</link><description>Recent content in 버전 변경 on makgol's note</description><generator>Hugo -- gohugo.io</generator><language>ko-KR</language><copyright>© 2026 Mont</copyright><lastBuildDate>Sun, 04 Oct 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://docs.makgol.com/platform/kubernetes/karpenter/releases/index.xml" rel="self" type="application/rss+xml"/><item><title>0.36 → 1.6 — v1 전환과 그 직후</title><link>https://docs.makgol.com/karpenter/01-changelog-v1-transition/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0900</pubDate><guid>https://docs.makgol.com/karpenter/01-changelog-v1-transition/</guid><description>
&lt;h1&gt;01 · 0.36 → 1.6 — v1이 바꾼 것은 API가 아니라 동작이다&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;v1beta1→v1을 &amp;ldquo;필드 이름이 바뀐 일&amp;quot;로 읽으면 사고가 납니다. changelog에서 위험한 절은 &lt;strong&gt;Behavior Changes&lt;/strong&gt;이고 그중 둘은 &lt;strong&gt;옵트아웃이 없습니다&lt;/strong&gt; — drift는 Stable 승격과 함께 feature gate가 삭제됐고(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/1311"target="_blank" rel="noopener"&gt;core#1311&lt;/a&gt;), expiration은 forceful로 되돌아갔습니다(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/1333"target="_blank" rel="noopener"&gt;core#1333&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;forceful expiration이 무시하는 건 PodDisruptionBudget(PDB)이 아닙니다.&lt;/strong&gt; 무시하는 것은 &amp;ldquo;대체 노드가 &lt;code&gt;Initialized&lt;/code&gt;가 될 때까지 드레인을 시작하지 않는다&amp;quot;는 사전 안전장치와 disruption budget입니다. &lt;code&gt;nodeclaim.expiration&lt;/code&gt; 컨트롤러는 후보 평가 없이 NodeClaim을 바로 &lt;code&gt;Delete&lt;/code&gt;합니다(&lt;code&gt;controllers/nodeclaim/expiration/controller.go:82&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;consolidateAfter&lt;/code&gt;가 v1에서 필수 필드입니다.&lt;/strong&gt; v1beta1의 &lt;code&gt;WhenUnderutilized&lt;/code&gt;에서는 설정조차 불가능했던 값이라 기존 동작을 유지하려면 &lt;code&gt;0s&lt;/code&gt;를 명시해야 합니다. &lt;code&gt;Never&lt;/code&gt;는 그 NodePool의 consolidation을 통째로 끕니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;terminationGracePeriod&lt;/code&gt;(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/916"target="_blank" rel="noopener"&gt;core#916&lt;/a&gt;)가 최종 승자입니다.&lt;/strong&gt; 만료되면 PDB·&lt;code&gt;do-not-disrupt&lt;/code&gt; 무관하게 남은 파드가 강제 삭제됩니다. 반대로 TGP를 걸면 drift가 &amp;ldquo;PDB·&lt;code&gt;do-not-disrupt&lt;/code&gt; 파드가 있는 노드&amp;quot;까지 후보로 채택합니다 — 안전장치를 스스로 꺼주는 대가로 CVE 패치를 밀 수 있게 됩니다. 노드 최대 수명 = &lt;code&gt;expireAfter&lt;/code&gt;(기본 &lt;code&gt;720h&lt;/code&gt;, 상한이지 하한이 아닙니다) + TGP.&lt;/li&gt;
&lt;li&gt;disruption budgets가 &lt;code&gt;Drifted&lt;/code&gt;/&lt;code&gt;Underutilized&lt;/code&gt;/&lt;code&gt;Empty&lt;/code&gt; &lt;strong&gt;reason별로&lt;/strong&gt; 나뉘었습니다(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/991"target="_blank" rel="noopener"&gt;core#991&lt;/a&gt;, &lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/1377"target="_blank" rel="noopener"&gt;core#1377&lt;/a&gt;). 삭제된 drift feature gate의 자리를 reason별 budget이 메웁니다 — 업스트림이 제시하는 유일한 drift 통제 수단입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.1.0이 v1beta1 서빙을 끝냈습니다.&lt;/strong&gt; &lt;code&gt;nodeClassRef.group&lt;/code&gt;/&lt;code&gt;kind&lt;/code&gt;가 강제 필수가 되고 kubelet 호환 어노테이션이 사라집니다. 같은 릴리스의 Bottlerocket + &lt;code&gt;instanceStorePolicy: RAID0&lt;/code&gt;은 &lt;strong&gt;v1.22.0 미만 이미지에서 노드가 join하지 못합니다.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.2.0의 메트릭 reason 라벨 snake_case 전환은 CI가 못 잡는 알람 무효화입니다.&lt;/strong&gt; &lt;code&gt;reason=&amp;quot;Drifted&amp;quot;&lt;/code&gt; 쿼리는 에러 없이 결과가 0이 됩니다. 같은 릴리스에서 &lt;code&gt;nodeclass.status&lt;/code&gt;·&lt;code&gt;nodeclass.termination&lt;/code&gt;이 &lt;code&gt;nodeclass&lt;/code&gt;로 합쳐졌습니다(&lt;a href="https://github.com/aws/karpenter-provider-aws/pull/7597"target="_blank" rel="noopener"&gt;aws#7597&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.6.0에서 native On-Demand Capacity Reservation(ODCR)이 beta·기본 활성화됐습니다&lt;/strong&gt;(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/2365"target="_blank" rel="noopener"&gt;core#2365&lt;/a&gt;). &lt;code&gt;open&lt;/code&gt; eligibility ODCR을 &lt;code&gt;capacityReservationSelectorTerms&lt;/code&gt;에 등재하지 않고 올리면 &lt;strong&gt;예약을 안 쓰면서 요금은 계속 나갑니다&lt;/strong&gt; — 이 구간에서 가장 비싼 회귀입니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MinValuesPolicy&lt;/code&gt;(1.6, &lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/2299"target="_blank" rel="noopener"&gt;core#2299&lt;/a&gt;·&lt;a href="https://github.com/aws/karpenter-provider-aws/pull/8250"target="_blank" rel="noopener"&gt;aws#8250&lt;/a&gt;)는 전역 옵션이고 기본값은 &lt;code&gt;Strict&lt;/code&gt;입니다. &lt;code&gt;minValues&lt;/code&gt; 자체는 v0.35.0(&lt;a href="https://github.com/kubernetes-sigs/karpenter/pull/963"target="_blank" rel="noopener"&gt;core#963&lt;/a&gt;)부터 있던 API로 0.36 운영자에게 새 기능이 아닙니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;v1 마이그레이션 가이드 763줄의 절반은 &amp;ldquo;필드가 어디로 갔다&amp;quot;는 표라 &lt;code&gt;kubectl apply&lt;/code&gt; 실패로 바로 드러납니다. 진짜 위험한 건 &lt;strong&gt;매니페스트가 그대로 통과하는데 클러스터가 다르게 행동하는&lt;/strong&gt; 항목입니다 — 만료된 노드가 대체 없이 드레인을 시작하고, 끄고 있던 drift가 켜지고, 쓴 적 없는 &lt;code&gt;consolidateAfter&lt;/code&gt;가 필수가 됩니다.&lt;/p&gt;</description></item><item><title>1.7 → 1.14 — 운영에 쓸 기능들</title><link>https://docs.makgol.com/karpenter/02-changelog-maturity/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0900</pubDate><guid>https://docs.makgol.com/karpenter/02-changelog-maturity/</guid><description>
&lt;h1&gt;02 · 1.7 → 1.14 — 지금 켤 만한 것과 미룰 것&lt;/h1&gt;&lt;div class="hx:overflow-x-auto hx:mt-6 hx:flex hx:rounded-lg hx:border hx:py-2 hx:ltr:pr-4 hx:rtl:pl-4 hx:contrast-more:border-current hx:contrast-more:dark:border-current hx:border-blue-200 hx:bg-blue-100 hx:text-blue-900 hx:dark:border-blue-200/30 hx:dark:bg-blue-900/30 hx:dark:text-blue-200"&gt;
&lt;div class="hx:ltr:pl-3 hx:ltr:pr-2 hx:rtl:pr-3 hx:rtl:pl-2"&gt;&lt;svg height=1.2em class="hx:inline-block hx:align-middle" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/&gt;&lt;/svg&gt;&lt;/div&gt;
&lt;div class="hx:w-full hx:min-w-0 hx:leading-7"&gt;
&lt;div class="hx:mt-6 hx:leading-7 hx:first:mt-0"&gt;&lt;ul&gt;
&lt;li&gt;1.7 이후 8개 마이너에서 API breaking은 사실상 없습니다. 대신 켜야 비로소 쓸 수 있는 기능이 라벨·feature gate·신규 CRD·IAM 네 층으로 쌓였습니다.&lt;/li&gt;
&lt;li&gt;flex 배제는 라벨 한 줄입니다 — &lt;code&gt;karpenter.k8s.aws/instance-capability-flex&lt;/code&gt;를 &lt;code&gt;In [&amp;quot;false&amp;quot;]&lt;/code&gt;로. &lt;code&gt;DoesNotExist&lt;/code&gt;로 쓰면 모든 인스턴스 타입이 배제되어 노드가 하나도 안 뜹니다(§2.2).&lt;/li&gt;
&lt;li&gt;기존 NodePool에 배제를 추가하면 떠 있는 flex 노드가 전부 &lt;code&gt;RequirementsDrifted&lt;/code&gt;로 교체됩니다. &amp;ldquo;다음부터&amp;quot;가 아니라 &amp;ldquo;지금 있는 걸 몰아낸다&amp;quot;입니다.&lt;/li&gt;
&lt;li&gt;알람이 에러 없이 깨진 곳이 둘입니다(1.7): &lt;code&gt;karpenter_pods_pods_drained_total&lt;/code&gt; → &lt;code&gt;karpenter_pods_drained_total&lt;/code&gt;, &lt;code&gt;disrupted_total&lt;/code&gt;의 reason &lt;code&gt;liveness&lt;/code&gt; → &lt;code&gt;registration_timeout&lt;/code&gt;(§3).&lt;/li&gt;
&lt;li&gt;업그레이드 자체가 노드를 교체하는 버전도 있습니다 — 1.12는 CA bundle이 drift 해시에 들어가면서 전 노드를 일괄 drifted로 만듭니다(§6.1). 1.8.4는 건너뜁니다(TopologySpreadConstraint(TSC) 회귀, 업스트림이 업그레이드 금지 명시).&lt;/li&gt;
&lt;li&gt;1.14 Balanced consolidation은 게이트가 없습니다 — &lt;code&gt;consolidationPolicy: Balanced&lt;/code&gt; 한 줄이면 됩니다(§7.2). Capacity Buffers는 alpha 게이트에 신규 CRD까지 필요하고 업스트림 문서가 코드보다 낡았습니다(§7.1).&lt;/li&gt;
&lt;li&gt;IAM 권한은 세 번 늘었습니다 — 1.7 &lt;code&gt;iam:ListInstanceProfiles&lt;/code&gt;, 1.11 &lt;code&gt;ec2:DescribePlacementGroups&lt;/code&gt;, 1.12 &lt;code&gt;ec2:DescribeInstanceStatus&lt;/code&gt;(§9).&lt;/li&gt;
&lt;li&gt;우리 기준(blue-green으로 0.36.2 → 1.14.0 직행) 판정은 §8.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;왜 이 문서인가.&lt;/strong&gt; 릴리스노트는 &amp;ldquo;무엇이 머지됐냐&amp;quot;까지만 말합니다. 필요한 구분은 셋 — ① 켜면 이득인 것, ② 설정·권한·CRD를 건드릴 것, ③ 업그레이드 자체가 노드를 교체하는 것. 이 문서는 그 셋으로 1.7~1.14를 나눠 판정합니다.&lt;/p&gt;</description></item></channel></rss>