はじめに
このエントリは、Kubernetes 1.22 の CHANGELOG からWhat's new!と、各変更点についてまとめたページへのリンクです。
詳細については各まとめページを参照してください。
変更点の詳細へのリンク
- Metrics Changes と SIG Instrumentation @watawuwu
- Known Issues, Urgent Upgrade Notes @uesyn
- SIG Apps @yosshi_
- SIG API Machinery @Ladicle
- SIG Auth @hiyosi
- SIG CLI @superbrothers
- SIG Cluster Lifecycle @yuanying
- SIG Storage @ysakashita
- SIG Network @tkusumi
- SIG Scheduling @everpeace
- SIG Node @ryotarai
What's new!
いくつかのbetaのKubernetes APIの削除
いくつかのAPIは特定のベータ版の提供をしなくなったため、それらのAPIのGA版を利用してください。全ての既存のオブジェクトはGAのAPIを通して操作できます。この削除はValidatingWebhookConfiguration
, MutatingWebhookConfiguration
, CustomResourceDefinition
, APIService
, TokenReview
, SubjectAccessReview
, CertificateSigningRequest
, Lease
, Ingress
, そして IngressClass
APIのbeta版を含みます。全てのリストはDeprecated API Migration Guide とブログポスト Kubernetes API and Feature Removals In 1.22: Here’s What You Need To Knowを確認してください.
Kubernetesのリリース頻度の変更
私たちは皆、生活の中で変化に対応しなければなりませんが、この1年は特にそうでした。Kubernetesのリリースチームも同様にCOVID-19のパンデミックの影響を受け、1年間のリリース数に関するユーザベースの意見に耳を傾けていました。2021年4月24日から、Kubernetesのリリース頻度は年4回から年3回へ減らされたことが公式から発表されました。
詳細は公式ブログ記事Kubernetes Release Cadence Change: Here’s What You Need To Knowをご確認ください。
External credential providers
Kubernetesクライアントのcredential pluginは1.11以来betaでしたが、Kubernetes v1.22でこの機能はstableとなりました。GAの機能セットにはインタラクティブなログインフローを提供するプラグインのサポートの改善が含まれます。このリリースは多くのバグ修正も含みます。プラグインを作りたい人はsample-exec-pluginを参考にしてみてください。これと関連して、in-treeのAzureとGCP認証プラグインが非推奨となりout-of-treeの実装をものが推奨されます。
Server-side ApplyがGAへ
Server-side Applyはフィールドの所有者をトラッキングする新しいオブジェクトのマージアルゴリズムでありKubernetes API server上で動作します。 Server-side Applyはユーザやコントローラが宣言的な設定によりリソースを管理するのに役立ちます。
これにより完全に意図した設定を指定し送信するだけ宣言的に作成や修正を実行できます。数回のリリースのbetaを経て、Server-side ApplyはGAとなりました。
Cluster Storage Interface graduations
WindowsノードのCSIサポートは、1.22リリースでGAになります。Kubernetes v1.22では、Windows特権コンテナはアルファ機能のみです。WindowsノードでCSIストレージを使用できるようにするには、CSIProxyの有効によりCSIノードプラグインが非特権Podとしてデプロイされ、このProxyを使うことで、ノード上の特権ストレージ操作を実行できます。
もう一つの、v1.22でGAする機能はCSI Service Account Tokenサポートです。この機能により、CSIドライバは、特権を持ったIDの代わりにPodの bound service account tokensを使用できます。また、これらのボリュームを再発行するためのコントロールも提供しているため、短命のトークンを更新することができます。
SIG Windows development tools
デベロッパーコミュニティの成長につれ、SIG Windowsは複数のツールをリリースしました。これらは複数のCNIプロバイダー(Antrea, Calico)をサポートし、マルチプラットフォーム(Hyper-VやVirtualBox, vSphereなどのvagrant互換のプロバイダー)で動作可能となります。
またWindows版のkubeletやkube-proxyをcompileすることでスクラッチで最先端のWIndowsの機能を実行するための新しい方法もあり、それらを他のKubernetesコンポーネントのデイリーのビルドとともに利用できます。
kubeadmを使ったさらに安全なコントロールプレーンの構築
新しいalpha機能によって、kubeadmのコントロールプレーンがnon-rootなユーザで実行することができるようになりました。これは長らくkubeadmに求められていたセキュリティ対策となります。試す場合にはkubeadm特有の RootlessControlPlane
FeatureGateを有効化してください。このalpha機能を使ってクラスターをデプロイすることで、コントロールプレーンは少ない権限で実行されます。
新しいv1beta3
の設定APIはv1beta2
をベースに長らく求められていた機能を追加し、いくつかの機能を非推奨としました。そのため、v1beta3
は現在推奨されているAPIのバージョンとなりますが、v1beta2
APIも引き続き利用可能であり、非推奨APIではありません。
etcdのバージョンが3.5.0へ
Kubernetesのデフォルトのバックエンドストレージであるetcdは新たな3.5.0がリリースされ、コミュニティにそれは受け入れられました。新たなリリースはセキュリティやパフォーマンス、モニタリング、デベロッパーエクスペリエンスの改善を含みます。
リースオブジェクトがメモリリークを引き起こしたり、圧縮操作時デッドロックを引き起こすなどの多くのバグ修正が含まれています。複数の新しい機能が導入され、構造化ロギングへの移行やログローテーションの構築なども導入されています。
このリリースには、トラフィックの過負荷に対する解決策を実装するための、詳細な将来のロードマップが含まれています。変更点の詳細なリストは、3.5.0 release announcementをご覧ください。
Kubernetesノードのsystem swapをサポート
全てのシステム管理者またはKubernetesユーザはswap領域を無効化する
という設定をKubernetesを利用している状況です。Kubernetes v1.22のリリースでswapメモリを有効化したノードの実行がalphaとしてサポートされました。
この変更は管理者がLinuxノードのswapを設定できるようにし、ブロックストレージの一部を追加の仮想メモリとして利用することを選択できるようになります。
クラスターワイドなseccompのデフォルト
新たなalphaのFeatureGateであるSeccompDefault
がkubeletへ追加され、対応する--seccomp-default
フラグやkubeletの設定とともに追加されました。
両方が有効化されると、seccomp promfileを明示的に設定していないPodに対するkubelet挙動が代わります。
クラスターワイドなseccompのデフォルトを利用すると、kubeletはUnconfined
ではなくRuntimeDefault
をseccomp profileのデフォルトとして利用します。
これによりKubernetesデプロイメントのデフォルトのクラスター全体のワークロードセキュリティを強化できます。
メモリリソースのためのQuality of Service
もともと、Kubernetesはv1のcgroup apiを使用していました。この設計では、PodのQoSクラスはCPUだけ(cpu_shareds
のような)に適用されます。 Kubernetesのcgroup managerはコンテナのためのメモリキャパシティを制限するためにv1 cgroupsでmemory.limit_in_bytes
を使用し、さらにout-of-memoryイベントが発生したときに、killされるコンテナプロセスの優先順位を決めるためにoom_scores
を利用していました。この実装は欠点があり、Guaranteed
なPodは完全にメモリを予約することができず、ページキャッシュがリサイクルされる危険性があります。Burstable
なPodではメモリをオーバーコミットすると(request
をlimit
より小さくする)、Linuxカーネルがメモリ不足を検知した際、コンテナが強制終了されるリスクが高くなります。
alpha機能として、Kubernetes v1.22ではメモリの割り当てをコントロール・分離するためにcgroups v2のAPIを利用できます。この機能はメモリリソースの競合が発生した場合に、ワークロードとノードの可用性を向上させるように設計されています。
エフェメラルコンテナのためのAPIの変更と改善
エフェメラルコンテナを作成するためのAPIがv1.22で変更されました。エフェメラルコンテナ機能はalphaであるためデフォルトで無効化されており、新たなAPIは古いAPIを利用しようとするクライアントでは利用できません。
安定版の機能のために、kubectl
ツールはKubernetesのversion skew policyに従います。
しかし、kubectl v1.21以前のものは新たなエフェメラルコンテナをサポートしていません。
kubectl debug
を用いてエフェメラルコンテナを作成しようとするユーザは以下の注意すべきことがあります
- kubectl v1.22は古いAPIへフォールバックしようとします。
- v1.22より前のkubectlではKubernetes v1.22以降のKubernetesクラスタでは動作しません
複数のクラスタバージョンでkubectl debug
を利用したい場合は、kubectlをv1.22へアップデートしてください。