はじめに
Kubernetes 1.29 がリリースされました 🎉
今回はAPI周りの大きな変更は少ないですが、CEL周りは引き続き機能追加だったり、AuthenticationConfigurationでも利用可能になったりと、強化されています。また、FlowControl APIはついにv1へ昇格しました。
それでは、今回もAPI周りの変更を担当するSIG-API Machineryの変更点をCHANGELOGからピックアックします。(📝がついた文章は、CHANGELOGの公式の内容ではなく筆者の補足です)
SIG, KEPについてはこちらを参照ください。
API Changes (API周りの変更)
- ⭐
PreStop
ライフサイクルフックに新しいsleep
アクションが追加されました。コンテナが終了する前に指定された時間待機できるようになります。(#119026)- 📝 exec.commandでsleepのhookをしなくてもsleepできるようになりました。便利! まだAlphaなので利用にはFeatureGateの
PodLifecycleSleepAction
の有効化が必要です。
- 📝 exec.commandでsleepのhookをしなくてもsleepできるようになりました。便利! まだAlphaなので利用にはFeatureGateの
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を参照してください。
- 📝 OIDC認証の設定もCELを使ってルールを定義できるようになりました。(e.g.,
- Kubeletの設定に
ImageMaximumGCAge
フィールドが追加され、イメージがガベージコレクションされるまでの最大時間をユーザーが設定できるようになりました。(#121275) - ⭐
x-kubernetes-validations
にoptionalOldSelf
が追加されました。ratcheting CRD scheme制約がサポートされます。(#121034)- 📝 optionalOldSelfオプションが追加されました。これを有効にすると、新規作成時や更新前の値が未設定の場合にも
None
として前の値を使ったルールが定義できます。まだAlphaなので、利用にはFeatureGateのCRDValidationRatcheting
の有効化が必要です。CRDValidationRatchetingについてはKEP-4008を参照してください。
- 📝 optionalOldSelfオプションが追加されました。これを有効にすると、新規作成時や更新前の値が未設定の場合にも
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.status
にipMode
フィールドが追加されました。この新しいフィールドはLoadBalancerIPMode
FeatureGateで設定できます。(#119937) - kube-proxyに
nf_conntrack_udp_timeout
とnf_conntrack_udp_timeout_stream
の設定が追加されました。(#120808) - ⭐
v1alpha1 AuthorizationConfiguration
webhook のmatchConditions
でCEL式が使えるようになりました。(#121223)- 📝 v1.28ではValidating/MutatingWebhookConfigurationの
matchConditions
でCELが使えるようになりましたが、AuthorizationConfiguration
でも使えるようになりました。
- 📝 v1.28ではValidating/MutatingWebhookConfigurationの
-
certificates.k8s.io/v1alpha1
のClusterTrustBundle
オブジェクトを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/v1beta3
のFlowSchema
および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 を使用するように移行してください。
- PriorityLevelConfiguration:
- Hard/Softの
PodAffinity/PodAntiAffinity
にmatchLabelKeys/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の有効化が必要です。
- 📝 k8s標準リソースだけではなく、CRDも
- kube-apiserver:
--authentication-config
フラグの追加により、 AuthenticationConfiguration ファイルが読み込むめるようになりました。この--authentication-config
フラグは、既存の--oidc-*
フラグと併用できません。(#119142) -
kube-apiserver
:--authorization-config
フラグの追加により、apiserver.config.k8s.io/v1alpha1
のAuthorizationConfiguration
設定ファイルを読み込めるようになりました。--authorization-config
フラグは--authorization-modes
および--authorization-webhook-*
フラグと併用できません。有効化にはalpha
のStructuredAuthorizationConfiguration
Featureフラグの設定が必要です。(#120154)
Features (機能追加)
- ⭐
cel-go
がv0.17.7
に更新され、ext
ライブラリが追加されました。(#121577)- 📝 extensionライブラリのSet(データ構造)系の機能が追加されています。ドキュメント化は次のバージョンv1.30を予定しているようです。
-
openAPIV3Schema
はProperties
でも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)
-
TaintManager
がNodeLifeCycleController
から分離されました(KEP-3902)。(#119208) - KMSv2 の暗号化/復号操作のトレースが有効になりました。(#121095)
- server-sideのapplyリクエストで、重複したアイテムがあるキー付きリストを変更する場合、重複を削除してリクエスト内の一位な要素で置き換えるようになりました。(#121575)
- ⭐ API リストのチャンキング(ページネーション)機能が
stable
に昇格しました。(#119503) - etcdストア用のストリーミングAPIが実装されました。
sendInitialEvents ListOption
がwatch=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 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) -
etcd
をv3.5.10
に更新しました。(#121566)
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) -
OpenAPIV3
のGA
になったFeatureGateを削除しました。(#121255) -
GRPCContainerProbe
FeatureGateを削除しました。(この機能は既にstableで、常に有効になっています)(#120248) -
GetPodQOS(pod *core.Pod)
関数は、PodStatus.QOSClass
が設定されている場合、この値を返すようになりました。QOSClass
の値を一から計算するには、ComputePodQOS(pod*core.Pod)
を使用してください。(#119665) - etcdには
ValidatingAdmissionPolicy
とValidatingAdmissionPolicyBinding
のv1beta1
が保存されるようになりました。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)