はじめに
Kubernetes v1.25がリリースされました ![]()
今回SIG-API主体な変更は少ないですが、全体でみると一番はPSPの廃止でしょうか。GAした機能では、EphemeralContainerや、前々リリースのv1.23で入ったCELによるCRDバリデーションがあります。
また、個人的に気になる機能は実装の今回ちょいちょい変更の入っているKEP-3229です。Podのエラーに合わせてJobのリトライを制御する機能は嬉しい人が多いかと思います。
それでは、API周りの変更を担当するSIG-API Machineryの変更点をCHANGELOGからピックアックします。(
がついた文章は、CHANGELOGの公式の内容ではなく筆者の補足です)
SIG, KEPについてはこちらを参照ください。
Urgent Upgrade Notes
-
非推奨となったBeta APIの公開が停止し、削除スケジュールがドキュメントに記載されました。詳しくは https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-25 をご覧ください。(#108797)
-
上記ドキュメントには、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) -
Kubernetesの公式イメージのOCIイメージレジストリ(registry.k8s.io)ができました。古いレジストリ(k8s.gcr.io)もしばらくサポートされますが、新しいレジストリはミラーが設定されているので、パフォーマンスの面でおすすめです。(#109938)- Admission/Policyでレジストリの許可リストを設定している場合は、
k8s.gcr.ioと共にregistry.k8s.ioも設定してください - エアギャップ環境やイメージのガベージコレクション設定がある場合も、
k8s.gcr.ioに加えてregistry.k8s.ioの設定が必要になります
- Admission/Policyでレジストリの許可リストを設定している場合は、
Deprecation (非推奨になったAPI)
- Kube-controller-managerのフラグから
deleting-pods-qps,deleting-pods-burst,register-retry-countが削除されました。 (#109612)-
v1.10時点で非推奨になっていたフラグが削除されています。
-
-
gcpとazureの認証プラグインは client-go と kubectl から削除されました。詳しくはhttps://github.com/Azure/kubelogin と https://cloud.google.com/blog/products/containers-kubernetes/kubectl-auth-changes-in-gke を参照してください (#110013) - 1.21 から非推奨になっていた
PodSecurityPolicyのbeta admission pluginは削除されました。v1.25にアップグレードする前に、Migrate from PodSecurityPolicy to the Built-In PodSecurity Admission Controller にある指示に従って、組み込みのPodSecurity admission plugin(または他のサードパーティのwebhook)に移行してください。(#109798)
API Changes (API周りの変更)
- PodSpecの
TopologySpreadConstraintsにNodeInclusionPolicyを追加しました。(#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)
-
JobのPodが失敗した際に、ExitCodeに応じた処理を定義できるようになりました。詳しくはKEP-3229 Retriable and Non Retriable Failuresを参照してください。
-
- 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)-
2016年からDebug用の機能欲しいというIssueがたてられてから、ついに1.25でGAしました! 詳しくは KEP-277 Ephemeral Container を参照してください。
-
Features (機能追加)
- KMS
v2alpha1APIが追加されました。(#110201) - dynamic
ResourceInterfaceにApplyとApplyStatusメソッドが追加されました。 (#109443)-
typed clientには既にApply/ApplyStatusが実装されているので、dynamic clientにも追加したようです。
-
-
ServerSideFieldValidationがBetaに昇格しました。schema検証がserver-sideで実施されるようになり、リクエストにinvalid/unknownなフィールドがあった場合にはデフォルトでwarningが表示されるようになります。(#110178)-
いままではclient側でバリデーションされていましたが、デフォルトでserver-sideで実施されるようになりました。v1.24でも一度ベータに上がったのですが、バグが発見されたためアルファに戻り、1.25で正式にベータに昇格しました。詳しくはKEP-2885 Server Side Unknown Field Validationを参照してください。
-
-
CustomResourceValidationExpressionsがBetaに昇格しました。FeatureGateのCustomResourceValidationExpressionsはデフォルト有効になります。(#111524)-
これでCRDの単体で完結するようなValidationであればwebhook使わずCELでいけそうです。詳しくは KEP-2876 CRD Validation Expression Language を参照してください。
-
- Etcdのバージョンがv3.5.4になりました (#110033)
- 対応中の https://issue.k8s.io/111911 が修正されるまで、
gcpとazureのauth pluginがclient-goとkubectlに復活しました。(#111918) - status=TrueのPodがDisruptionTargetを満したまま、DeletionTimestampが更新されずに2分以上経過した場合、controle planeがstatus=Falseをセットするようになりました。(#111475)
-
詳しくはKEP-3329 Retriable and Non Retriable Failuresを参照してください
-
Bug or Regression (バグ修正)
- api-server: 複数のwebhookをロードする際のauditの処理が修正されました。(#110145)
-
関数リテラル内でループ変数を掴んでしまうよくあるやつ
-
- strict server-sideフィールド検証で
metadataフィールドをunknownフィールドとして検出してしまうバグを修正しました。(#109268) - AuthenticatedGroupAdderとキャッシュされたauth token間のデータ競合を修正しました。(#109969)
- スキーマが未指定(preserveUnknownFields)の大きなオブジェクトをSSA経由で作成する際のパフォーマンス問題が修正されました。(#111557)
- Informer/Reflectorの呼び出し元が、特定のAPIエラーをタイプ別にunwrapできるようになりました。(#110076)
-
fmt.Errorfで%vでエラーを埋めこむのではなく%wが使われるようになってます。
-
- kube-apiserver: シャットダウン中にapiserverのcacherがGet/GetList/Watchリクエストを受けつけるとdeadlockする可能性があるため、拒否するようになりました。(#108414)
- ManafedFiledの値が変更された際に、正しく時間が更新されるようになりました。(#110058)
-
今まで 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)
-
MacOSでfsyncをつかったdiscoveryをすると遅いということでこの修正が入ったようです。
-