1
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?

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

Last updated at Posted at 2024-01-15

はじめに

Kubernetes 1.29 がリリースされました 🎉

今回はAPI周りの大きな変更は少ないですが、CEL周りは引き続き機能追加だったり、AuthenticationConfigurationでも利用可能になったりと、強化されています。また、FlowControl APIはついにv1へ昇格しました。

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

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

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

  • PreStop ライフサイクルフックに新しい sleep アクションが追加されました。コンテナが終了する前に指定された時間待機できるようになります。(#119026)
    • 📝 exec.commandでsleepのhookをしなくてもsleepできるようになりました。便利! まだAlphaなので利用にはFeatureGateの PodLifecycleSleepAction の有効化が必要です。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample
spec:
...
    spec:
      containers:
      - name: app
        image: nginx
        lifecycle:
          preStop:
            sleep: # <- new!
              seconds: 5
  • v1alpha1.AuthenticationConfiguration に CEL 式が追加されました。(#121078)
    • 📝 OIDC認証の設定もCELを使ってルールを定義できるようになりました。(e.g., 'claims.exp - claims.nbf <= 86400': トークンの有効期限を24h以内に制限する) 詳しくはKEP-3331を参照してください。
  • Kubeletの設定に ImageMaximumGCAge フィールドが追加され、イメージがガベージコレクションされるまでの最大時間をユーザーが設定できるようになりました。(#121275)
  • x-kubernetes-validationsoptionalOldSelf が追加されました。ratcheting CRD scheme制約がサポートされます。(#121034)
    • 📝 optionalOldSelfオプションが追加されました。これを有効にすると、新規作成時や更新前の値が未設定の場合にもNoneとして前の値を使ったルールが定義できます。まだAlphaなので、利用にはFeatureGateのCRDValidationRatchetingの有効化が必要です。CRDValidationRatchetingについてはKEP-4008を参照してください。
type: integer
x-kubernetes-validations:
- rule: "oldSelf.hasValue() ? self >= oldSelf.value() : true"
  optionalOldSelf: true
  message: if the field has a value, cannot transition to a lower value than before
  • 新しい ServiceCIDR タイプが追加され、Service ClusterIPs アドレスの割り当て範囲を動的に設定できるようになりました。(#116516)
  • LoadBalancer タイプのService .statusipMode フィールドが追加されました。この新しいフィールドは LoadBalancerIPMode FeatureGateで設定できます。(#119937)
  • kube-proxyにnf_conntrack_udp_timeoutnf_conntrack_udp_timeout_streamの設定が追加されました。(#120808)
  • v1alpha1 AuthorizationConfiguration webhook の matchConditions でCEL式が使えるようになりました。(#121223)
    • 📝 v1.28ではValidating/MutatingWebhookConfigurationのmatchConditionsでCELが使えるようになりましたが、AuthorizationConfigurationでも使えるようになりました。
  • certificates.k8s.io/v1alpha1ClusterTrustBundle オブジェクトをPodに設定できるようになりました。(#113374)
    • 📝 自前でvolume mountしてtrust bundle読み込んでいたケースもありましたが、標準機能として使えるようになりました。
  • DisableNodeKubeProxyVersion FeatureGateが追加されました。このFeatureGateが有効になると、kubeProxyVersion フィールドが設定されなくなります。(#120954)
  • CRD validation ruleの CEL 式で、文字列、リスト、またはマップを返す関数に対して、推定コストが誤って高く計算されるバグが修正されました。この問題は、関数の結果が後続の操作で使用されるケースで発見されました。(#119800)
  • Job ステータスの Ready フィールドに対する API コメントが修正されました。(#121765)
  • Job Podの障害ポリシーのアクション FailIndex に対する API コメントが修正されました。(#121764)
  • Go API: ResourceRequirements 構造体が VolumeResourceRequirements に置き換えられました。(#118653)
  • Job のPod障害ポリシーの onPodConditions フィールドがオプションになりました。(#120204)
  • flowcontrol.apiserver.k8s.io/v1beta3FlowSchema および PriorityLevelConfiguration API が flowcontrol.apiserver.k8s.io/v1 に昇格しました。変更は以下の通りです (#121089):
    • PriorityLevelConfiguration: .spec.limited.nominalConcurrencyShares フィールドは、省略された場合にのみデフォルトで 30 になります(v1beta3 では明示的な 0 の値も 30 にデフォルトされていました)。v1 バージョンでは、1.29 でこのフィールドが省略された場合にのみ 30 にデフォルトされます。1.30 では、v1 API ではこのフィールドに明示的な 0 の値を指定することが許可されます。
    • v1beta3 の API は非推奨となり、v1.32 ではもう提供されません。既存のオブジェクトは v1 API を介して利用可能です。v1.32 にアップグレードする前に、クライアントとマニフェストを v1 API を使用するように移行してください。
  • Hard/Softの PodAffinity/PodAntiAffinitymatchLabelKeys/mismatchLabelKeys 機能が追加されました。(#116065)
  • CRD を更新する際に、変更されていないバージョンの x-kubernetes-validations ルールに対しては、expressionごとのコスト制限のチェックがスキップされるようになりました。(#121460)
  • このリリースで CSINodeExpandSecret フィーチャーが GA に昇格し、デフォルトで有効になりました。CSI ドライバーは、このリリース以降、CSI クライアントから送信される NodeExpansion リクエストでオプションで渡された secretRef 値を使用できるようになります。(#121303)
  • ValidatingAdmissionPolicy のタイプチェックでCRDや他のAPI拡張をサポートするようになりました。(#119109)
    • 📝 k8s標準リソースだけではなく、CRDもValidatingAdmissionPolicyでバリデーションできるようになりました(CRDは自体のvalidation設定でCEL使えるので標準リソースに比べると使う機会は低そう?)。この機能は現在Betaで、利用にはFeatureGateの有効化が必要です。
  • kube-apiserver: --authentication-config フラグの追加により、 AuthenticationConfiguration ファイルが読み込むめるようになりました。この --authentication-config フラグは、既存の --oidc-* フラグと併用できません。(#119142)
  • kube-apiserver: --authorization-config フラグの追加により、apiserver.config.k8s.io/v1alpha1AuthorizationConfiguration設定ファイルを読み込めるようになりました。--authorization-config フラグは --authorization-modes および --authorization-webhook-* フラグと併用できません。有効化にはalphaStructuredAuthorizationConfiguration Featureフラグの設定が必要です。(#120154)

:sparkle: Features (機能追加)

  • cel-gov0.17.7 に更新され、 ext ライブラリが追加されました。(#121577)
    • 📝 extensionライブラリのSet(データ構造)系の機能が追加されています。ドキュメント化は次のバージョンv1.30を予定しているようです。
  • openAPIV3SchemaProperties でも AdditionalProperties でもない CRD をCELで正しく処理できるようになりました。(#121459)
  • CEL cost estimater は、列挙型を無制限の文字列として扱わなくなりました。代わりに、長さは最も長い列挙型の値に設定されます。(#121085)
  • Quantity に乗算機能が追加されました。(#117411)
  • OpenAPI v3 での一部の requestBody パラメータは、正しく必須としてマークされるようになりました。(#120735)
  • KMSv2KDF FeatureGateがデフォルトで有効に変更されました。(#120433)
  • client-sideのapplyでは、デフォルトで OpenAPI v3 を使用するようになりました。(#120707)
  • etcd responseのデコーディングでは、contextのtimeoutを反映するようになりました。(#121614)
  • TaintManagerNodeLifeCycleController から分離されました(KEP-3902)。(#119208)
  • KMSv2 の暗号化/復号操作のトレースが有効になりました。(#121095)
  • server-sideのapplyリクエストで、重複したアイテムがあるキー付きリストを変更する場合、重複を削除してリクエスト内の一位な要素で置き換えるようになりました。(#121575)
  • ⭐ API リストのチャンキング(ページネーション)機能が stable に昇格しました。(#119503)
  • etcdストア用のストリーミングAPIが実装されました。 sendInitialEvents ListOptionwatch=true と一緒に設定されると、サーバーは合成の初期イベントでウォッチストリームを開始し、その後、合成の Bookmark が続き、サーバーはイベントのストリーミングを続けます。(#119557)
  • インツリーのクラウドプロバイダはデフォルトでオフになりました。この機能が必要な場合は、引き続き DisableCloudProviders および DisableKubeletCloudCredentialProvider フィーチャーフラグを使用してください。(#117503)
  • KubernetesをGo 1.21.4 でビルドします。(#121808)
  • Priority and Fairness機能が stable になり、FeatureGateは v1.31 で削除されます。(#121638)
  • ⭐ FeatureGate CustomResourceValidationExpressions による CRD バリデーションルールが GA に昇格しました。(#121373)
    • 📝 CELを使って柔軟なCRのValidationを定義する機能です。1.25のBeta昇格時からデフォルト有効だったので特に変わりません。前バージョンからの変更点はこのChangeLogにもいくつかあるbugfixとパフォーマンス改善です。
  • FeatureGate KMSv2 および KMSv2KDF とともに KMSv2 機能が GA に昇格しました。KMSv1 FeatureGateはデフォルトで無効になりました。(#121485)
  • CloudDualStackNodeIPs フィーチャーがベータ版になりました。これにより、この機能をサポートする外部クラウドプロバイダを使用すると、kubelet にコンマ区切りのデュアルスタック--node-ips を設定します。そして、クラウドプロバイダはこの両方の IP を考慮します。(#120275)
  • generic APIサーバーライブラリを更新し、新しいAPIサーバーがJSON、YAML、またはProtobuf以外の形式で構成されている場合はエラーを投げるようになりました。(#121325)
  • ValidatingAdmissionPolicy はコンポジション変数の型を保持し、型関連のエラーを早期に発生させます。(#121001)
    • 📝 型関連のエラーメッセージも分かりやすいものが出力されるようになりました
  • etcd のイメージが v3.5.9 に基づいています。(#121567)
  • ServiceAccountTokenNodeBindingが FeatureGate の alpha として追加されました。この機能は、Nodeにトークンを直接バインドする TokenRequests を許可します。また、ServiceAccountTokenNodeBindingValidation FeatureGateによって、トークンが使用される際にノードの名前とUIDが存在するかを検証します。(#120780)

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

  • ExternalIPs を持つ Services に対して ExternalTrafficPolicy を設定できるようになりました。(#119150)
  • replace() の CEL 推定コストが、置換文字列の長さがゼロの場合も正しく処理できるようになりました。この問題は、推定コストを高く見積もる原因でした。(#120097)
  • APIServices の削除後に OpenAPI v3 が正しく掃除されるように修正しました。(#120108)
  • 負のインデックスを持つ jsonパッチ処理のバグを修正しました。(#120327)
  • API グループのパスが削除されたとき、API サーバーのルートパスから登録解除されなかったバグを修正しました。(#121283)
  • 廃止予定の generate-groups.sh スクリプトの呼び出し時に発生するバグを修正しました。(CLIENTSET_PKG: unbound variable) (#120877)
  • garbagecollection コントローラがDiscoveryリクエストが失敗した場合に重複したイベントハンドラを登録するバグを修正しました。(#117992)
  • progressNotify オプションが設定されたwatchを作成する場合、かつレジストリが newFunc を提供していない場合、エラーを返すように修正しました。(#120212)
  • PR #119341 に対するフィードバックを組み込みました。(#120087)
  • kube-openapi: 特定のフィールドに対して不要なデフォルト値({})が OpenAPI スペックに含まれないようにしました。(#120757)
  • etcdv3.5.10 に更新しました。(#121566)

:microscope: Others (その他修正)

  • caches populated ログメッセージにコンテキストを追加しました。(#119796)
  • impersonationリクエスト関連の kube-apiserver HTTP ログを整理しました。(#119795)
  • kube-apiserver における --cloud-provider および --cloud-config CLI パラメーターが非推奨となりました。これらのパラメーターは将来のリリースで削除される予定です。(#120903)
  • グループバージョンの変更が無い場合にも、Adding GroupVersion ログが繰り返し表示されるバグを修正しました。(#119825)
  • kube-controller-manager のメモリ使用量が改善されました。kube-controller-manager が必要としない .metadata.managedFields フィールドを削除しています。(#118455)
  • OpenAPIV3GAになったFeatureGateを削除しました。(#121255)
  • GRPCContainerProbe FeatureGateを削除しました。(この機能は既にstableで、常に有効になっています)(#120248)
  • GetPodQOS(pod *core.Pod) 関数は、PodStatus.QOSClassが設定されている場合、この値を返すようになりました。QOSClass の値を一から計算するには、ComputePodQOS(pod*core.Pod) を使用してください。(#119665)
  • etcdには ValidatingAdmissionPolicyValidatingAdmissionPolicyBindingv1beta1 が保存されるようになりました。APIサーバを1.27 から 1.28 にアップグレードする前に、alphaの ValidatingAdmissionPolicy 機能を無効にするか、alpha版のオブジェクトを削除してください。(#120018)
    • 📝 ValidatingAdmissionPolicy/Bindingのstorageバージョンが変更されました
  • client-go: k8s.io/client-go/tools の events および record パッケージにcontextとloggerを指定するための新しいAPIを追加しました。(#120729)
  • kubectlは、長らく非推奨となっていた /swagger-2.0.0.pb-v1 エンドポイントをサポートしなくなりました。(#119410)
1
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
1
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?