Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update module sigs.k8s.io/controller-runtime to v0.15.0 #6847

Merged
merged 15 commits into from
Jun 1, 2023

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented May 23, 2023

This PR updates sigs.k8s.io/controller-runtime from v0.14.6 to v0.15.0 and ECK due to breaking changes brought by this new version.

  • 02d3312 refactoring watches
  • 86c7dd2 refactoring tests with client.Object instead of runtime.Object
  • cdb91cd refactoring webhook validate funcs signature
  • 2d31fe0 remove webhook injections
  • d1246f6 replace deprecated opts.Namespace/cache.MultiNamespacedCacheBuilder by opts.Cache.Namespaces
  • d774495 replace deprecated opts.Port by opts.WebhookServer
  • 4061880 replace deprecated opts.CertDir by opts.WebhookServer.CertDir
  • dd7638a replace deprecated PollImmediate
  • e01d73a add finalizers for deletion
  • 0900742 lint: unused argument
  • 7053253 fix TestReconcileElasticsearch_Reconcile

Release Notes

kubernetes-sigs/controller-runtime

v0.15.0

Compare Source

Controller Runtime v0.15

A note from the maintainers

The following release is probably the largest in the history of the project. Controller Runtime is a foundational piece for almost all controllers and operators and we're aware that breaking changes are never an ask for our users, especially while running production services.

We take breaking changes very seriously and carefully reviewed each one of these changes to improve the codebase, user experience, and future maintainability of the project.

The v0.15 release is a stepping stone towards maturity.

As always, please reach out in Slack in #controller-runtime.

Changes since v0.14.5

⚠️ Breaking Changes

  • Make *http.Client configurable and use/share the same client by default (#​2122)
    • When using the default Manager configuration, no immediate changes are needed.
    • client/apiutil.NewDynamicRESTMapper signature has changed and now requires an *http.Client as parameter.
    • cluster.Cluster interface requires GetHTTPClient() method which must return an already configured, non-nil, *http.Client for the Cluster. When using cluster.New to create Clusters, the client is created internally if not specified as an Options field.
    • cluster.Options.MapperProvider field now requires a *rest.Config and *http.Client.
  • Deprecate Component Configuration config/v1alpha1 types (#​2149, #​2200)
    • The Component Configuration package has been unmaintained for over a year and is no longer actively developed. There are (currently) no plans to revive the package, or provide an alternative.
    • Users should migrate to a custom implementation that sets Manager.Options directly.
    • 👉 Feedback requested: removal of the deprecated types and code is tracked in #​895.
  • Remove dependency injection functions (#​2134, #​2120)
    • The package pkg/inject has been removed, this package contained long deprecated injection functions (like InjectScheme, InjectLogger, InjectConfig, InjectClient, InjectCache, etc.).
    • The runtime injection functionality has been deprecated since Controller Runtime 0.10; all of the above fields can be passed from the Manager to structs or interfaces that need them.
  • Improve builder package capabilities and general UX (#​2135)
    • builder.Builder.Watches signature has changed, it now takes a client.Object instead of a source.Source as first argument.
      • For source.Source, use WatchesRawSource.
    • builder.Builder.WatchesMetadata has been added to simplify watching PartialObjectMetadata objects.
  • Refactor cache.Options, deprecate MultiNamespacedCacheBuilder (#​2157, #​2166)
    • cache.Options.Namespace has been removed in favor of cache.Options.Namespaces, a slice.
    • cache.Options.Resync has been renamed to SyncPeriod.
    • cache.Options.DefaultSelector has been removed and split in two fields:
      • cache.Options.DefaultLabelSelector
      • cache.Options.DefaultFieldSelector
    • cache.Options.DefaultTransform was added to provide a global transform function.
    • cache.Options.UnsafeDisableDeepCopy was added to provide a global toggle to disable DeepCopy of the objects from the cache before returning them to clients.
    • The following [..]ByObject field have been refactored:
      • cache.Options.SelectorsByObject has been removed, use cache.Options.ByObject[Object].Field and cache.Options.ByObject[Object].Label
      • cache.Options.UnsafeDisableDeepCopyByObject has been removed, use cache.Options.ByObject[Object].UnsafeDisableDeepCopy.
      • cache.Options.TransformByObject has been removed, use cache.Options.ByObject[Object].Transform.
    • cache.ObjectAll has been removed. This type was previously used to set selectors or transformation functions for every object, use the newly introduced default global options instead.
  • Add context to EventHandler(s) (#​2139)
    • handler.EventHandler and handler.Funcs interfaces require context.Context as the first parameter for every method.
    • handler.MapFunc signature has changed and now requires a context.Context.
  • Add client.{GroupVersionKindFor, IsObjectNamespaced} (#​2136)
    • The client.Client interface now requires and exposes these helper functions:
      • GroupVersionKindFor(Object) which returns the schema.GroupVersionKind for the object.
      • IsObjectNamespaced(Object) which returns true if the object's GroupVersionKind is namespaced, or false for global ones.
  • Remove DelegatedClient, move all related options in client.New (#​2150)
    • client.NewDelegatingClient constructor and client.NewDelegatingClientInput struct have been removed.
      • The DelegatingClient created a Client backed by a cache, use client.New and set client.Options.Cache to customize the client's caching behavior.
    • cluster.NewClientFunc has been moved to client.NewClientFunc.
    • cluster.ClientOptions has been removed.
    • cluster.DefaultNewClient has been removed.
    • cluster.ClientBuilderWithOptions has been removed.
  • Expose Manager.Cache/Client options, deprecate older options (#​2199, #​2177)
    • manager.Options.Cache is now the preferred way to customize the cache options for the manager.
      • Users can also keep using manager.Options.NewCache, which has now been marked as a low level primitive.
    • manager.Options.Client is now the preferred way to customize the client options for the manager.
      • Users can also keep using manager.Options.NewClient, which has now been marked as a low level primitive.
    • manager.Options.SyncPeriod has been deprecated in favor of manager.Options.Cache.SyncPeriod.
    • manager.Options.Namespace has been deprecated in favor of manager.Options.Cache.Namespaces.
    • manager.Options.DryRunClient has been deprecated in favor of manager.Options.Client.DryRun.
    • manager.Options.ClientDisableCacheFor has been deprecated in favor of manager.Options.Client.Cache.DisableCacheFor.
    • The following webhook server options have been deprecated, use manager.WebhookServer instead.
      • manager.Options.Port
      • manager.Options.Host
      • manager.Options.CertDir
      • manager.Options.TLSOpts
  • Remove cache.BuilderWithOptions (#​2300)
  • Add constructors for webhook/conversion, remove webhook/admission.GetDecoder() (#​2144)
    • There are two set of changes related to the webhooks and how they're exposed. For users using the Manager, there should be minimal to no required changes.
    • webhook/admission/Webhook.GetDecoder() method has been removed, it was unused before and relied on runtime dependency injection.
    • webhook/conversion.Webhook struct has been un-exported. Users should use webhook/conversion.NewWebhookHandler instead.
  • pkg/webhook/admission:
    • Use Result.Message instead of Result.Reason (#​1539)
    • Validator and CustomValidator interfaces have been modified to allow returning warnings (#​2014)
  • Testing: Fake client status handling (#​2259)
    • Added a new WithStatusSubresource option and pre-populating it with
      all in-tree resources that have a status subresource
    • Update and Patch methods now don't change the status for any such
      resource anymore
    • The status clients Update and Patch methods now only change the status
      for any such resource
  • Remove high cardinality metrics (#​2217, #​2298)
    • rest_client_request_latency_seconds
    • rest_client_request_duration_seconds
    • rest_client_request_size_bytes
    • rest_client_response_size_bytes
  • Allow passing a custom webhook server (#​2293, #​2329)
    • The webhook.Server struct is now an interface
    • webhook.NewServer can be used to pass in and customize the default server
  • Flatten fields in controller.Options (#​2307)
  • Update fake client deletionTimestamp behavior (#​2316)
    • The fake client will panic if initialized with an object that has a DeletionTimestamp and no finalizer
    • The fake client will silently ignore a DeletionTimestamp on an object in a Create request, matching the behavior of the kube-apiserver
  • Unexport delegating logger, remove async init (#​2317)
    • log.DelegatingLogSink has been unexported, this logger should never be used on its own, and it's only meant to be used within controller-runtime initialization process.
    • Previously, when the pkg/log package was imported, there was an init function that spawned a goroutine, which set a null logger after 30 seconds. Now this logic has been removed, and instead incorporated into the delegating logger private implementation.
  • Change webhook request received / response written logs to log level 4 (#​2334)
  • Use and offer a single dynamic lazy RESTMapper (#​2116, #​2296)
    • The following options have been removed: WithCustomMapper, WithExperimentalLazyMapper, WithLazyDiscovery, WithLimiter.
    • The DynamicRESTMapperOption type has been removed.

✨ New Features

  • Add cross-version compatibility with client-go 1.27 (#​2223)
  • Introduce pprof server to manager (#​1943)
    • To enable, use Manager.Options.PprofBindAddress.
  • Added interceptor client to intercept calls to a client (#​2248 #​2306)
  • Add reconcile.TerminalError(...) (#​2325)
    • By wrapping an error with the above package-level function, the controller won't retry the request again in an exponential backoff loop.
    • The error is logged, and the controller_runtime_terminal_reconcile_errors_total metric is incremented.

🐛 Bug Fixes

  • Use correct context to cancel "list and watch" & wait for all informers to complete (#​2121)
  • Client: use passed in Cache.DisableFor option (#​2303)
  • Fix race condition in channel source (#​2286)
  • ForceOwnership should work with subresources (#​2257)
  • Fix error string in CacheReader.List (#​2256)
  • Fix a bug in multinamespaced cache implementation (#​2252)
  • Allow lazy restmapper to work with CRDs created at runtime (#​2208)
  • Set DeleteStateUnknown in DeleteEvent when obj is DeletedFinalStateUnknown (#​2212)
  • Allow to set GracefulShutdownTimeout to -1, disabling timeouts (#​2169)
  • pkg/certwatcher: Start should retry for 10s when adding files (#​2160)
  • Don't share error concurrently in test (#​2158)

🌱 Others

  • Improve unstructured serialisation (#​2147)
  • Handle TLSOpts.GetCertificate in webhook (#​2291)
  • Kind source should expose type information on timeout (#​2290)
  • Fakeclient: Add support for evictions (#​2305)
  • envtest: set default webhook options for polling (#​2289)
  • Add client.InNamespace("xyz").AsSelector() (#​2282)
  • Update golanci-lint script (#​2151)
  • Preserve unstructured object GVKs in cache.Options.ByObject (#​2246)
  • Don't call defaultOpts for MultiNamespaceCache twice (#​2234)
  • GVKForObject should handle multiple GVKs in Scheme gracefully (#​2192)
  • verify.sh: verify generate & modules (in CI) (#​2186)
  • code clean for pkg/envtest/server.go (#​2180)
  • Return an error if no httpClient is provided for NewDynamicRESTMapper (#​2178)
  • Use runtime.Unstructured interface instead of Unstructured struct (#​2168)
  • Return an error if no httpClient is provided (#​2164)
  • Return the error from rest.HTTPClientFor instead of hiding it (#​2161)
  • fix default value for cfg.Burst (#​2142)
  • Add more linters (#​2133)
  • Remove pkg/patterns (#​2132)
  • Further cleanup internal/informers (#​2130)
  • Simplify cache.objectTypeForListObject (#​2131)
  • Refactor internal cache/informers map impl (#​2103)
  • client/cache/client_cache.go should be called resources (#​2111)
  • Remove reviewers which are also approvers (#​2109)
  • Use HTTPClient to create the API Reader (#​2163)
  • Update SECURITY_CONTACTS and maintainer list (#​2318)
  • Update builtin webhook paths (#​2319)
  • Make metrics and health probe servers be Runnables (#​2275)
  • Revert: move health probes to runnable (#​2321)
  • Fix comment on MultiNamespaceCache (#​2323)
  • Cleanup webhook logging (#​2326)
  • Add certwatcher callback (#​2301)
  • Fix a bug in multinamespaced cache implementation (#​2288)

🌱 Dependencies

📖 Additionally, there have been 4 contributions to our documentation and book. (#​2203, #​2201, #​2162, #​2170)

Thanks to all our contributors! 😊


Initially generated by Mend Renovate. View repository job log here.

@renovate renovate bot added the >renovate PRs created by or relating to Renovate label May 23, 2023
@thbkrkr thbkrkr self-assigned this May 24, 2023
@thbkrkr
Copy link
Contributor

thbkrkr commented May 24, 2023

The package pkg/inject has been removed, which impacts DynamicWatches/DynamicEnqueueRequest.

Also, handler.EnqueueRequestForOwner is no longer an exported type that we can use directly and has been replaced by:

func EnqueueRequestForOwner(scheme *runtime.Scheme, mapper meta.RESTMapper, ownerType client.Object, opts ...OwnerOption) EventHandler {

https://github.com/kubernetes-sigs/controller-runtime/blob/30eae58f1b984c1b8139dd9b9f68dd2d530ed429/pkg/handler/enqueue_owner.go#L50

Support to add dynamically watchers has been added:

But not to remove them:

Hence, we'll update our own custom implementation for now.

@thbkrkr thbkrkr force-pushed the renovate/sigs.k8s.io-controller-runtime-0.x branch from 5003f3b to e562b22 Compare May 30, 2023 12:04
@thbkrkr thbkrkr force-pushed the renovate/sigs.k8s.io-controller-runtime-0.x branch from e562b22 to 7053253 Compare May 30, 2023 14:15
@elastic elastic deleted a comment from renovate bot May 30, 2023
WithObjects(initObjs...).
WithStatusSubresource(initObjs...).
WithScheme(clientgoscheme.Scheme).
Build()
Copy link
Contributor

@thbkrkr thbkrkr May 30, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's now important to call WithStatusSubresource() explicitly in NewFakeClient().

kubernetes-sigs/controller-runtime#2259

Conditions: commonv1alpha1.Conditions{commonv1alpha1.Condition{Type: "ReconciliationComplete", Status: "True"}},
InProgressOperations: noInProgressOperations,
},
).BuildAndCopy(),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no more a 409/resource conflict in this unit test and the status resource is well updated.

@elastic elastic deleted a comment from renovate bot May 30, 2023
@pebrc
Copy link
Collaborator

pebrc commented May 30, 2023

Need to spend a bit more time tomorrow but so far it looks really good and uncontroversial to me!

@thbkrkr thbkrkr added the v2.9.0 label May 30, 2023
log.Info("Polling for the webhook certificate to be available", "path", keyPath)
err := wait.PollImmediate(interval, timeout, func() (bool, error) {
//nolint:staticcheck
err := wait.PollImmediateWithContext(ctx, interval, timeout, func(_ context.Context) (bool, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PollImmediate is deprecated but there was a mistake and the new functions are also deprecated, hence the nolint:staticcheck to prevent the go linter from complaining.

Copy link
Collaborator

@pebrc pebrc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@thbkrkr
Copy link
Contributor

thbkrkr commented Jun 1, 2023

@elasticmachine run elasticsearch-ci/docs

@thbkrkr thbkrkr merged commit 9959151 into main Jun 1, 2023
@thbkrkr thbkrkr mentioned this pull request Jun 2, 2023
@thbkrkr thbkrkr deleted the renovate/sigs.k8s.io-controller-runtime-0.x branch June 23, 2023 20:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
>renovate PRs created by or relating to Renovate v2.9.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants