1TODO: This document was manually maintained so might be incomplete. The
2automation effort is tracked in
3https://github.com/kubernetes/test-infra/issues/5843.
4
5Changes in `k8s.io/api` and `k8s.io/apimachinery` are mentioned here
6because `k8s.io/client-go` depends on them.
7
8# v10.0.0
9
10**Breaking Changes:**
11
12* Action required: client-go will no longer have bootstrap
13(`k8s.io/client-go/tools/bootstrap`) related code. Any reference to it will
14break. Please redirect all references to `k8s.io/bootstrap` instead.
15([#67356](https://github.com/kubernetes/kubernetes/pull/67356))
16
17* The methods `NewSelfSignedCACert` and `NewSignedCert` now use `crypto.Signer`
18interface instead of `rsa.PrivateKey` for certificate creation. This is done
19to allow different kind of private keys (for example: ecdsa).
20([#69329](https://github.com/kubernetes/kubernetes/pull/69329))
21
22* `GetScale` and `UpdateScale` methods have been added for `apps/v1` clients
23and with this, no-verb scale clients have been removed.
24([#70437](https://github.com/kubernetes/kubernetes/pull/70437))
25
26* `k8s.io/client-go/util/cert/triple` package has been removed.
27([#70966](https://github.com/kubernetes/kubernetes/pull/70966))
28
29**New Features:**
30
31* `unfinished_work_microseconds` is added to the workqueue metrics.
32It can be used to detect stuck worker threads (kube-controller-manager runs many workqueues.).
33([#70884](https://github.com/kubernetes/kubernetes/pull/70884))
34
35* A method `GetPorts` is added to expose the ports that were forwarded.
36This can be used to retrieve the locally-bound port in cases where the input was port 0.
37([#67513](https://github.com/kubernetes/kubernetes/pull/67513))
38
39* Dynamic listers and informers, that work with `runtime.Unstructured` objects,
40are added. These are useful for writing generic, non-generated controllers.
41([68748](https://github.com/kubernetes/kubernetes/pull/68748))
42
43* The dynamic fake client now supports JSONPatch.
44([#69330](https://github.com/kubernetes/kubernetes/pull/69330))
45
46* The `GetBinding` method is added for pods in the fake client.
47([#69412](https://github.com/kubernetes/kubernetes/pull/69412))
48
49**Bug fixes and Improvements:**
50
51* The `apiVersion` and action name values for fake evictions are now set.
52([#69035](https://github.com/kubernetes/kubernetes/pull/69035))
53
54* PEM files containing both TLS certificate and key can now be parsed in
55arbitrary order. Previously key was always required to be first.
56([#69536](https://github.com/kubernetes/kubernetes/pull/69536))
57
58* Go clients created from a kubeconfig that specifies a `TokenFile` now
59periodically reload the token from the specified file.
60([#70606](https://github.com/kubernetes/kubernetes/pull/70606))
61
62* It is now ensured that oversized data frames are not written to
63spdystreams in `remotecommand.NewSPDYExecutor`.
64([#70999](https://github.com/kubernetes/kubernetes/pull/70999))
65
66* A panic occuring on calling `scheme.Convert` is fixed by populating the fake
67dynamic client scheme. ([#69125](https://github.com/kubernetes/kubernetes/pull/69125))
68
69* Add step to correctly setup permissions for the in-cluster-client-configuration example.
70([#69232](https://github.com/kubernetes/kubernetes/pull/69232))
71
72* The function `Parallelize` is deprecated. Use `ParallelizeUntil` instead.
73([#68403](https://github.com/kubernetes/kubernetes/pull/68403))
74
75* [k8s.io/apimachinery] Restrict redirect following from the apiserver to
76same-host redirects, and ignore redirects in some cases.
77([#66516](https://github.com/kubernetes/kubernetes/pull/66516))
78
79## API changes
80
81**New Features:**
82
83* GlusterFS PersistentVolumes sources can now reference endpoints in any
84namespace using the `spec.glusterfs.endpointsNamespace` field.
85Ensure all kubelets are upgraded to 1.13+ before using this capability.
86([#60195](https://github.com/kubernetes/kubernetes/pull/60195))
87
88* The [dynamic audit configuration](https://github.com/kubernetes/community/blob/master/keps/sig-auth/0014-dynamic-audit-configuration.md)
89API is added. ([#67547](https://github.com/kubernetes/kubernetes/pull/67547))
90
91* A new field `EnableServiceLinks` is added to the `PodSpec` to indicate whether
92information about services should be injected into pod's environment variables.
93([#68754](https://github.com/kubernetes/kubernetes/pull/68754))
94
95* `CSIPersistentVolume` feature, i.e. `PersistentVolumes` with
96`CSIPersistentVolumeSource`, is GA. `CSIPersistentVolume` feature gate is now
97deprecated and will be removed according to deprecation policy.
98([#69929](https://github.com/kubernetes/kubernetes/pull/69929))
99
100* Raw block volume support is promoted to beta, and enabled by default.
101This is accessible via the `volumeDevices` container field in pod specs,
102and the `volumeMode` field in persistent volume and persistent volume claims definitions.
103([#71167](https://github.com/kubernetes/kubernetes/pull/71167))
104
105**Bug fixes and Improvements:**
106
107* The default value of extensions/v1beta1 Deployment's `RevisionHistoryLimit`
108is set to `MaxInt32`. ([#66605](https://github.com/kubernetes/kubernetes/pull/66605))
109
110* `procMount` field is no longer incorrectly marked as required in openapi schema.
111([#69694](https://github.com/kubernetes/kubernetes/pull/69694))
112
113* The caBundle and service fields in admission webhook API objects now correctly
114indicate they are optional. ([#70138](https://github.com/kubernetes/kubernetes/pull/70138))
115
116# v9.0.0
117
118**Breaking Changes:**
119
120* client-go now supports additional non-alpha-numeric characters in UserInfo
121"extra" data keys. It should be updated in order to properly support extra
122data containing "/" characters or other characters disallowed in HTTP headers.
123Old clients sending keys which were `%`-escaped by the user will have their
124values unescaped by new API servers.
125([#65799](https://github.com/kubernetes/kubernetes/pull/65799))
126
127* `apimachinery/pkg/watch.Until` has been moved to
128`client-go/tools/watch.UntilWithoutRetry`. While switching please consider
129using the new `client-go/tools/watch.UntilWithSync` or `client-go/tools/watch.Until`.
130([#66906](https://github.com/kubernetes/kubernetes/pull/66906))
131
132* [k8s.io/apimachinery] `Unstructured` metadata accessors now respect omitempty semantics
133i.e. a field having zero value will now be removed from the unstructured metadata map.
134([#67635](https://github.com/kubernetes/kubernetes/pull/67635))
135
136* [k8s.io/apimachinery] The `ObjectConvertor` interface is now changed such that
137`ConvertFieldLabel` func takes GroupVersionKind as an argument instead of just
138version and kind. ([#65780](https://github.com/kubernetes/kubernetes/pull/65780))
139
140* [k8s.io/apimachinery] componentconfig `ClientConnectionConfiguration` is
141moved to `k8s.io/apimachinery/pkg/apis/config`.
142([#66058](https://github.com/kubernetes/kubernetes/pull/66058))
143
144* [k8s.io/apimachinery] Renamed ` KubeConfigFile` to `Kubeconfig` in
145`ClientConnectionConfiguration`.
146([#67149](https://github.com/kubernetes/kubernetes/pull/67149))
147
148* [k8s.io/apimachinery] JSON patch no longer supports `int`.
149([#63522](https://github.com/kubernetes/kubernetes/pull/63522))
150
151**New Features:**
152
153* Add ability to cancel leader election.
154This also proves useful in integration tests where the whole app is started and
155stopped in each test. ([#57932](https://github.com/kubernetes/kubernetes/pull/57932))
156
157* An example showing how to use fake clients in tests is added.
158([#65291](https://github.com/kubernetes/kubernetes/pull/65291))
159
160* [k8s.io/apimachinery] Create and Update now support `CreateOptions` and `UpdateOptions`.
161([#65105](https://github.com/kubernetes/kubernetes/pull/65105))
162
163**Bug fixes and Improvements:**
164
165* Decrease the amount of time it takes to modify kubeconfig
166files with large amounts of contexts.
167([#67093](https://github.com/kubernetes/kubernetes/pull/67093))
168
169* The leader election client now renews timeout.
170([#65094](https://github.com/kubernetes/kubernetes/pull/65094))
171
172* Switched certificate data replacement from `REDACTED` to `DATA+OMITTED`.
173([#66023](https://github.com/kubernetes/kubernetes/pull/66023))
174
175* Fix listing in the fake dynamic client.
176([#66078](https://github.com/kubernetes/kubernetes/pull/66078))
177
178* Fix discovery so that plural names are no longer ignored if a singular name is not specified.
179([#66249](https://github.com/kubernetes/kubernetes/pull/66249))
180
181* Fix kubelet startup failure when using `ExecPlugin` in kubeconfig.
182([#66395](https://github.com/kubernetes/kubernetes/pull/66395))
183
184* Fix panic in the fake `SubjectAccessReview` client when object is nil.
185([#66837](https://github.com/kubernetes/kubernetes/pull/66837))
186
187* Periodically reload `InClusterConfig` token.
188([#67359](https://github.com/kubernetes/kubernetes/pull/67359))
189
190* [k8s.io/apimachinery] Report parsing error in json serializer.
191([#63668](https://github.com/kubernetes/kubernetes/pull/63668))
192
193* [k8s.io/apimachinery] The `metav1.ObjectMeta` accessor does not deepcopy
194owner references anymore. In general, the accessor interface does not enforce
195deepcopy nor does it forbid it (e.g. for `unstructured.Unstructured`).
196([#64915](https://github.com/kubernetes/kubernetes/pull/64915))
197
198* [k8s.io/apimachinery] Utility functions `SetTransportDefaults` and `DialerFor`
199once again respect custom Dial functions set on transports.
200([#65547](https://github.com/kubernetes/kubernetes/pull/65547))
201
202* [k8s.io/apimachinery] Speed-up conversion function invocation by avoiding
203`reflect.Call`. Action required: regenerated conversion with conversion-gen.
204([#65771](https://github.com/kubernetes/kubernetes/pull/65771))
205
206* [k8s.io/apimachinery] Establish "406 Not Acceptable" response for
207unmarshable protobuf serialization error.
208([#67041](https://github.com/kubernetes/kubernetes/pull/67041))
209
210* [k8s.io/apimachinery] Immediately close the other side of the connection by
211exiting once one side closes when proxying.
212([#67288](https://github.com/kubernetes/kubernetes/pull/67288))
213
214
215## API changes
216
217**Breaking Changes:**
218
219* Volume dynamic provisioning scheduling has been promoted to beta.
220ACTION REQUIRED: The DynamicProvisioningScheduling alpha feature gate has been removed.
221The VolumeScheduling beta feature gate is still required for this feature.
222([#67432](https://github.com/kubernetes/kubernetes/pull/67432))
223
224* The CSI file system type is no longer defaulted to ext4.
225All the production drivers listed under https://kubernetes-csi.github.io/docs/Drivers.html
226were inspected and should not be impacted after this change.
227If you are using a driver not in that list,
228please test the drivers on an updated test cluster first.
229([#65499](https://github.com/kubernetes/kubernetes/pull/65499))
230
231**New Features:**
232
233* Support annotations for remote admission webhooks.
234([#58679](https://github.com/kubernetes/kubernetes/pull/58679))
235
236* Support both directory and block device for local volume
237plugin `FileSystem` `VolumeMode`.
238([#63011](https://github.com/kubernetes/kubernetes/pull/63011))
239
240* Introduce `autoscaling/v2beta2` and `custom_metrics/v1beta2`,
241which implement metric selectors for Object and Pods metrics,
242as well as allowing AverageValue targets on Objects, similar to External metrics.
243([#64097](https://github.com/kubernetes/kubernetes/pull/64097))
244
245*  Add `Lease` API in the `coordination.k8s.io` API group.
246([#64246](https://github.com/kubernetes/kubernetes/pull/64246))
247
248* `ProcMount` added to `SecurityContext` and `AllowedProcMounts` added to `PodSecurityPolicy`
249to allow paths in the container's `/proc` to not be masked.
250([#64283](https://github.com/kubernetes/kubernetes/pull/64283))
251
252* Add the `AuditAnnotations` field to `ImageReviewStatus` to allow the
253`ImageReview` backend to return annotations to be added to the created pod.
254([#64597](https://github.com/kubernetes/kubernetes/pull/64597))
255
256* SCTP is now supported as additional protocol (alpha) alongside TCP and UDP in
257Pod, Service, Endpoint, and NetworkPolicy.
258([#64973](https://github.com/kubernetes/kubernetes/pull/64973))
259
260* The `PodShareProcessNamespace` feature to configure PID namespace sharing
261within a pod has been promoted to beta.
262([#66507](https://github.com/kubernetes/kubernetes/pull/66507))
263
264* Add `TTLSecondsAfterFinished` to `JobSpec` for cleaning up Jobs after they finish.
265([#66840](https://github.com/kubernetes/kubernetes/pull/66840))
266
267* Add `DataSource` and `TypedLocalObjectReference` fields to support
268restoring a volume from a volume snapshot data source.
269([#67087](https://github.com/kubernetes/kubernetes/pull/67087))
270
271* `RuntimeClass` is a new API resource for defining different classes of runtimes
272that may be used to run containers in the cluster.
273Pods can select a `RunitmeClass` to use via the `RuntimeClassName` field.
274This feature is in alpha, and the `RuntimeClass` feature gate must be enabled
275in order to use it. ([#67737](https://github.com/kubernetes/kubernetes/pull/67737))
276
277* To address the possibility dry-run requests overwhelming admission webhooks
278that rely on side effects and a reconciliation mechanism, a new field is being
279added to `admissionregistration.k8s.io/v1beta1.ValidatingWebhookConfiguration`
280and `admissionregistration.k8s.io/v1beta1.MutatingWebhookConfiguration` so that
281webhooks can explicitly register as having dry-run support.
282If a dry-run request is made on a resource that triggers a non dry-run supporting
283webhook, the request will be completely rejected, with "400: Bad Request".
284Additionally, a new field is being added to the
285`admission.k8s.io/v1beta1.AdmissionReview` API object, exposing to webhooks
286whether or not the request being reviewed is a dry-run.
287([#66936](https://github.com/kubernetes/kubernetes/pull/66936))
288
289**Bug fixes and Improvements:**
290
291* The `DisruptedPods` field in `PodDisruptionBudgetStatus` is now optional.
292([#63757](https://github.com/kubernetes/kubernetes/pull/63757))
293
294* `extensions/v1beta1` Deployment's `ProgressDeadlineSeconds` now defaults to `MaxInt32`.
295([#66581](https://github.com/kubernetes/kubernetes/pull/66581))
296
297# v8.0.0
298
299**Breaking Changes:**
300
301* `KUBE_API_VERSIONS` has been removed.
302
303    * [https://github.com/kubernetes/kubernetes/pull/63165](https://github.com/kubernetes/kubernetes/pull/63165)
304
305* The client-go/discovery `RESTMapper` has been moved to client-go/restmapper.
306
307    * [https://github.com/kubernetes/kubernetes/pull/63507](https://github.com/kubernetes/kubernetes/pull/63507)
308
309* `CachedDiscoveryClient` has been moved from kubectl to client-go.
310
311    * [https://github.com/kubernetes/kubernetes/pull/63550](https://github.com/kubernetes/kubernetes/pull/63550)
312
313* The `EventRecorder` interface is changed to include an `AnnotatedEventf` method, which can add annotations to an event.
314
315    * [https://github.com/kubernetes/kubernetes/pull/64213](https://github.com/kubernetes/kubernetes/pull/64213)
316
317* [k8s.io/apimachinery] The deprecated `RepairMalformedUpdates` flag has been removed.
318
319    * [https://github.com/kubernetes/kubernetes/pull/61455](https://github.com/kubernetes/kubernetes/pull/61455)
320
321**New Features:**
322
323* A new easy-to-use dynamic client is added and the old dynamic client is now deprecated.
324
325    * [https://github.com/kubernetes/kubernetes/pull/62913](https://github.com/kubernetes/kubernetes/pull/62913)
326
327* client-go and kubectl now detect and report an error on duplicated name for user, cluster and context, while loading the kubeconfig.
328
329    * [https://github.com/kubernetes/kubernetes/pull/60464](https://github.com/kubernetes/kubernetes/pull/60464)
330
331* The informer code-generator now allows specifying a custom resync period for certain informer types and uses the default resync period if none is specified.
332
333    * [https://github.com/kubernetes/kubernetes/pull/61400](https://github.com/kubernetes/kubernetes/pull/61400)
334
335* Exec authenticator plugin now supports TLS client certificates.
336
337    * [https://github.com/kubernetes/kubernetes/pull/61803](https://github.com/kubernetes/kubernetes/pull/61803)
338
339* The discovery client now has a default request timeout of 32 seconds.
340
341    * [https://github.com/kubernetes/kubernetes/pull/62733](https://github.com/kubernetes/kubernetes/pull/62733)
342
343* The OpenStack auth config from is now read from the client config. If the client config is not available, it falls back to reading from the environment variables.
344
345    * [https://github.com/kubernetes/kubernetes/pull/60200](https://github.com/kubernetes/kubernetes/pull/60200)
346
347* The in-tree support for openstack credentials is now deprecated. Please use the `client-keystone-auth` from the cloud-provider-openstack repository. Details on how to use this new capability is documented [here](https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/using-client-keystone-auth.md)
348
349    * [https://github.com/kubernetes/kubernetes/pull/64346](https://github.com/kubernetes/kubernetes/pull/64346)
350
351**Bug fixes and Improvements:**
352
353* 406 mime-type errors are now tolerated while attempting to load new openapi schema. This improves compatibility with older servers when creating/updating API objects.
354
355    * [https://github.com/kubernetes/kubernetes/pull/61949](https://github.com/kubernetes/kubernetes/pull/61949)
356
357* Removes the generated `DeleteCollection()` method for `Services` since the API does not support it.
358
359    * [https://github.com/kubernetes/kubernetes/pull/63861](https://github.com/kubernetes/kubernetes/pull/63861)
360
361* Event object references with apiversion now report an apiversion, instead of just the group.
362
363    * [https://github.com/kubernetes/kubernetes/pull/63913](https://github.com/kubernetes/kubernetes/pull/63913)
364
365    [https://github.com/kubernetes/kubernetes/pull/62462](https://github.com/kubernetes/kubernetes/pull/62462)
366
367* [k8s.io/apimachinery] `runtime.Unstructured.UnstructuredContent()` no longer mutates the source while returning the contents.
368
369    * [https://github.com/kubernetes/kubernetes/pull/62063](https://github.com/kubernetes/kubernetes/pull/62063)
370
371* [k8s.io/apimachinery] Incomplete support for `uint64` is now removed. This fixes a panic encountered while using `DeepCopyJSON` with `uint64`.
372
373    * [https://github.com/kubernetes/kubernetes/pull/62981](https://github.com/kubernetes/kubernetes/pull/62981)
374
375* [k8s.io/apimachinery] API server can now parse `propagationPolicy` when it sent as a query parameter sent with a delete request.
376
377    * [https://github.com/kubernetes/kubernetes/pull/63414](https://github.com/kubernetes/kubernetes/pull/63414)
378
379* [k8s.io/apimachinery] APIServices with kube-like versions (e.g. v1, v2beta1, etc.) will be sorted appropriately within each group.
380
381    * [https://github.com/kubernetes/kubernetes/pull/64004](https://github.com/kubernetes/kubernetes/pull/64004)
382
383* [k8s.io/apimachinery] `int64` is the only allowed integer for printers.
384
385    * [https://github.com/kubernetes/kubernetes/pull/64639](https://github.com/kubernetes/kubernetes/pull/64639)
386
387## API changes
388
389**Breaking Changes:**
390
391* Support for `alpha.kubernetes.io/nvidia-gpu` resource which was deprecated in 1.10 is removed. Please use the resource exposed by `DevicePlugins` instead (`nvidia.com/gpu`).
392
393    * [https://github.com/kubernetes/kubernetes/pull/61498](https://github.com/kubernetes/kubernetes/pull/61498)
394
395* Alpha annotation for `PersistentVolume` node affinity has been removed. Update your `PersistentVolume`s to use the beta `PersistentVolume.nodeAffinity` field before upgrading.
396
397    * [https://github.com/kubernetes/kubernetes/pull/61816](https://github.com/kubernetes/kubernetes/pull/61816)
398
399* `ObjectMeta ` `ListOptions` `DeleteOptions` are removed from the core api group. Please use the ones in `meta/v1` instead.
400
401    * [https://github.com/kubernetes/kubernetes/pull/61809](https://github.com/kubernetes/kubernetes/pull/61809)
402
403* `ExternalID` in `NodeSpec` is deprecated. The externalID of the node is no longer set in the Node spec.
404
405    * [https://github.com/kubernetes/kubernetes/pull/61877](https://github.com/kubernetes/kubernetes/pull/61877)
406
407* PSP-related types in the `extensions/v1beta1` API group are now deprecated. It is suggested to use the `policy/v1beta1` API group instead.
408
409    * [https://github.com/kubernetes/kubernetes/pull/61777](https://github.com/kubernetes/kubernetes/pull/61777)
410
411**New Features:**
412
413* `PodSecurityPolicy` now supports restricting hostPath volume mounts to be readOnly and under specific path prefixes.
414
415    * [https://github.com/kubernetes/kubernetes/pull/58647](https://github.com/kubernetes/kubernetes/pull/58647)
416
417* `Node.Spec.ConfigSource.ConfigMap.KubeletConfigKey` must be specified when using dynamic Kubelet config to tell the Kubelet which key of the `ConfigMap` identifies its config file.
418
419    * [https://github.com/kubernetes/kubernetes/pull/59847](https://github.com/kubernetes/kubernetes/pull/59847)
420
421* `serverAddressByClientCIDRs` in `meta/v1` APIGroup is now optional.
422
423    * [https://github.com/kubernetes/kubernetes/pull/61963](https://github.com/kubernetes/kubernetes/pull/61963)
424
425* A new field `MatchFields` is added to `NodeSelectorTerm`. Currently, it only supports `metadata.name`.
426
427    * [https://github.com/kubernetes/kubernetes/pull/62002](https://github.com/kubernetes/kubernetes/pull/62002)
428
429* The `PriorityClass` API is promoted to `scheduling.k8s.io/v1beta1`.
430
431    * [https://github.com/kubernetes/kubernetes/pull/63100](https://github.com/kubernetes/kubernetes/pull/63100)
432
433* The status of dynamic Kubelet config is now reported via `Node.Status.Config`, rather than the `KubeletConfigOk` node condition.
434
435    * [https://github.com/kubernetes/kubernetes/pull/63314](https://github.com/kubernetes/kubernetes/pull/63314)
436
437* The `GitRepo` volume type is deprecated. To provision a container with a git repo, mount an `EmptyDir` into an `InitContainer` that clones the repo using git, then mount the `EmptyDir` into the Pod's container.
438
439    * [https://github.com/kubernetes/kubernetes/pull/63445](https://github.com/kubernetes/kubernetes/pull/63445)
440
441* The Sysctls experimental feature has been promoted to beta (enabled by default via the `Sysctls` feature flag). `PodSecurityPolicy` and `Pod` objects now have fields for specifying and controlling sysctls. Alpha sysctl annotations will be ignored by 1.11+ kubelets. All alpha sysctl annotations in existing deployments must be converted to API fields to be effective.
442
443    * [https://github.com/kubernetes/kubernetes/pull/63717](https://github.com/kubernetes/kubernetes/pull/63717)
444
445* The annotation `service.alpha.kubernetes.io/tolerate-unready-endpoints` is deprecated.  Users should use `Service.spec.publishNotReadyAddresses` instead.
446
447    * [https://github.com/kubernetes/kubernetes/pull/63742](https://github.com/kubernetes/kubernetes/pull/63742)
448
449* `VerticalPodAutoscaler` has been added to `autoscaling/v1` API group.
450
451    * [https://github.com/kubernetes/kubernetes/pull/63797](https://github.com/kubernetes/kubernetes/pull/63797)
452
453* Alpha support is added for dynamic volume limits based on node type.
454
455    * [https://github.com/kubernetes/kubernetes/pull/64154](https://github.com/kubernetes/kubernetes/pull/64154)
456
457* `ContainersReady` condition is added to the Pod status.
458
459    * [https://github.com/kubernetes/kubernetes/pull/64646](https://github.com/kubernetes/kubernetes/pull/64646)
460
461**Bug fixes and Improvements:**
462
463* Default mount propagation has changed from `HostToContainer` (`rslave` in Linux terminology) to `None` (`private`) to match the behavior in 1.9 and earlier releases. `HostToContainer` as a default caused regressions in some pods.
464
465    * [https://github.com/kubernetes/kubernetes/pull/62462](https://github.com/kubernetes/kubernetes/pull/62462)
466
467# v7.0.0
468
469**Breaking Changes:**
470
471* Google Cloud Service Account email addresses can now be used in RBAC Role bindings since the default scopes now include the `userinfo.email` scope. This is a breaking change if the numeric uniqueIDs of the Google service accounts were being used in RBAC role bindings. The behavior can be overridden by explicitly specifying the scope values as comma-separated string in the `users[*].config.scopes` field in the `KUBECONFIG` file.
472
473    * [https://github.com/kubernetes/kubernetes/pull/58141](https://github.com/kubernetes/kubernetes/pull/58141)
474
475* [k8s.io/api] The `ConfigOK` node condition has been renamed to `KubeletConfigOk`.
476
477    * [https://github.com/kubernetes/kubernetes/pull/59905](https://github.com/kubernetes/kubernetes/pull/59905)
478
479**New Features:**
480
481* Subresource support is added to the dynamic client.
482
483    * [https://github.com/kubernetes/kubernetes/pull/56717](https://github.com/kubernetes/kubernetes/pull/56717)
484
485* A watch method is added to the Fake Client.
486
487    * [https://github.com/kubernetes/kubernetes/pull/57504](https://github.com/kubernetes/kubernetes/pull/57504)
488
489* `ListOptions` can be modified when creating a `ListWatch`.
490
491    * [https://github.com/kubernetes/kubernetes/pull/57508](https://github.com/kubernetes/kubernetes/pull/57508)
492
493* A `/token` subresource for ServiceAccount is added.
494
495    * [https://github.com/kubernetes/kubernetes/pull/58111](https://github.com/kubernetes/kubernetes/pull/58111)
496
497* If an informer delivery fails, the particular notification is skipped and continued the next time.
498
499    * [https://github.com/kubernetes/kubernetes/pull/58394](https://github.com/kubernetes/kubernetes/pull/58394)
500
501* Certificate manager will no longer wait until the initial rotation succeeds or fails before returning from `Start()`.
502
503    * [https://github.com/kubernetes/kubernetes/pull/58930](https://github.com/kubernetes/kubernetes/pull/58930)
504
505* [k8s.io/api] `VolumeScheduling` and `LocalPersistentVolume` features are beta and enabled by default. The PersistentVolume NodeAffinity alpha annotation is deprecated and will be removed in a future release.
506
507    * [https://github.com/kubernetes/kubernetes/pull/59391](https://github.com/kubernetes/kubernetes/pull/59391)
508
509* [k8s.io/api] The `PodSecurityPolicy` API has been moved to the `policy/v1beta1` API group. The `PodSecurityPolicy` API in the `extensions/v1beta1` API group is deprecated and will be removed in a future release.
510
511    * [https://github.com/kubernetes/kubernetes/pull/54933](https://github.com/kubernetes/kubernetes/pull/54933)
512
513* [k8s.io/api] ConfigMap objects now support binary data via a new `binaryData` field.
514
515    * [https://github.com/kubernetes/kubernetes/pull/57938](https://github.com/kubernetes/kubernetes/pull/57938)
516
517* [k8s.io/api] Service account TokenRequest API is added.
518
519    * [https://github.com/kubernetes/kubernetes/pull/58027](https://github.com/kubernetes/kubernetes/pull/58027)
520
521* [k8s.io/api] FSType is added in CSI volume source to specify filesystems.
522
523    * [https://github.com/kubernetes/kubernetes/pull/58209](https://github.com/kubernetes/kubernetes/pull/58209)
524
525* [k8s.io/api] v1beta1 VolumeAttachment API is added.
526
527    * [https://github.com/kubernetes/kubernetes/pull/58462](https://github.com/kubernetes/kubernetes/pull/58462)
528
529* [k8s.io/api] `v1.Pod` now has a field `ShareProcessNamespace` to configure whether a single process namespace should be shared between all containers in a pod. This feature is in alpha preview.
530
531    * [https://github.com/kubernetes/kubernetes/pull/58716](https://github.com/kubernetes/kubernetes/pull/58716)
532
533* [k8s.io/api] Add `NominatedNodeName` field to `PodStatus`. This field is set when a pod preempts other pods on the node.
534
535    * [https://github.com/kubernetes/kubernetes/pull/58990](https://github.com/kubernetes/kubernetes/pull/58990)
536
537* [k8s.io/api] Promote `CSIPersistentVolumeSourc`e to beta.
538
539    * [https://github.com/kubernetes/kubernetes/pull/59157](https://github.com/kubernetes/kubernetes/pull/59157)
540
541* [k8s.io/api] Promote `DNSPolicy` and `DNSConfig` in `PodSpec` to beta.
542
543    * [https://github.com/kubernetes/kubernetes/pull/59771](https://github.com/kubernetes/kubernetes/pull/59771)
544
545* [k8s.io/api] External metric types are added to the HPA API.
546
547    * [https://github.com/kubernetes/kubernetes/pull/60096](https://github.com/kubernetes/kubernetes/pull/60096)
548
549* [k8s.io/apimachinery] The `meta.k8s.io/v1alpha1` objects for retrieving tabular responses from the server (`Table`) or fetching just the `ObjectMeta` for an object (as `PartialObjectMetadata`) are now beta as part of `meta.k8s.io/v1beta1`. Clients may request alternate representations of normal Kubernetes objects by passing an `Accept` header like `application/json;as=Table;g=meta.k8s.io;v=v1beta1` or `application/json;as=PartialObjectMetadata;g=meta.k8s.io;v1=v1beta1`. Older servers will ignore this representation or return an error if it is not available. Clients may request fallback to the normal object by adding a non-qualified mime-type to their `Accept` header like `application/json` - the server will then respond with either the alternate representation if it is supported or the fallback mime-type which is the normal object response.
550
551    * [https://github.com/kubernetes/kubernetes/pull/59059](https://github.com/kubernetes/kubernetes/pull/59059)
552
553
554**Bug fixes and Improvements:**
555
556* Port-forwarding of TCP6 ports is fixed.
557
558    * [https://github.com/kubernetes/kubernetes/pull/57457](https://github.com/kubernetes/kubernetes/pull/57457)
559
560* A race condition in SharedInformer that could violate the sequential delivery guarantee and cause panics on shutdown is fixed.
561
562    * [https://github.com/kubernetes/kubernetes/pull/59828](https://github.com/kubernetes/kubernetes/pull/59828)
563
564* [k8s.io/api] PersistentVolume flexVolume sources can now reference secrets in a namespace other than the PersistentVolumeClaim's namespace.
565
566    * [https://github.com/kubernetes/kubernetes/pull/56460](https://github.com/kubernetes/kubernetes/pull/56460)
567
568* [k8s.io/apimachinery] YAMLDecoder Read can now return the number of bytes read.
569
570    * [https://github.com/kubernetes/kubernetes/pull/57000](https://github.com/kubernetes/kubernetes/pull/57000)
571
572* [k8s.io/apimachinery] YAMLDecoder Read now tracks rest of buffer on `io.ErrShortBuffer`.
573
574    * [https://github.com/kubernetes/kubernetes/pull/58817](https://github.com/kubernetes/kubernetes/pull/58817)
575
576* [k8s.io/apimachinery] Prompt required merge key in the error message while applying a strategic merge patch.
577
578    * [https://github.com/kubernetes/kubernetes/pull/57854](https://github.com/kubernetes/kubernetes/pull/57854)
579
580# v6.0.0
581
582**Breaking Changes:**
583
584* If you upgrade your client-go libs and use the `AppsV1() or Apps()` interface, please note that the default garbage collection behavior is changed.
585
586    * [https://github.com/kubernetes/kubernetes/pull/55148](https://github.com/kubernetes/kubernetes/pull/55148)
587
588* Swagger 1.2 retriever `DiscoveryClient.SwaggerSchema` was removed from the discovery client
589
590    * [https://github.com/kubernetes/kubernetes/pull/53441](https://github.com/kubernetes/kubernetes/pull/53441)
591
592* Informers got a NewFilteredSharedInformerFactory to e.g. filter by namespace
593
594    * [https://github.com/kubernetes/kubernetes/pull/54660](https://github.com/kubernetes/kubernetes/pull/54660)
595
596* [k8s.io/api] The dynamic admission webhook is split into two kinds, mutating and validating.
597The kinds have changed completely and old code must be ported to `admissionregistration.k8s.io/v1beta1` -
598`MutatingWebhookConfiguration` and `ValidatingWebhookConfiguration`
599
600    * [https://github.com/kubernetes/kubernetes/pull/55282](https://github.com/kubernetes/kubernetes/pull/55282)
601
602* [k8s.io/api] Renamed `core/v1.ScaleIOVolumeSource` to `ScaleIOPersistentVolumeSource`
603
604    * [https://github.com/kubernetes/kubernetes/pull/54013](https://github.com/kubernetes/kubernetes/pull/54013)
605
606* [k8s.io/api] Renamed `core/v1.RBDVolumeSource` to `RBDPersistentVolumeSource`
607
608    * [https://github.com/kubernetes/kubernetes/pull/54302](https://github.com/kubernetes/kubernetes/pull/54302)
609
610* [k8s.io/api] Removed `core/v1.CreatedByAnnotation`
611
612    * [https://github.com/kubernetes/kubernetes/pull/54445](https://github.com/kubernetes/kubernetes/pull/54445)
613
614* [k8s.io/api] Renamed `core/v1.StorageMediumHugepages` to `StorageMediumHugePages`
615
616    * [https://github.com/kubernetes/kubernetes/pull/54748](https://github.com/kubernetes/kubernetes/pull/54748)
617
618* [k8s.io/api] `core/v1.Taint.TimeAdded` became a pointer
619
620   * [https://github.com/kubernetes/kubernetes/pull/43016](https://github.com/kubernetes/kubernetes/pull/43016)
621
622* [k8s.io/api] `core/v1.DefaultHardPodAffinitySymmetricWeight` type changed from int to int32
623
624    * [https://github.com/kubernetes/kubernetes/pull/53850](https://github.com/kubernetes/kubernetes/pull/53850)
625
626* [k8s.io/apimachinery] `ObjectCopier` interface was removed (requires switch to new generators with DeepCopy methods)
627
628    * [https://github.com/kubernetes/kubernetes/pull/53525](https://github.com/kubernetes/kubernetes/pull/53525)
629
630**New Features:**
631
632* Certificate manager was moved from kubelet to `k8s.io/client-go/util/certificates`
633
634   * [https://github.com/kubernetes/kubernetes/pull/49654](https://github.com/kubernetes/kubernetes/pull/49654)
635
636* [k8s.io/api] Workloads api types are promoted to `apps/v1` version
637
638    * [https://github.com/kubernetes/kubernetes/pull/53679](https://github.com/kubernetes/kubernetes/pull/53679)
639
640* [k8s.io/api] Added `storage.k8s.io/v1alpha1` API group
641
642    * [https://github.com/kubernetes/kubernetes/pull/54463](https://github.com/kubernetes/kubernetes/pull/54463)
643
644* [k8s.io/api] Added support for conditions in StatefulSet status
645
646    * [https://github.com/kubernetes/kubernetes/pull/55268](https://github.com/kubernetes/kubernetes/pull/55268)
647
648* [k8s.io/api] Added support for conditions in DaemonSet status
649
650    * [https://github.com/kubernetes/kubernetes/pull/55272](https://github.com/kubernetes/kubernetes/pull/55272)
651
652* [k8s.io/apimachinery] Added polymorphic scale client in `k8s.io/client-go/scale`, which supports scaling of resources in arbitrary API groups
653
654    * [https://github.com/kubernetes/kubernetes/pull/53743](https://github.com/kubernetes/kubernetes/pull/53743)
655
656* [k8s.io/apimachinery] `meta.MetadataAccessor` got API chunking support
657
658    * [https://github.com/kubernetes/kubernetes/pull/53768](https://github.com/kubernetes/kubernetes/pull/53768)
659
660* [k8s.io/apimachinery] `unstructured.Unstructured` got getters and setters
661
662    * [https://github.com/kubernetes/kubernetes/pull/51940](https://github.com/kubernetes/kubernetes/pull/51940)
663
664**Bug fixes and Improvements:**
665
666* The body in glog output is not truncated with log level 10
667
668    * [https://github.com/kubernetes/kubernetes/pull/54801](https://github.com/kubernetes/kubernetes/pull/54801)
669
670* [k8s.io/api] Unset `creationTimestamp` field is output as null if encoded from an unstructured object
671
672    * [https://github.com/kubernetes/kubernetes/pull/53464](https://github.com/kubernetes/kubernetes/pull/53464)
673
674* [k8s.io/apimachinery] Redirect behavior is restored for proxy subresources
675
676    * [https://github.com/kubernetes/kubernetes/pull/52933](https://github.com/kubernetes/kubernetes/pull/52933)
677
678* [k8s.io/apimachinery] Random string generation functions are optimized
679
680    * [https://github.com/kubernetes/kubernetes/pull/53720](https://github.com/kubernetes/kubernetes/pull/53720)
681
682# v5.0.1
683
684Bug fix: picked up a security fix [kubernetes/kubernetes#53443](https://github.com/kubernetes/kubernetes/pull/53443) for `PodSecurityPolicy`.
685
686# v5.0.0
687
688**New features:**
689
690* Added paging support
691
692   * [https://github.com/kubernetes/kubernetes/pull/51876](https://github.com/kubernetes/kubernetes/pull/51876)
693
694* Added support for client-side spam filtering of events
695
696   * [https://github.com/kubernetes/kubernetes/pull/47367](https://github.com/kubernetes/kubernetes/pull/47367)
697
698* Added support for http etag and caching
699
700   * [https://github.com/kubernetes/kubernetes/pull/50404](https://github.com/kubernetes/kubernetes/pull/50404)
701
702* Added priority queue support to informer cache
703
704   * [https://github.com/kubernetes/kubernetes/pull/49752](https://github.com/kubernetes/kubernetes/pull/49752)
705
706* Added openstack auth provider
707
708   * [https://github.com/kubernetes/kubernetes/pull/39587](https://github.com/kubernetes/kubernetes/pull/39587)
709
710* Added metrics for checking reflector health
711
712   * [https://github.com/kubernetes/kubernetes/pull/48224](https://github.com/kubernetes/kubernetes/pull/48224)
713
714* Client-go now includes the leaderelection package
715
716   * [https://github.com/kubernetes/kubernetes/pull/39173](https://github.com/kubernetes/kubernetes/pull/39173)
717
718**API changes:**
719
720* Promoted Autoscaling v2alpha1 to v2beta1
721
722   * [https://github.com/kubernetes/kubernetes/pull/50708](https://github.com/kubernetes/kubernetes/pull/50708)
723
724* Promoted CronJobs to batch/v1beta1
725
726   * [https://github.com/kubernetes/kubernetes/pull/41901](https://github.com/kubernetes/kubernetes/pull/41901)
727
728* Promoted rbac.authorization.k8s.io/v1beta1 to rbac.authorization.k8s.io/v1
729
730   * [https://github.com/kubernetes/kubernetes/pull/49642](https://github.com/kubernetes/kubernetes/pull/49642)
731
732* Added a new API version apps/v1beta2
733
734   * [https://github.com/kubernetes/kubernetes/pull/48746](https://github.com/kubernetes/kubernetes/pull/48746)
735
736* Added a new API version scheduling/v1alpha1
737
738   * [https://github.com/kubernetes/kubernetes/pull/48377](https://github.com/kubernetes/kubernetes/pull/48377)
739
740**Breaking changes:**
741
742* Moved pkg/api and pkg/apis to [k8s.io/api](https://github.com/kubernetes/api). Other kubernetes repositories also import types from there, so they are composable with client-go.
743
744* Removed helper functions in pkg/api and pkg/apis. They are planned to be exported in other repos. The issue is tracked [here](https://github.com/kubernetes/kubernetes/issues/48209#issuecomment-314537745). During the transition, you'll have to copy the helper functions to your projects.
745
746* The discovery client now fetches the protobuf encoded OpenAPI schema and returns `openapi_v2.Document`
747
748   * [https://github.com/kubernetes/kubernetes/pull/46803](https://github.com/kubernetes/kubernetes/pull/46803)
749
750* Enforced explicit references to API group client interfaces in clientsets to avoid ambiguity.
751
752   * [https://github.com/kubernetes/kubernetes/pull/49370](https://github.com/kubernetes/kubernetes/pull/49370)
753
754* The generic RESTClient type (`k8s.io/client-go/rest`) no longer exposes `LabelSelectorParam` or `FieldSelectorParam` methods - use `VersionedParams` with `metav1.ListOptions` instead. The `UintParam` method has been removed. The `timeout` parameter will no longer cause an error when using `Param()`.
755
756   * [https://github.com/kubernetes/kubernetes/pull/48991](https://github.com/kubernetes/kubernetes/pull/48991)
757
758# v4.0.0
759
760No significant changes since v4.0.0-beta.0.
761
762# v4.0.0-beta.0
763
764**New features:**
765
766* Added OpenAPISchema support in the discovery client
767
768    * [https://github.com/kubernetes/kubernetes/pull/44531](https://github.com/kubernetes/kubernetes/pull/44531)
769
770* Added mutation cache filter: MutationCache is able to take the result of update operations and stores them in an LRU that can be used to provide a more current view of a requested object.
771
772    * [https://github.com/kubernetes/kubernetes/pull/45838](https://github.com/kubernetes/kubernetes/pull/45838/commits/f88c7725b4f9446c652d160bdcfab7c6201bddea)
773
774* Moved the remotecommand package (used by `kubectl exec/attach`) to client-go
775
776    * [https://github.com/kubernetes/kubernetes/pull/41331](https://github.com/kubernetes/kubernetes/pull/41331)
777
778* Added support for following redirects to the SpdyRoundTripper
779
780    * [https://github.com/kubernetes/kubernetes/pull/44451](https://github.com/kubernetes/kubernetes/pull/44451)
781
782* Added Azure Active Directory plugin
783
784    * [https://github.com/kubernetes/kubernetes/pull/43987](https://github.com/kubernetes/kubernetes/pull/43987)
785
786**Usability improvements:**
787
788* Added several new examples and reorganized client-go/examples
789
790    * [Related PRs](https://github.com/kubernetes/kubernetes/commits/release-1.7/staging/src/k8s.io/client-go/examples)
791
792**API changes:**
793
794* Added networking.k8s.io/v1 API
795
796    * [https://github.com/kubernetes/kubernetes/pull/39164](https://github.com/kubernetes/kubernetes/pull/39164)
797
798* ControllerRevision type added for StatefulSet and DaemonSet history.
799
800    * [https://github.com/kubernetes/kubernetes/pull/45867](https://github.com/kubernetes/kubernetes/pull/45867)
801
802* Added support for initializers
803
804    * [https://github.com/kubernetes/kubernetes/pull/38058](https://github.com/kubernetes/kubernetes/pull/38058)
805
806* Added admissionregistration.k8s.io/v1alpha1 API
807
808    * [https://github.com/kubernetes/kubernetes/pull/46294](https://github.com/kubernetes/kubernetes/pull/46294)
809
810**Breaking changes:**
811
812* Moved client-go/util/clock to apimachinery/pkg/util/clock
813
814    * [https://github.com/kubernetes/kubernetes/pull/45933](https://github.com/kubernetes/kubernetes/pull/45933/commits/8013212db54e95050c622675c6706cce5de42b45)
815
816* Some [API helpers](https://github.com/kubernetes/client-go/blob/release-3.0/pkg/api/helpers.go) were removed.
817
818* Dynamic client takes GetOptions as an input parameter
819
820    * [https://github.com/kubernetes/kubernetes/pull/47251](https://github.com/kubernetes/kubernetes/pull/47251)
821
822**Bug fixes:**
823
824* PortForwarder: don't log an error if net.Listen fails. [https://github.com/kubernetes/kubernetes/pull/44636](https://github.com/kubernetes/kubernetes/pull/44636)
825
826* oidc auth plugin not to override the Auth header if it's already exits. [https://github.com/kubernetes/kubernetes/pull/45529](https://github.com/kubernetes/kubernetes/pull/45529)
827
828* The --namespace flag is now honored for in-cluster clients that have an empty configuration. [https://github.com/kubernetes/kubernetes/pull/46299](https://github.com/kubernetes/kubernetes/pull/46299)
829
830* GCP auth plugin no longer overwrites existing Authorization headers. [https://github.com/kubernetes/kubernetes/pull/45575](https://github.com/kubernetes/kubernetes/pull/45575)
831
832# v3.0.0
833
834Bug fixes:
835* Use OS-specific libs when computing client User-Agent in kubectl, etc. (https://github.com/kubernetes/kubernetes/pull/44423)
836* kubectl commands run inside a pod using a kubeconfig file now use the namespace specified in the kubeconfig file, instead of using the pod namespace. If no kubeconfig file is used, or the kubeconfig does not specify a namespace, the pod namespace is still used as a fallback. (https://github.com/kubernetes/kubernetes/pull/44570)
837* Restored the ability of kubectl running inside a pod to consume resource files specifying a different namespace than the one the pod is running in. (https://github.com/kubernetes/kubernetes/pull/44862)
838
839# v3.0.0-beta.0
840
841* Added dependency on k8s.io/apimachinery. The impacts include changing import path of API objects like `ListOptions` from `k8s.io/client-go/pkg/api/v1` to `k8s.io/apimachinery/pkg/apis/meta/v1`.
842* Added generated listers (listers/) and informers (informers/)
843* Kubernetes API changes:
844  * Added client support for:
845    * authentication/v1
846    * authorization/v1
847    * autoscaling/v2alpha1
848    * rbac/v1beta1
849    * settings/v1alpha1
850    * storage/v1
851  * Changed client support for:
852    * certificates from v1alpha1 to v1beta1
853    * policy from v1alpha1 to v1beta1
854  * Deleted client support for:
855    * extensions/v1beta1#Job
856* CHANGED: pass typed options to dynamic client (https://github.com/kubernetes/kubernetes/pull/41887)
857
858# v2.0.0
859
860* Included bug fixes in k8s.io/kuberentes release-1.5 branch, up to commit
861  bde8578d9675129b7a2aa08f1b825ec6cc0f3420
862
863# v2.0.0-alpha.1
864
865* Removed top-level version folder (e.g., 1.4 and 1.5), switching to maintaining separate versions
866  in separate branches.
867* Clientset supported multiple versions per API group
868* Added ThirdPartyResources example
869* Kubernetes API changes
870  * Apps API group graduated to v1beta1
871  * Policy API group graduated to v1beta1
872  * Added support for batch/v2alpha1/cronjob
873  * Renamed PetSet to StatefulSet
874
875
876# v1.5.0
877
878* Included the auth plugin (https://github.com/kubernetes/kubernetes/pull/33334)
879* Added timeout field to RESTClient config (https://github.com/kubernetes/kubernetes/pull/33958)
880