LoginSignup
10
4

More than 1 year has passed since last update.

Kubernetes 1.22: 変更点まとめ(What's new!)

Last updated at Posted at 2021-08-26

はじめに

このエントリは、Kubernetes 1.22 の CHANGELOG からWhat's new!と、各変更点についてまとめたページへのリンクです。
詳細については各まとめページを参照してください。

変更点の詳細へのリンク

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を確認してください.

  • :pencil: どのバージョンでどのAPIが利用可能か確認したい場合は @tkusumi さんのこちらのまとめをご参照ください

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のバージョンとなりますが、v1beta2APIも引き続き利用可能であり、非推奨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ではメモリをオーバーコミットすると(requestlimitより小さくする)、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へアップデートしてください。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4