はじめに
Kubernetes v1.23がリリースされました
期待していたIn-place Pod Vertical Scalingは入りませんでしたが、待望のEphemeral ContainerがBetaに昇格してデフォルト有効になったり、CEL expression languageによるCRDのバリデーションなど気になる機能もいくつか入っています。
それでは、API周りの変更を担当するSIG-API Machineryの変更点をCHANGELOGからピックアックします。(がついた文章は、CHANGELOGの公式の内容ではなく筆者の補足です。)
SIG, KEPについてはこちらを参照ください。
Deprecation (非推奨になったAPI)
- EgressSelectorConfiguration APIの
EgressSelection
タイプから'master'が削除されました。(#102242)- politeな'controlplane'に変更されています
API Changes (API周りの変更)
- client-goのimpersonation設定にUIDが設定できるようになりました。設定した値はリクエストの
impersonated uid
に渡されます。(#104483) - HPAのv2beta2を元に
v2
が作成されました。これに伴い、いくつかのフィールドが変更されています。(#102534)-
ChangeLogにはフィールド変更と書かれていますが、HPAリソースのフィールド変更はありませんでした。KEPには分かりづらい
Resource
をPodResource
に変更するなどのRenameが書かれているので今後変更が入るかもしれません。 詳しくは KEP-2702: Graduate v2beta2 Autoscaling API to GA を参照してください。
-
ChangeLogにはフィールド変更と書かれていますが、HPAリソースのフィールド変更はありませんでした。KEPには分かりづらい
- エフェメラルコンテナがBetaに昇格し、デフォルトで有効になりました。(#105405, #105609)
- ついにデフォルト有効になりました 起動パラメータ調整できない環境多くの環境でデバックできるようになりますね! 使い方については公式ドキュメントにも追記されています。設計について知りたい場合は KEP-277: Ephemeral Containers を参照してください。
-
kube-controller-manager
に--concurrent-ephemeralvolume-syncs
フラグが追加されました。これにより、ephemeral-volume-controllerのworker数を指定できます。 (#102981) -
generateName
を持つオブジェクトの生成時にConflictが発生すると、AlreadyExists
エラーをリトライオプションと共に返すようになりました。(#104699) - Priority and Fairness のv1beta2が導入されました。これに伴うAPIの変更はありません。(#104399)
- JSON形式のログにおいて、Infoメッセージを標準出力・Errorメッセージを標準エラー出力に書き出すよう設定できるようになりました。また、Infoメッセージはメモリにバッファ可能です。ただし、デフォルトでは、バッファせず標準出力に書き出します。(#104873)
-
LogFormatRegistry
のユーザはlogrの v1.0.0 APIを使うようにコードのアップデートが必要です。JSONログの出力では、go-logr/zapr フォーマットが使われるようになりました。(エラーやメッセージにv
フィールドが無いことに注意してください。)また、これに伴いいくつかの修正が入っています。(#104103) - kube-apiserver: CRDスキーマにおいて、enumのnull値の取扱が修正されました。(#104969)
-
nullをskipするためconvertion関数のエラーを無視していましたが、エラーはそのまま返すようになりました。代わりに、事前に値が空 or
null
文字であるかを検証しています。
-
nullをskipするためconvertion関数のエラーを無視していましたが、エラーはそのまま返すようになりました。代わりに、事前に値が空 or
- kube-apiserver: 非推奨APIの廃止 (#104248)
-
rbac.authorization.k8s.io/v1alpha1
APIが削除されました。代わりにrbac.authorization.k8s.io/v1
APIを利用してください。v1はv1.8から有効になっています。 -
scheduling.k8s.io/v1alpha1
APIが削除されました。代わりにscheduling.k8s.io/v1
APIを利用してください。v1はv1.14から有効になっています。
-
- KubernetesはGo 1.17 (1.17.3)でビルドされるようになりました。(#103692, #106209)
-
Go 1.17 のRelease Notesはこちら。Kubernetesでは
//go:build
へのマイグレーションのための変更が大量に入ってます。
-
Go 1.17 のRelease Notesはこちら。Kubernetesでは
- クエリパラメータの
fieldValidation=[Strict,Warn,Ignore]
を設定することで、Server SideのSchema検証を実行します。(#105916)-
Strict
を設定するとunknownフィールドが存在する時にエラー、Warn
を設定するとリクエストは成功するがWarningを表示、Ignore
を設定すると何もせずエラーを無視します。詳しくは KEP-2885: Server Side Unknown Field Validation を参照してください。
-
- Feature Gateの
TTLAfterFinished
がGAに昇格し、デフォルト有効になります。(#105219)- 便利なTTL機能がGAになりました。今まではCronJobを使っているとJobやPodなどの実行済みリソースが大量に残るため、これを定期的に消すようなcleanerなどを動かしていた方も多いのではないでしょうか?この機能では、JobやPodにTTLを設定することで、実行済みリソースがTTLを過ぎると自動でcleanupしてくれるという機能です。
- デフォルト有効になりましたが、この機能自体はJobやPodのデフォルト挙動は変更していません。利用する場合はTTLを明示的に設定してください。
- 下のPR含め、CronJobがv1.21でGAしてからちょいちょい改善入ってます。詳しくは KEP-592: TTL After Finished Controller を参照してください。
- JobステータスでReady状態のPod数を記録するようになりました。この機能は現在Alphaで、利用にはFeature Gateの
JobReadyPods
の有効化が必要です。(#104915)- 詳しくは KEP-2879: Track ready Pods in Job status を参照してください。
- Custom Resource DefinitionのバリデーションをCEL expression languageで記述できます。CELによるバリデーションは、OpenAPIv3 schema (alpha)の
x-kubernetes-validations
拡張フィールドに設定してください。現在この機能はAlphaで、利用にはFeature GateのCustomResourceValidationExpressions
の有効化が必要です。 (#106051, #105107)- 詳しくは: KEP-2876: CRD Validation Expression Language を参照してください。
Features (機能追加)
-
workqueue
APIのconditionにProcessing
が追加されました。workqueue
APIのShutdown
の挙動が変わり、全てのin-flightアイテムの処理が終了するまで待機するようになります。(#101928) - client-go:
Reactor
のfake clientにDeleteOptions
を渡すようになりました。(#102945) -
meta/v1
パッケージのNewUnstructuredExtractor
がパブリックになりました。これは、オブジェクトをUnstructuredなApply設定に展開できます。(#103564) - 機能フラグを有効化した場合、OpenAPI v3フォーマットの
/openapi/v3
エンドポイントが公開されます。(#105945)-
Feature Gateのフラグ名は
OpenAPIV3
です。
-
Feature Gateのフラグ名は
-
client-go
のEventライブラリでスパムのフィルタリングを拡張できるようになりました。これは、SpamKeyFun
を上書きすることでイベントのスパムフィルタを変更できます。(#103918) -
client-go
において、以下のHTTPリクエストイベントのトレースにログレベル9が使われるようになりました。(#105156)- DNS lookup
- TCP dialing
- TLS handshake
- poolからコネクションを取得した時間
- リクエストを処理した時間
Bug or Regression (バグ修正)
-
generic-apiserver
をベースとしているサーバで、CAや証明書とキーのbundleファイルに変更が合った場合、即座にリロードされます。(#104102) - client-goにおいて、生成された全グループとバージョンに同じHTTPクライアントを使うようになりました。これにより、複数のグループとバージョンに対して、カスタマイズしたTransportを共有できます。(#105490)
- Apply/Update後において、webhookにおいて古いオブジェクトによる不正なコピーが発生する問題が修正されました。(#106195)
- APIタイムアウトの記録中に並列マップアクセスによってpanicが発生する問題が解消されました。(#105734)
- controller-manager, kubelet, kube-apiserver, or client-goにおいて、LRUキャッシュでpanicが発生する退行バグが解消されました。(#104466)
- 新しいサーバオプション
shutdown-send-retry-after
を追加します。trueの場合、HTTPサーバは実行中の全ての(ロングランニングではない)リクエストが処理されるまでListenを続けます。このウィンドウの間、全ての新規リクエストにはステータスコード429 Retry-After
を返します。(#101257)- API serverのオプションです
- kube-apiserver:
admission webhook
に対する不必要な連続呼び出しを避けるため、UPDATE/DELETEリクエストを除外します。(#104182) - kube-apiserver:
events.k8s.io
APIグループを介して作製されたClusterスコープのEventオブジェクトは、default namespaceでも許可されるようになりました。これは、v1
APIとEventクライアントの互換性を保つための変更です。(#100125) - APIサーバで使われているetcdクライアントで、特定のエラーをリトライさせるようになりました。該当エラー(codes.Unavailable)のリストはここから確認できます。(#105069)
-
現在
codes.Unavailable
が設定されているetcdサーバ側のエラーは7つあります。それぞれLeader変更や不在系、Timeout系、Unhealthyなど時間が解決するかもしれないエラーが対象となっています。
-
現在
- サーバの起動時に404レスポンスを受け取った場合、オブジェクト削除の可能性があるGC及びNamespaceコントローラの問題を解消しました。このPRにより、APIServiceRegistrationControllerのジョブが完了するまで、AggregatedAPIサーバへのリクエストが404ではなく503を受け取ることを保証できます。(#104748)
-
client-go
のダイナミッククライアントが、デフォルトでContent-Type: application/json
ヘッダを付与するようになりました。(#104327)