LoginSignup
14
7

More than 1 year has passed since last update.

Kubernetes 1.22: SIG-API Machineryの変更内容

Last updated at Posted at 2021-08-06

はじめに

Kubernetes v1.22がリリースされました :tada:

今回のAPI周りの変更では、Ingressを始めとしていくつかのBeta APIが削除されています(アップグレード時にはご注意ください)。他にも、External Credential ProviderはBeta、皆様お待ちかねのServer-Side Apply(SSA)1はGAに昇格しています。

また、新機能についてはNode周りが多い印象です。seccompをcluster-wideでデフォルト有効にするSeccompDefaultや、Cgroup v2 APIでメモリのQoSを設定可能にするMemoryQoSなどがあります。こちらについては後日公開予定のSIG-Nodeの記事の方を参照ください。(実装の進んでいたin-place Upgradeは今回入らなかったので次回に期待です。)

ちなみにk8sのサポートするetcdのデフォルトバージョンはv3.5.0にあがりましたが、先日etcd clientのv3.5.0を試したところバグを引いたのでパッチバージョン待ちです。

それでは、API周りの変更を担当するSIG-API Machineryの変更点をCHANGELOGからピックアックします。(:pencil:がついた文章は、CHANGELOGの公式の内容ではなく筆者の補足です。)

SIG, KEPについてはこちらを参照ください。

:wastebasket: Deprecation (非推奨になったAPI)

  • controller-managerの --port, --address はv1.24で削除されます。insecure portフラグである --port には0のみセットできます。また、以下の点に注意してください。
    • controller-managerは認証/認可の挙動を --authorization-kubeconfig--authentication-kubeconfig フラグで指定して起動しなければなりません。
    • controller-managerのliveness/readiness probeは現在HTTPSのみ利用できます。また、デフォルトのポート番号は10257に変更されました。
    • controller-managerからメトリクスを取得するアプリケーションは、Service AccountのnonResourceURLsの /metrics で指定したものを利用してください。 (#96216)
  • Serviceの topologyKeys フィールド(alpha)と、 kube-proxy にある実装のサポートを廃止しました。このフィールドは数サイクル前に非推奨となっています。この機能は、endpointごとのautomatic topology hints (alpha)と、Serviceの internalTrafficPolicy フィールドによって置き換えられます。(#102412)

:earth_asia: API Changes (API周りの変更)

  • NodeResourcesFitプラグイン用の新しいscore extensionは、NodeResourcesLeastAllocated / NodeResourcesMostAllocated / RequestedToCapacityRatioプラグインの機能を統合します。統合前の機能はv1beta2で非推奨になります。v1beta1では引き続き利用できますが、 NodeResourcesFit のscore extentionとの併用はできません。(#101822)
  • PVCのspecに DataSourceRef (alpha) フィールドが追加されました。このフィールドは、PVCとVolumeSnapshotsのデータソースになります。(#103276)
  • StatefulSet APIに PersistentVolumeClaimDeletePoilcy が追加されました。(#99378)
  • 全probe(/readyz, /healthz, /livez)をPriority and Fairnessから免除するルールを追加しました。これにより、正常なkube-apiserverがkubeletによって再起動されるのを防ぎます。(#100678)
  • kube-apiserver に分散トレーシングを追加しました。Feature Gateの APIServerTracing から有効化できます。(#94942)
    • :pencil: ついにKEP-647のOpenTelemetryによるAPIサーバの分散トレーシングが追加されました。今回Kubernetesのデフォルトサポートバージョンがetcd v3.5.0になりましたが、etcdの方にもv3.5.0よりトレーシング機能が追加されています。他のPull-Requestでetcdへcontextを渡す修正も入っているので、途切れることなくトレースできます。
  • Jobリソースに .status.uncountedTerminatedPods フィールドを追加しました。このフィールドは、job-controllerがJob Statusのカウンタ反映前の終了済みPodを記録するために利用します。job-controllerから生成されたPodは batch.kubernetes.io/job-tracking Finalizerを持ちます。なお、 batch.kubernetes.io/job-tracking アノテーションを持つJobの追跡は一時的なものです。2リリース後にこの機能はBetaとなり、このアノテーションはJobに設定されなくなります。(#98817)
    • :pencil: これは欲しかった人も多いと思われるKEP-2307の便利?機能です。今まではJobが終了するまで終了済みPodが削除されなかったため、大量のPodを走らせるJobなどで問題になっていました。この変更により、終了済みPodを残さなくてもJobのステータス管理できるようになりました。前々回のリリースでポーリング式からControllerらしい実装となったCronJob Controller v2が入り、ココらへんの改善が入ってきたのは嬉しいですね。
  • Alpha機能のswapがサポートされました。この機能は、Kubernetes Nodeの NodeSwapEnabled フラグから有効にできます。詳しくはKEP-2400を参照ください。(#102823)
  • Ephemeral ContainerがPodとことなる securityContext を設定できるようになりました。クラスタでこの機能を利用する前に、クラスタ管理者はSecurity Policyコントローラが EphemeralContainers をサポートしていることを確認してください。(#99023)
  • Execプラグインの作成者は、kubeconfigの interactiveMode フィールドを利用してデフォルトの標準入力の処理を変更できるようになりました。(#99310)
    • :pencil: いままでclient-goは標準出力がターミナルであればインタラクティブな標準入力を受け付ける挙動をしていましたが、スクリプト内で実行する際に問題になっていたため、pluginがハンドリングできるようになりました。
  • ラベルセレクタのパース方法を改善しました。(#102188)
  • StatefulSets に minReadySeconds APIが追加されました。(#100842)
  • 現在提供されている Impersonate-User, Impersonate-Group, Impersonate-Extraと同じように、 Impersonate-Uid ヘッダを利用してimpersonateユーザをUIDから指定できるようになりました。
  • kube-apiserverに --service-account-issuer フラグを複数指定できるようになりました。これにより、無停止でissuerを変更できます。(#101155)
  • HeapsterによるHPAをサポートするkube-controller-managerの --horizontal-pod-autoscaler-use-rest-clients フラグが削除されました。このフラグは1.12から非推奨になっていました。(#90368)
  • Suggested API Priorityに node-high が追加されました。(#101151)
    • :pencil: コントロールプレーンの高負荷時にkubeletがstatusのレポートもできなくなると困るということで、node-highというより優先度の高いレベルが追加されました。
  • StatefulSet APIに追加されていた PersistentVolumeClaimDeletePoilcy がrevertされました。(#103747)
  • Server Side Apply(SSA)が全てのSelectorフィールドをアトミックに扱うようになりました(つまり、Selectorは単一のwriterによって管理されます)。これらのフィールドには、直感的にマージできない依存関係のあるフィールドが含まれています。(#97989)
  • CertificateSigningRequest.certificates.k8s.io APIがexpirationSecondsフィールドをサポートしました。これにより、クライアントは証明書の発行時に期間をリクエストできます。デフォルトの実装では、kubernetes controller-managerは --cluster-signing-duration フィールドを超えない範囲でこの値を尊重します。(#99494)
  • EndpointSlice Mirroring controllerがEndpointSlicesを更新するために、kubectlにより生成された last-applied-configuration アノテーションをミラーしなくなりました。(#102731)
  • Pod specの TerminationGracePeriodSeconds とコンテナのprobeに負の値を設定しないでください。負の値を設定した場合、削除時には 1s として扱われます。イミュータブルフィールドのバリデーションはこの負の値を更新するために緩和されます。将来的には負の値を許可しなくなります。(#98866)
  • サブリソースの pod/eviction がpolicy/v1beta1に加えてpolicy/v1も受け入れるようになりました。(#98866)
  • podAffinity, NamespaceSelector, CrossNamespaceAffinityの機能がBetaに昇格し、デフォルト有効になりました。(#101496)
  • 全Scalableリソースの scale サブリソースOwnerを記録するようになります。(例: Deployment, ReplicaSet, StatefulSet, ReplicationController, Custom Resources) (#98377)

:sparkle: Features (機能追加)

  • APIServerTracingがetcdクラインアントの呼び出しをspanとして収集し、etcdへcontextを伝搬するようになりました。(#103216)
  • APIServerTracingがAdmission Webhookへのリクエストspanとして収集するようになりました。(#103601)
  • JSONロギングフォーマットがKubernetesのCoreコンポーネント以外でデフォルト無効になります。(#102869)
  • kubernetes-apiserverに --feature-gates=PodSecurity=true フラグを渡すとPodSecurity機能が有効になります。この機能を有効にするとNamespaceラベルを使用可能なPodを制御できます。詳しくはKEP-2579を参照してください。 (#103099)
  • controller-managerのためのリーダーマイグレーションがBetaになりました。(#103533)
  • EventのField Selectorの生成にBuilder関数を利用できるようになりました。(#101817)
  • CVEに対応するため、以下のイメージを更新しました:
    • debian to v1.8.0
    • debian-iptables to v1.6.5
    • setcap to v2.0.3 (#103235)

:bug: Bug or Regression (バグ修正)

  • Lease ControllerにJitter係数を追加しました。これにより、kube-apiserverの負荷がより適切に処理されます。(#101652)
    • :pencil: P&Fが導入された後にAPI呼び出しのレイテンシが劣化しましたが、根本原因はP&FではなくNodeのleaseによるスパイクだったようです。Leaseにjitterを入れることで、API呼び出しを分散してスパイクを緩和したようです。
  • 大きなCRDを更新/適用する際のパフォーマンスのリグレッション問題を修正しました。 (#103318)
  • SSAによるクライアント側でのAnnotation適用において、Annotationのサイズ制限を考慮するようになりました。また、opt-outの挙動をクライアント側でのAnnotation適用で空文字列を設定することで対応しています。(#102105)
  • YAMLドキュメントのセパレータ("—")の同じ行に対して、空白やコメント("# ….")を設定できるようになりました。この修正では、コメントが続くセパレータを無視するバグが修正されています。また、コメント以外が同じ行に続く場合はエラーを返します。(#103457)

:microscope: Others (その他修正)

  • Fake clientsが FakeClient interfaceに実装されました。 (#100940)
    • :pencil: trackerにアクセスするためのTracker()関数ををDynamicFakeClientに追加する変更(#100085)の続きの修正で、DynamicFakeClientが実装するinterfaceとなるFakeClientが追加されています。
  • golang.org/x/netパッケージがv0.0.0-20210520170846-37e1c6afe023に更新されました (#103176)

  1. SSAについての詳しい解説は公式ブログで公開されています 

14
7
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
14
7