9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-04-16

はじめに

Kubernetes 1.21がリリースされました :tada:

今回API Machineryの変更は少なめです。大きな変更はないですが、CronJobとPDBがついにv1になりました。
また、Generic Ephemeral VolumeとBound Service Account TokensがBetaに昇格したので本バージョンよりデフォルト有効になります。
恩恵を受ける人が多そうな変更としては、Probe失敗時のterminationGracePeriodSecondsを指定するフィールドの追加があります。

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

SIG, KEPについてはコチラを参照

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

  • etcd_object_countsメトリクス名をapiserver_storage_object_countsに変更しました。元のetcd_object_countsメトリクスは非推奨となり、将来的に削除されます。 (#99785)
  • CronJobのbatch/v2alpha1とそのクライアントが非推奨となり、削除されました。 (#96987)
  • クエリパラメータのexportが完全に削除されました。(APIリソースによって一貫性がなく、v1.14から非推奨になっています) このクエリパラメータが設定されたリクエストを受け取ると、Statusコード400を返します. (#98312)
    • :pencil: クエリパラメータのexportは、v1.17までkubectl get -o yaml --export deploy/hooのように--exportフラグを付与した時に設定されていたパラメータです。上記を実行するとクラスタに依存する値を除いてくれるのでマニフェスト作成などに使われていました。しかし、前述の通りリソースによって一貫性がなく関連Issueが色々作られたり、Server-Sideでやる必要がある?みたいな話があり非推奨になりました。(kubectl pluginを作っている人もいます)

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

  • 1. PodAffinityTermはラベルを使って対象となるNamespaceを選択するため、namespaceSelectorフィールドを持ちます。
    1. 新しいCrossNamespacePodAffinity quota scope APIは、namespaceSelectorやnamespaceフィールドを通して指定する、cross-namespaceなPodAffinityTermのNamespaceを制限します。(#98582)
      • :pencil: KEP-2249: Namespace Selector For Pod Affinity
      • デフォルトのPodAffinityでは同じNamespaceに属するPodを考慮してスケジュール先を計算しますが、この機能を利用すると対象となるNamespaceを拡張できます。
  • ProbeレベルのterminationGracePeriodSecondsフィールドを追加します。 (#99375)
    • :pencil: KEP-2238: Liveness Probe Grace Periods
    • terminationGracePeriodSecondsはシャットダウン時とprobe失敗時の両方で利用されています。そのため、正常時のグレースフルなシャットダウン用にterminationGracePeriodSecondsに長い時間を設定していると、probeに失敗した時は即座に再起動させたい場合でも、すぐには再起動されないという問題があります。この問題を解決するため、xxxProve.terminationGracePeriodSecondsフィールドによってprove時の終了待ちの時間を別途設定できるようになりました。
  • 接続を維持するためSPDY pingsが有効になりました。この変更により、kubectl execkubectl portforwardが切断されなくなります。(#97083)
  • FieldManagerが永続化前にリセットされるフィールドを持たなくなりました。 (例: "status wiping") (#99661)
    • :pencil: KEP-0006 Apply - Status Wiping
    • status wipingはKEP-006で提案されている機能です。
    • etcdに永続化される前にリソースに応じてstatusの除去などいくつかの前処理が実施されますが、この時に除去されるフィールドの所有者がユーザになってしまうという問題がありました。
  • Generic ephemeral volumesがベータになりました。(#99643)
  • Namespace APIオブジェクトがkubernetes.io/metadata.nameラベルを持つようになりました。これにより、metadata.nameフィールドがLabelセレクタで選択できるようになりました。(#96968)
  • InternalTrafficPolicyフィールドがServiceに追加されました。 クラスタの内部トラフィックを全Endpointにルーティングする必要があるか、もしくはNode内部のEndpointだけで良いのかを指定できるようになりました。 Clusterは内部トラフィックをサービスの全Endpointにルーティングします。 LocalはNode内部のEndpointにトラフィックをルーティングします。Node内部にReadyなEndpointが存在しない場合、トラフィックはドロップします。 デフォルト値は"Cluster"です。 (#96600)
  • CronJobsがbatch/v1に昇格しました。 (#99423)
  • Bazelを利用したKubernetesビルドのサポートを廃止します。(#99561)
  • BoundServiceAccountTokenVolume機能がベータに昇格し、デフォルトで有効になりました。
    • この変更により、/var/run/secrets/kubernetes.io/serviceaccount/tokenで提供されているトークンは、期限付きかつ自動更新、また、Pod削除時に無効化されます。
    • 有効なトークンを利用し続けるためには、クライアントはトークンを定期的に読み込む必要が有ります。(推奨は1分間隔です) k8s.io/client-goのバージョンv11.0.0+とv0.15.0+では、トークンが自動再読込されます。
    • デフォルトでは、挿入されたトークンは生存期間が延長されるため、Refreshトークンが発行された後も有効です。serviceaccount_stale_tokens_totalメトリクスは、Refreshトークンが提供された後も生存期間が延長されたトークンを利用し続けるワークロードの監視に利用します。 このメトリクスで生存期間が延長されたトークンをどのワークロードも利用していないことが確認できた場合は、生存期間をkube-apiserver--service-account-extend-token-expiration=falseフラグから1時間に短縮できます。 (#95667)
    • :pencil: KEP-1205 Bound Service Account Tokens
  • PodDisruptionBudget APIオブジェクトがstatusにconditionを持つようになりました。(#98127)
  • PodDisruptionBudget APIがpolicy/v1に昇格しました。スキーマに変更ありません。これに伴う機能変更は、空のセレクタ({})がpolicy/v1のPodDisruptionBudgetに書き込まれた場合、Namespaceの全Podが選択されるようになった点のみです。policy/v1beta1 APIの挙動は変更されていません。policy/v1beta1のPodDisruptionBudget APIは非推奨となり、1.25+で削除予定です。(#99290)
  • Topology Aware Hintsがアルファになりました。Feature GateのTopologyAwareHintsから有効にできます。(#99522)

:sparkle: Features (機能追加)

  • client-goのメトリクスにrest_client_exec_plugin_call_totalが追加されました。client-goのcredentialプラグインの呼び出し回数を記録します。(#98892)
  • kube-apiserverに--lease-reuse-duration-secondsフラグが追加されました。このフラグにより、Etcd leaseの再利用期間を設定できます。(#97009)
  • kube-apiserverにetcd_lease_object_countsメトリクスを追加しました。1つのEtcd leaseに紐づく最大のオブジェクト数を観測できます。(#97480)
  • kube-controller-managerにephemeral_volume_controller_create[_failures]_totalメトリクスが追加されました。(#99115)
  • Component ownerは、'--allow-metric-labels'フラグを利用してメトリクスラベルの許可リストを設定できます。 (#99385, #99738)
  • KubernetesがGolang 1.16でビルドされるようになりました。(#98572)
  • ServiceAccountIssuerDiscoveryがGAとなり、常時有効となります。Feature GateのServiceAccountIssuerDiscoveryは1.22で削除予定です。(#98553)
  • kubeletがPodのコンテナの環境変数として設定されているConfigMapやSecretをwatchする時、指定した期間だけwatchを保持するようになりました。この変更により、大規模クラスタのkube-apiserverのメモリ使用量を削減します。(#99393)

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

  • client-goのEventBroadcasterがシャットダウン中に競合しないようになりました。(#95664)
  • service/nodeport/loadbalancerのクオータ確認時のカウントエラーが修正されました。(#97451)
  • APIサーバ起動時の競合状態を修正しました。最初の書き込み要求が受け付けられる前に、事前に作成されたWebhookConfigurationが有効になります。(#95783)
  • Garbage Collectionが不正な参照を持つクラスタスコープオブジェクトによってNamespaceの子オブジェクトの片付けに失敗する問題が修正されました。(#98068)
  • パフォーマンスのリグレッション問題(#97685)が修正されました。(#97860)
  • リクエストに付与された不正なタイムアウト値がAudit Logに正しく記録されるようになりました。(#96901)
  • 同じexec auth configに複数のクライアントが設定されている際に、kubectlでexec auth pluginを利用しても警告が表示されなくなりました。(#97857)
  • kubectl execkubectl attach--quietフラグを尊重するようになりました。このフラグはリモートコマンドの出力との混乱を防ぐため、ローカルバイナリの出力を抑制します(エラー以外の全ての出力を隠します)。また、execとattachでデフォルトの1つ目のspec.containerが使われる場合、他のコンテナリストをインライン表示します。(#99004)

:microscope: Others (その他修正)

  • Apiserver_request_duration_secondsがstableに昇格しました。(#99925)
  • github.com/Azure/go-autorest/autorestがv0.11.12にバージョンアップしました。 (#97033)
  • Kube-apiserver: OIDC認証において、Tokenの検証に利用するメタデータの再取得前に10秒待たなくなりました。(#97693)
  • Windowsにおいて、起動時間として現在のプロセス情報を利用するようになりました。(#97491)
  • デフォルトの委任認証オプションにおいて、healthz, readyz, livezに対する非認証時のアクセスが可能になりました。(#98325)
  • 新しい-gce-zonesフラグがe2e.testバイナリに追加されました。このフラグは、クラスタがどのようにクラウドのzoneリストに対するクエリ制限に影響するのかをチェックするテストを指示します。もし設定されなかった場合、現在の挙動と同じく、マルチゾーンクラスタで使用可能な全てのゾーンをクラウドプロバイダに要求します。(#98787)
9
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?