6
2

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.25: SIG-API Machineryの変更内容

Last updated at Posted at 2022-08-29

はじめに

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

今回SIG-API主体な変更は少ないですが、全体でみると一番はPSPの廃止でしょうか。GAした機能では、EphemeralContainerや、前々リリースのv1.23で入ったCELによるCRDバリデーションがあります。
また、個人的に気になる機能は実装の今回ちょいちょい変更の入っているKEP-3229です。Podのエラーに合わせてJobのリトライを制御する機能は嬉しい人が多いかと思います。

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

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

Urgent Upgrade Notes

  • :star: 非推奨となったBeta APIの公開が停止し、削除スケジュールがドキュメントに記載されました。詳しくは https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-25 をご覧ください。(#108797)
    • :pencil: 上記ドキュメントには、v1.27までの削除スケジュールが記載されています。v1.25で公開が停止したBeta APIは以下の通りです
      • batch/v1beta1
      • discovery.k8s.io/v1beta1
      • events.k8s.io/v1beta1
      • autoscaling/v2beta1
      • policy/v1beta1
      • policy/v1beta1
      • node.k8s.io/v1beta1
  • e2eテストライブラリのGinkgoがv1からv2にアップグレードされました。 Ginkgo CLIでtest/e2eを実行する場合、v2のCLIを使用してください。また、デフォルトのタイムアウトが24hから1hになっているので、 -timeout=24h など適切な値を渡してください。Ginkgo V2 は go test の -parallel フラグを受け付けないため、代わりに ginkgo -p または ginkgo -procs=N を設定してください。(#109111)
  • :star: Kubernetesの公式イメージのOCIイメージレジストリ(registry.k8s.io)ができました。古いレジストリ(k8s.gcr.io)もしばらくサポートされますが、新しいレジストリはミラーが設定されているので、パフォーマンスの面でおすすめです。(#109938)
    • Admission/Policyでレジストリの許可リストを設定している場合は、 k8s.gcr.io と共に registry.k8s.io も設定してください
    • エアギャップ環境やイメージのガベージコレクション設定がある場合も、 k8s.gcr.io に加えて registry.k8s.io の設定が必要になります

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

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

  • PodSpecの TopologySpreadConstraintsNodeInclusionPolicy を追加しました。(#108492)
  • KMSのv2alpha1が追加されました。(#111126)
  • v1.25で、PodSecurity restricted レベルでは、 .spec.os.name="windows" を利用するPodにLinux固有のsecurityContextフィールドの設定が不要になりました。v1.25以降のクラスタにv1.23以前のノードが存在し、かつLinux固有のsecurityContextフィールドを引き続き必須としたい場合、Namespaceにラベル(e.g. pod-security.kubernetes.io/enforce-version: v1.24)を付与してv1.25以前の restricted バージョンが選択されるように設定してください。(#105919)
  • Pod障害Policyに応じてPod障害を処理するようになりました。(#111113)
  • Kube-Schedulerの ComponentConfig がGAに昇格し、 kubescheduler.config.k8s.io/v1 が有効になりました。 SelectorSpread プラグインはv1で削除されています。(#110534)
  • ローカルストレージの容量分離機能がGAしました。rootファイルシステムを確認できないシステム(rootless)では、 kubelet config --local-storage-capacity-isolation=false でこの機能を無効にしてください。無効化すると、LocalEphemeralStorageのrequest/limitと、emptyDirの sizeLimit を設定できなくなります。(#111513)
  • CronJobのTimeZone機能がBetaに昇格しました。(#111435)
  • Pod spec.podOS フィールドがGAに昇格しました。FeatureGateの IdentifyPodOS が常に有効になります。1.27では --feature-gates パラメータからも削除予定です。 (#111229)
  • ローリングアップグレード後も PodTopologySpread が反映されるようになりました。(#111441)
  • CSIInlineVolume がBetaからGAに昇格しました。(#111258)
  • Admissionプラグイン PodSecurity がGAに昇格し、デフォルト有効になりました。AdmissionConfigのバージョンは pod-security.admission.config.k8s.io/v1 に昇格しました。 (#110459)
  • Network Policyの endPort フィールドがGAに昇格しました。 endPort フィールドをサポートするNetwork Policyプロバイダは、Network Policyを適用するポートの範囲を指定できます。以前のNetwork Policyは、1ポートのみを指定可能でした。 endPort フィールドは、Network Policyプロバイダがサポートしている場合のみ利用できます。プロバイダが endPort をサポートしていない場合、Network Policyは port フィールド(単一ポート)のみを対象としたものが作成されます。(#110868)
  • metadata.clusterName フィールドが削除されました。これによるユーザー影響は特にありません。(#109602)
  • Pod Topology Spreadの minDomains フィールドがBetaに昇格しました。(#110388)
  • kube-controller-managerの enable-taint-manager フラグが非推奨になりました。1.26 で削除予定です。taint-based eviction機能は既にデフォルト有効になっているため、フラグが削除されても利用できます。(#111411)
  • CSI Driver Clientに NodeExpandSecret が追加されました。Nodeを拡張する際に、CSI DriverがこのSecretを利用できるようになりました。以前は nodeexpansion 呼び出しの一部として秘密鍵が提供できませんでした。(#105963)
  • EphemeralContainerがGAしました。 EphemeralContainers のFeatureGateは常に有効になります。また、kube-apiserverとkubelet --feature-gates フラグから削除が必要です。FeatureGateの EphemeralContainers は、今後のリリースで削除予定です。詳しくは非推奨および削除予定を参照してください。(#111402)
    • :pencil: 2016年からDebug用の機能欲しいというIssueがたてられてから、ついに1.25でGAしました! 詳しくは KEP-277 Ephemeral Container を参照してください。

:sparkle: Features (機能追加)

  • KMS v2alpha1 APIが追加されました。(#110201)
  • dynamic ResourceInterfaceApplyApplyStatus メソッドが追加されました。 (#109443)
    • :pencil: typed clientには既にApply/ApplyStatusが実装されているので、dynamic clientにも追加したようです。
  • :star: ServerSideFieldValidation がBetaに昇格しました。schema検証がserver-sideで実施されるようになり、リクエストにinvalid/unknownなフィールドがあった場合にはデフォルトでwarningが表示されるようになります。(#110178)
    • :pencil: いままではclient側でバリデーションされていましたが、デフォルトでserver-sideで実施されるようになりました。v1.24でも一度ベータに上がったのですが、バグが発見されたためアルファに戻り、1.25で正式にベータに昇格しました。詳しくはKEP-2885 Server Side Unknown Field Validationを参照してください。
  • :star: CustomResourceValidationExpressions がBetaに昇格しました。FeatureGateの CustomResourceValidationExpressions はデフォルト有効になります。(#111524)
  • Etcdのバージョンがv3.5.4になりました (#110033)
  • 対応中の https://issue.k8s.io/111911 が修正されるまで、 gcpazure のauth pluginがclient-goとkubectlに復活しました。(#111918)
  • status=TrueのPodがDisruptionTargetを満したまま、DeletionTimestampが更新されずに2分以上経過した場合、controle planeがstatus=Falseをセットするようになりました。(#111475)

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

  • api-server: 複数のwebhookをロードする際のauditの処理が修正されました。(#110145)
    • :pencil: 関数リテラル内でループ変数を掴んでしまうよくあるやつ
  • strict server-sideフィールド検証で metadata フィールドをunknownフィールドとして検出してしまうバグを修正しました。(#109268)
  • AuthenticatedGroupAdderとキャッシュされたauth token間のデータ競合を修正しました。(#109969)
  • スキーマが未指定(preserveUnknownFields)の大きなオブジェクトをSSA経由で作成する際のパフォーマンス問題が修正されました。(#111557)
  • Informer/Reflectorの呼び出し元が、特定のAPIエラーをタイプ別にunwrapできるようになりました。(#110076)
    • :pencil: fmt.Errorf%v でエラーを埋めこむのではなく %w が使われるようになってます。
  • kube-apiserver: シャットダウン中にapiserverのcacherがGet/GetList/Watchリクエストを受けつけるとdeadlockする可能性があるため、拒否するようになりました。(#108414)
  • ManafedFiledの値が変更された際に、正しく時間が更新されるようになりました。(#110058)
    • :pencil: 今まで managedFields.time の値はApply時のみ更新されていましたが、manfedFiledが更新された際は常に更新するようになりました。
  • OpenAPIは以下のスキーマを複製しなくなりました。(#110179)
    • io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions_v2
    • io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta_v2
    • io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference_v2
    • io.k8s.apimachinery.pkg.apis.meta.v1.StatusDetails_v2
    • io.k8s.apimachinery.pkg.apis.meta.v1.Status_v2
  • validation admission webhookの検証中に発生したpanicを検出し、fail open/closeの設定に応じて処理するようになりました。(#108746)
  • Namespaceのeditorとownerが leases.coordination.k8s.io を作成できるようになりました。leaderelectionでは、configmapではなくleasesを利用してください。(#111472)
  • discovery cacheとの整合性を確保するため、fsyncの代わりにchecksumを使うようになりました。 (#110851)
    • :pencil: MacOSでfsyncをつかったdiscoveryをすると遅いということでこの修正が入ったようです。
6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?