
の記事によりますと、Kubernetes 1.37「Garhwal」が8月26日に正式リリースを迎え、合計67件に及ぶ機能強化が取り込まれました。個人開発でDockerやLaravelアプリをクラスタ運用されている方にとっては、嬉しい安定化がある一方で、「上げたら壊れた」となりかねない互換性の変更もいくつか含まれています。本日は、夜の落ち着いた時間で、このリリースの中身を「あなたの環境で何を確認すべきか」という視点で一緒に整理していきましょう。
アップグレード前にチェックしたい4つの落とし穴
リリースノートを眺めていて、私がまず声を大にして伝えたいのが、機能追加ではなく挙動の変更です。Kubernetesは3か月に一度のペースでバージョンが進むため、半年以上同じクラスタを動かしている方ほど、思わぬところで足元をすくわれることがあります。今回は特に、次の4点がアップグレード作業のチェックリストに並びます。
ひとつ目は、cgroup v1ノードが起動しなくなるという変更です。1.35以来の既定値がそのまま有効になり、kubeletはcgroup v1環境では初期化に失敗します。最近の主要Linuxディストリビューションはcgroup v2へ移行が進んでいますが、長く運用しているオンプレのホストや、独自のノードイメージを使っている環境では、まさにこの変更の直撃を受けます。failCgroupV1: falseを明示的に設定すれば回避も可能ですが、まずは旧環境が残っていないかを夜のうちに確認しておくと安心です。
ふたつ目は、kube-proxyのipvsモードです。1.37からは起動時に非推奨の警告が出るようになり、1.40で既定無効化、1.43で完全削除が予定されています。背景には「カーネルのipvs APIだけではKubernetesのServicesを完全には実装できないため、内部的にiptablesに依存している」という、正直で少々厄介な事情があるそうです。後継はnftablesモードで、1.37ではnftablesを既定バックエンドにするアルファの取り組みも始まっています。1.43は早く見積もっても2028年初頭に届く計算なので、「まだ先」と思わず、いま動いているモードを一度把握しておくと、移行プロジェクトの助走がだいぶ楽になりますよ。
みっつ目は、静的ポッドからSecretやConfigMapをsecretRef / configMapRefで参照できなくなったという、地味だけれど確実にスクリプトを壊す変更です。静的ポッドはAPIサーバを通さずに作られるため、APIオブジェクトを消費するのは筋が通らない、というロジックで、PreventStaticPodAPIReferences feature gateは1.37で外されました。コントロールプレーンのマニフェストや、ノードのブートストラップツールがここを経由していた場合は、1.37への引き上げを境に動作が変わります。
よっつ目は軽めですが、kubectl run -fが非推奨になりました。実はこれまで、ファイル指定の-fはCLIフラグの内容を素通しするだけで、ファイル自体は読まれていなかったという裏話があります。今後はkubectl apply -fまたはkubectl create -fを使っていく流れです。シェルスクリプトやMakefileの中で癖でkubectl run -fを叩いていないか、一度grepしておくと、思わぬ互換性問題に巻き込まれずに済みます。
個人開発の現場で嬉しい安定化トピック
一方で、機能追加の側面で私が「お、これは」と目を引いたのが、3つのstable昇格です。これらは「仕組みを理解して使いこなせば、日々の運用がぐっと楽になる」ものばかりなので、設計レベルで取り入れてみてください。
まず、ポッドレベルでのリソース制限(KEP-2837)が、ついにGAしました。従来はコンテナ単位でrequestsとlimitsを設定していましたが、これからはポッド全体に共有の予算を持たせ、その範囲をコンテナが引き合う形で書けます。サイドカーを複数並べているポッドでは、コンテナごとにワーストケースを盛る必要がなくなり、リソース設計の再現性が高まります。
次に、HPAの許容値をクラスタ全体ではなくHPAごとに設定できるようになりました(KEP-4951)。これまで10%で固定されていたため、「このワークロードだけ感度を下げたい」となっても、fleet全体に波及させてしまうしかありませんでした。1.37からはHPAのspec側で個別指定ができるので、特定のワークロードがフラフラするのを、そのワークロード単独で落ち着かせられます。
そしてPod Certificates(KEP-4317)とClusterTrustBundles(KEP-3257)も同時にstableになっています。証明書配布の仕組みがAPIドリブンで整えられるようになるので、cert-managerやIstioを自前で組み合わせているような環境では、設定の見通しがだいぶ良くなるはずです。
今夜のうちにやっておきたい3つの確認
最後に、明日からのアクションを3つだけ提案させてください。Kubernetesのバージョンは一度上げると戻すのが大変なので、再現性を担保しながら慎重に進めたいところです。
1. クラスタ内のcgroupモードをノードごとに確認する:stat -fc %T /sys/fs/cgroup/の出力でcgroup2fsであればv2、それ以外はv1の可能性が高いので、v1が残っていないかをまず洗い出しましょう。
2. kube-proxyのモードをipvs / iptables / nftablesのいずれかで把握する:クラスタ規模や将来の移行計画に応じて、いま動かしているものをメモしておくだけでも、後の判断が楽になります。
3. 静的ポッドのマニフェストでsecretRef / configMapRefを参照していないかgrepする:CIやブートストラップスクリプトも含めて、目視よりgrepのほうが確実です。
リリースノートにはこのほかにも23件のbetaと27件のalphaが並んでいます。個人開発レベルではまずstableと「壊れるもの」を押さえるのが、再現性への近道です。まずは今夜ここまでの3点だけ、落ち着いて確認してみてください。全体像はKubernetes公式のリリースアナウンスに一度目を通せば、今週のうちに整理がつくはずです。
関連記事: Docker・インフラ構築をわかりやすく解説.