3
1

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 1 year has passed since last update.

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

Posted at

はじめに

Kubernetes v1.26がリリースされました 🎉

SIG-APIの目玉はWebhookなしに手軽なバリデーションを可能にするValidatingAdmissionPolicyです。その他にも運用に便利な改善が色々入っています。また、前リリースで見送られたclient-goのGCP/Azureのauthプラグインがついに削除されました。

いままでKEPを探したい時はenhansmentsのリポジトリ内をtext検索する必要がありましたが、公式のKEPの検索ページが公開されました。便利なのでオススメです。

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

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

🗑️ Deprecation (非推奨になったAPI)

📝 flowcontrol.apiserver.k8s.io/v1beta1autoscaling/v2beta2 が削除されました。マイグレーション方法については Deprecated API Migration Guide を参照してください。

  • Kube-apiserverの --master-service-namespace フラグが非推奨になりました。1.27で削除予定です。(#112797)
  • CLIフラグの pod-eviction-timeout が非推奨になりました。 enable-taint-manager と共にv1.27で削除予定です。(#113710)
  • gcpazure の認証プラグインが client-gokubectl から削除されました。各クラウド用の代替手段については kubeloginKubectl Auth Changes in GKE を参照してください。(#112341)
    • 📝 前回の1.25で削除予定でしたが、バグが発見されたため1.26に延期されました。これに伴いAzureの認証にはkubelogin、GKEの認証にはgke-gcloud-auth-pluginが使われます。

🌏 API Changes (API周りの変更)

  • 新しい拡張ポイントの preEnqueue がスケジューラコンポーネントの設定(v1beta2/v1beta3/v1)に追加されました。(#113275)
  • ResourceClaim APIが追加されました。(FeatureGate DynamicResourceAllocationresource.k8s.io/v1alpha1 APIグループ)。新しいAPIは既存のデバイスプラグインより柔軟になりました。Pods単位で専用リソースへのリクエストを許可していましたが、Nodeやクラスタ、その他実装したモデルのレベルに対応可能になりました。(#111023)
    • 📝 Dynamic resource allocationはk8sのworkloadの用途が増えるに伴い、リソースも従来のRAM/CPUだけでなく他のハードウェアも考慮したスケジューリングが必要だよね。ということで進められている機能です。詳しくは KEP-3063 を参照してください。公式ブログもでてます。-> Kubernetes 1.26: Alpha API For Dynamic Resource Allocation
  • コンテナのライフサイクルハンドラのうち、 httpGet を利用する preStoppostStart が特定の schemeheader フィールドを尊重するようになりました。これにより、カスタムヘッダやスキーマがHTTPSへ変更可能です。コンテナのstartup/readiness/liveness probeとの一貫性が保てるようになります。互換性を保つため、ライフサイクルハンドラが scheme: HTTPS でエラーを検出した場合、HTTPにフォールバックします。その際、該当Podの LifecycleHTTPFallback イベントとして記録されます。また、kubeletの kubelet_lifecycle_handler_http_fallbacks_total メトリクスもカウントアップします。本機能を無効化したい場合は、kubeletに --feature-gates=ConsistentHTTPGetHandlers=false フラグを設定してください。(#86139)
  • JobTrackingWithFinalizers がstableになりました。この機能が有効になるまえに作成されたJobはfinalizerのトラック対象ではありません。batch.kubernetes.io/job-tracking annotationを持つJobのみがfinalizerによるトラック対象です。付与済みのこのannotationをユーザが消した場合も、control planeによって再度追加されます。また、 batch.kubernetes.io/job-tracking annotationは非推奨になりました。v1.27以降では無視されます。新規Jobへのannotation追加もされません。(#113510)
  • podTopologySpread プラグインの NodeInclusionPolicy がデフォルト有効になりました。(#113500)
  • PodDisruptionBudget にAlphaバージョンの spec.unhealthyPodEvictionPolicy フィールドが追加されました。api-serverの PDBUnhealthyPodEvictionPolicy feature-gate が有効な場合、このフィールドに "AlwaysAllow" を設定すると現在のHealthステータスにかかわらず、Ready条件を持たないPodもevictされます。(#113375)
    • 📝 RunnningだけどHelthになるまでちょっと時間がかかるPodを退避したいけど、PDBでブロックされるのでHealth条件無視したいみたいなケースが稀にあるので嬉しい機能ですね。詳しくは KEP-3017 を参照してください。
  • 今後は、利用時にAPIオブジェクトに指定されている metav1.LabelSelectors の値が不正な値が含まれていないかバリデーションされます。既存の不正なオブジェクトはアップデート可能ですが、新規作成するオブジェクトは正しいラベルセレクタが必要です。(#113699)
    • 📝 validationしてるコードはここです。
  • Aggregated Discoveryがアルファになりました。Featureフラグの AggregatedDiscoveryEndpoint から有効にできます。(#113171)
    • 📝 詳しくはKEP-3352参照してください。
  • コードのコメント内でCFS quotaを100msであることを明確化し、Linux kernelに沿うよう cpuCFSQuotaPeriod の最小値を1msに設定しました。(#112123)
  • component-baseとclient-goにあるLeaderElectionConfigurationのバリデーションロジックに一貫性をもたせました。(#111758)
  • Horizontal Pod Autoscalerコントローラのworker数を設定できるように kube-controller-manager--concurrent-horizontal-pod-autoscaler-syncs フラグをサポートしました。(#108501)
    • 📝 デフォルトworker数として5が設定されています。
  • Priority And Fairnessのv1beta3を導入しました。これに伴い、API仕様に以下の変更を加えます。(#112306)
    • spec.limited配下のassuredConcurrencySharesを nominalConcurrencyShares に名称変更。
    • flowschemaとprioritylevelconfigurationsの Conditions にstrategic merge patchのannotationを適用。
  • Validating Admission PoliciesとCEL expressionによる拡張Admission Control(KEP-3488: CEL for Admission Control)用に v1alpha1 APIを導入しました。これを利用するには、feature gateの ValidatingAdmissionPolicy--runtime-config から admissionregistration.k8s.io/v1alpha1 APIを有効化してください。(#113314)
    • 📝 CustomResourceにCELでバリデーション機能はすでに提供されていましたが、この機能によりDeploymentなどその他リソースにも(Webhookを実装せずに)手軽にバリデーションを設定できるようになりました。詳しくはKEP-3488を参照してください。使い方については公式ブログにも記載されています。
  • 自動リロード有効時に、KMSの設定で重複する名前が利用されているかのバリデーションが追加されました。APIサーバの --encryption-provider-config-automatic-reload フラグによりencryption設定の自動リロードを有効にしている場合、encryption設定内の全てのKMSプロバイダ名(v1 & v2)がユニークである必要があります。(#113697)
  • kubeletの外部credentialプロバイダ機能がGAになりました。Credential Provider Plugin と Credential Provider Config APIsが v1beta1 から v1 に変更されています。(#111616)
  • Protobufシリアイゼーションの metav1.MicroTime タイムスタンプ(LeaseEvent API objectで利用されている)がマイクロ秒の精度で切り捨てられるようになりました。これは、ドキュメント上のJSON/YAMLシリアイゼーションの挙動にあわせたものです。既存のデータもetcdから読み込まれる時にマイクロ秒に切り捨てられます。(#111936)
  • feature gateの EndpointSliceTerminatingCondition がGAに昇格しました。feature gateからはv1.28で削除予定です。 (#113351)
  • feature gateから DynamicKubeletConfig が削除されました。Dynamic kubelet reconfigurationはこの機能に依存している古いノードでも利用できなくなりました。これは、Kubernetesのversion skewポリシに則ったものです。(#112643)

✨ Features (機能追加)

  • APIServerIdentity 機能がベータに昇格しました。 kube-apiserver はデフォルトで kube-system namespaceにLeaseを作るようになります。これらのLeaseオブジェクトはクラスタ内のアクティブなAPIサーバ数の識別に利用できます。将来的にはStorage Version APIに利用される予定です。(#113629)
  • kubeconfigのcluster info設定に DisableCompression フラグが追加されました(デフォルトfalse)。 true が設定された場合、クライアントはAPIサーバに対する全てのリクエストレスポンスの圧縮を無効化します。この機能は、client-server間の帯域幅が十分(>300MB/s)場合や、serverがCPU制約を受けている場合においてList時のレイテンシを大きく改善します。(#112309)
    • 📝 gzipのレベルとAPIサーバの負荷について検証したドキュメントはこちら
  • SLIメトリクスがAPIサーバの metrics/slis で公開されました。(#112741)
  • client-goの SharedInformerFactory がシャットダウン中にgoroutineを待つようになりました。(#112200)
  • kube-apiserver: ネットワークの帯域と引き換えに(10-50% higher)、大きなlist呼び出しのレイテンシを改善するため、 gzip 圧縮がレベル4から1に変更されました。これにより、ページしていない非常に大きなList呼び出しがリクエストタイムアウトの制限を超えるまでの猶予増えました。(#112299)
  • feature gateの LegacyServiceAccountTokenNoAutoGeneration がGAに昇格しました。 (#112838)
  • feature gateの LegacyServiceAccountTokenTracking (alpha) が有効の場合、secretベースのService Accountトークンは最後に利用した時間が kubernetes.io/legacy-token-last-used に記録されます。(#108858)

🐛 Bug or Regression (バグ修正)

  • golang.org/x/net のバージョンが v0.1.1-0.20221027164007-c63010009c80 に上りました。(#112693)
  • 呼び出し元が DelegatingAuthenticationOptionsDisableAnonymous を使ってAnonymousの認証を無効化できるようになりました。(#112181)
  • Etcdがv3.5.5にアップデートされました。(#112489)
  • Priority and Fairnessにおいて、Service Accountのトークン作成コスト見積りを修正しました。(#113206)
  • Priority and Fairnessにおいて、 metadata.name が指定されたListリクエストのコストを修正しました。(#112557)
  • kube-apiserver: Custom Resourceを --encryption-provider-config フラグに指定すると、etcdに暗号化して保存できるようになりました。(#113015)
  • kube-apiserver: デフォルトでバックエンドからリダイレクトレスポンスが返されなくなりました。リダイレクトレスポンスの転送するには --aggregator-reject-forwarding-redirect=false フラグを設定してください。(#112193)
  • kube-apiserver: Aggregated APIサーバーからの 304 Not Modified レスポンスを内部エラーとして扱うリグレッションを修正しました。(#112526)
  • 削除レスポンスに含まれる ResourceVersion は、削除イベントに含まれる ResourceVersion と一致するようになりました。(#113369)
  • kube-schedulerkube-controller-manager がPodの中断条件の設定にserver-side applyを利用するようになりました。(#113304)
  • k8s.io/apimachinery/pkg/api/meta のエラーがwrapされた時も含め stdlibs errors.Is のマッチングに対応しました。(#111808)
  • CVE-2022-32149の対応のため、 golang.org/x/textv0.3.8 に更新されました。 (#112989)
  • CVE-2021-25743の対応のため、 kubectl が出力のTerminal特殊文字をエスケープするようになりました。(#112553)

🔬 Others (その他修正)

  • feature gateのCEL in Admission Controlが ValidatingAdmissionPolicy に名称変更されました。(#113735)
  • in-tree クラウドプロバイダのOpenStack(cinder volumeプロバイダも含む)が削除されました。代わりに、外部のクラウドプロバイダとcsiドライバ(cloud-provider-openstack)を利用してください。 (#67782)
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?