From 51e36a5aeb229aeaad4c5b1b50f8e3947d658be7 Mon Sep 17 00:00:00 2001 From: Camila Macedo Date: Sat, 30 Mar 2024 12:35:09 +0000 Subject: [PATCH] :book: Add Roadmaps to bring visibility and allow better collaboration --- roadmap/README.md | 57 +++++++++++++++ roadmap/roadmap_2024.md | 149 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 roadmap/README.md create mode 100644 roadmap/roadmap_2024.md diff --git a/roadmap/README.md b/roadmap/README.md new file mode 100644 index 00000000000..ecb3c7ef83f --- /dev/null +++ b/roadmap/README.md @@ -0,0 +1,57 @@ +# Kubebuilder Roadmaps + +**Welcome to the Kubebuilder Roadmaps directory!** + +This space is dedicated to housing the strategic roadmaps for the +Kubebuilder project, organized by year. Each document within this repository +outlines the key initiatives, objectives, and goals for Kubebuilder, reflecting our +commitment to enhancing the development experience within the Kubernetes ecosystem. + +Below, you will find links to the roadmap document for each year. These documents provide insights into the +specific objectives set for the project during that time, the motivation behind each goal, and the progress +made towards achieving them: + +- [Roadmap 2024](roadmap_2024.md) + +## :point_right: New plugins/RFEs to provide integrations within other Projects + +As Kubebuilder evolves, we prioritize a focused project scope and minimal reliance on third-party dependencies, +concentrating on features that bring the most value to our community. + +While recognizing the need for flexibility, we opt not to directly support third-party project integrations. +Instead, we've enhanced Kubebuilder as a library, enabling any project to create compatible plugins. +This approach delegates maintenance to those with the deepest understanding of their projects, fostering higher +quality and community contributions. + +We're here to support you in developing your own Kubebuilder plugins. +For guidance on [Creating Your own plugins](https://kubebuilder.io/plugins/creating-plugins). + +This strategy empowers our users and contributors to innovate, +keeping Kubebuilder streamlined and focused on essential Kubernetes development functionalities. + +**Therefore, our primary objective remains to offer a CLI tool that assists users in developing +solutions for deployment and distribution on Kubernetes clusters using Golang. +We aim to simplify the complexities involved and speed up the development process, +thereby lowering the learning curve.** + +## :steam_locomotive: Contributing + +Your input and contributions are what make Kubebuilder a continually +evolving and improving project. We encourage the community to participate in discussions, +provide feedback on the roadmaps, and contribute to the development efforts. + +If you have suggestions for future objectives or want to get involved +in current initiatives, please refer to our [contributing guidelines](./../CONTRIBUTING.md) +or reach out to the project maintainers. Please, feel free either +to raise new issues and/or Pull Requests against this repository with your +suggestions. + +## :loudspeaker: Stay Tuned + +For the latest updates, discussions, and contributions to the Kubebuilder project, +please join our community channels and forums. Your involvement is crucial for the +sustained growth and success of Kubebuilder. + +**:tada: Thank you for being a part of the Kubebuilder journey.** + +Together, we are building the future of Kubernetes development. diff --git a/roadmap/roadmap_2024.md b/roadmap/roadmap_2024.md new file mode 100644 index 00000000000..8a5bd8fd673 --- /dev/null +++ b/roadmap/roadmap_2024.md @@ -0,0 +1,149 @@ +# Kubebuilder Project Roadmap 2024 + +### **(Major Release for Kubebuilder CLI 4.x)** Removing Deprecated Plugins for Enhanced Maintainability and User Experience + +**Status:** :construction: Work in Progress + +**Objective:** To remove all deprecated plugins from Kubebuilder to improve project maintainability and +enhance user experience. This initiative also includes updating the project documentation to provide clear +and concise information, eliminating any confusion for users. + +**Motivation:** By focusing on removing deprecated plugins—specifically, versions or kinds that can no +longer be supported—we aim to streamline the development process and ensure a higher quality user experience. +Clear and updated documentation will further assist in making development workflows more efficient and less prone to errors. + +**More Info:** [GitHub Discussion #3622](https://github.com/kubernetes-sigs/kubebuilder/discussions/3622) + +--- +### Proposal Pending: Seeking Contributions for kube-rbac-proxy's Role in Default Scaffold + +**Status:** :raised_hands: Open for Discussion/Proposal Pending; Contributions Welcome + +**Objective:** Evaluate potential modifications or the exclusion of [kube-rbac-proxy](https://github.com/brancz/kube-rbac-proxy) +from the default Kubebuilder scaffold in response to deprecations and evolving user requirements. + +**Context:** [kube-rbac-proxy](https://github.com/brancz/kube-rbac-proxy) , a key component for securing Kubebuilder-generated projects, +faces significant deprecations that impact automatic certificate generation. +For more insights into these challenges, see [Issue #3524](https://github.com/kubernetes-sigs/kubebuilder/issues/3524). + +This situation necessitates a reevaluation of its inclusion and potentially prompts users to +adopt alternatives like cert-manager by default. Additionally, the requirement to manually rebuild +[kube-rbac-proxy images—due](https://github.com/kubernetes-sigs/kubebuilder/blob/master/RELEASE.md#to-build-the-kube-rbac-proxy-images) +to its external status from Kubernetes-SIG—places a considerable maintenance +burden on Kubebuilder maintainers. + +**Motivations:** +- Address kube-rbac-proxy breaking changes/deprecations. + - For further information: [Issue #3524 - kube-rbac-proxy warn about deprecation and future breaking changes](https://github.com/kubernetes-sigs/kubebuilder/issues/3524) +- Feedback from the community has highlighted a preference for cert-manager's default integration, aiming security with Prometheus and metrics. + - More info: [GitHub Issue #3524 - Improve scaffolding of ServiceMonitor](https://github.com/kubernetes-sigs/kubebuilder/issues/3657) +- Desire for kube-rbac-proxy to be optional, citing its prescriptive nature. + - See: [Issue #3482 - The kube-rbac-proxy is too opinionated to be opt-out.](https://github.com/kubernetes-sigs/kubebuilder/issues/3482) +- Reduce the maintainability effort to generate the images used by Kubebuilder projects and dependency within third-party solutions. + - Related issues: + - [Issue #1885 - use a NetworkPolicy instead of kube-rbac-proxy](https://github.com/kubernetes-sigs/kubebuilder/issues/1885) + - [Issue #3230 - Migrate away from google.com gcp project kubebuilder](https://github.com/kubernetes-sigs/kubebuilder/issues/3230) + +**Proposed Solutions:** + +- **Making kube-rbac-proxy Optional:** Offering users the option to include kube-rbac-proxy caters to diverse project + requirements and simplifies the transition towards its potential externalization or removal, + reducing future maintenance efforts. + +- **Leveraging NetworkPolicies:** This alternative focuses on minimizing external dependencies by + utilizing Kubernetes-native solutions like NetworkPolicies, in line with our maintenance reduction goals. + +- **Default Enablement of cert-manager:** While not directly addressing the maintenance concerns related to + kube-rbac-proxy, defaulting to cert-manager responds to community feedback and navigates the upcoming deprecations. + This strategy also acknowledges cert-manager's existing role as a prerequisite for webhooks. + +--- +### Transition from Google Cloud Platform (GCP) + +**Status:** :construction: In Progress / (Blocker due challenges faced) + +**Objective:** Shift Kubernetes (k8s) project infrastructure from GCP to shared infrastructures, addressing the need +for image re-tagging and rebuilding without GCP reliance. Move away from the registry `k8s.gcr.io` to `registry.k8s.io`. + +**Context:** The initiative to move away from GCP aligns with the broader k8s project's +goal of utilizing shared infrastructures. This transition is crucial for enhancing +collaboration and reducing dependencies on specific cloud providers. +[Issue #2647](https://github.com/kubernetes/k8s.io/issues/2647) provides more details on the move. + +Currently, Google Cloud is used only: + +- **(Need A)Rebuild and provide the images for kube-rbac-proxy:** + +A particular challenge has been the necessity to rebuild images for the +[kube-rbac-proxy](https://github.com/brancz/kube-rbac-proxy), which is in the process of being +donated to kubernetes-sig. This transition was expected to eliminate the need for +continuous re-tagging and rebuilding of its images to ensure their availability to users. +The configuration for building these images is outlined +[here](https://github.com/kubernetes-sigs/kubebuilder/blob/master/RELEASE.md#to-build-the-kube-rbac-proxy-images). + +- **(Need B) Build and Promote EnvTest binaries**: + +The development of Kubebuilder Tools and EnvTest binaries, +essential for controller tests, represents another area reliant on k8s binaries +traditionally built within GCP environments. Our documentation on building these artifacts is +available [here](https://github.com/kubernetes-sigs/kubebuilder/blob/master/RELEASE.md#to-build-the-kubebuilder-tools-artifacts-required-to-use-env-test). + +**Challenges/Actions and Status:** +- **kube-rbac-proxy Images:** **(Blocked)** Ensuring images are available to users while moving away from GCP. We've been implementing a new recipe for non-GCP image pushing [seen here](https://github.com/kubernetes/test-infra/blob/master/config/jobs/image-pushing/k8s-staging-kubebuilder.yaml). However, we confirmed that does not work because the project is outside from Kubernets-Sig org. +- **EnvTest binaries:** We seek assistance from k8s-infra to know how we could use this shared infrastructures to build those. Maybe an alternative option is to use go-releaser and publish the artifacts via GitHub. + +--- +### Providing Helpers for Project Distribution + +#### Distribution via Kustomize + +**Status:** :white_check_mark: Complete + +As of release ([v3.14.0](https://github.com/kubernetes-sigs/kubebuilder/releases/tag/v3.14.0)), +Kubebuilder includes enhanced support for project distribution. +Users can now scaffold projects with a `build-installer` makefile target. +This improvement enables the straightforward deployment of solutions directly to Kubernetes clusters. +Users can deploy their projects using commands like: + +```shell +kubectl apply -f https://raw.githubusercontent.com//my-project//dist/install.yaml +``` + +This enhancement streamlines the process of getting Kubebuilder projects running on clusters, providing a seamless deployment experience. + +#### (New Optional Plugin) Helm Chart Packaging + +**Status:** :raised_hands: Proposal in Progress; Seeking Contributions + +**Objective:** We aim to introduce a new plugin for Kubebuilder that packages projects as Helm charts, +facilitating easier distribution and integration of solutions within the Kubernetes ecosystem. + +**Motivation:** The growth of the Kubernetes ecosystem underscores the need for flexible and +accessible distribution methods. A Helm chart packaging plugin would simplify the distribution of the solutions +and allow easily integrations with common applications used by administrators. + +**More Info:** For details on this proposal and how to contribute, +see [GitHub Pull Request #3632](https://github.com/kubernetes-sigs/kubebuilder/pull/3632). + +--- +### Updating Scaffolding to Align with the Latest changes of controller-runtime + +**Status:** :raised_hands: Seeking help from the contributors + +**Objective:** Update Kubebuilder's controller scaffolding to align with the latest changes +in controller-runtime, focusing on compatibility and addressing recent updates and deprecations +related to webhooks. + +**Context:** Kubebuilder's plugin system is designed for stability, yet it depends on controller-runtime, +which is evolving rapidly with versions still under 1.0.0. Notable changes and deprecations, +especially around webhooks, necessitate Kubebuilder's alignment with the latest practices +and functionalities of controller-runtime. We need update the Kubebuilder scaffolding, +samples, and documentation. + +**References:** +- [Issue - Deprecations in Controller-Runtime and Impact on Webhooks](https://github.com/kubernetes-sigs/kubebuilder/issues/3721) - An issue detailing the deprecations in controller-runtime that affect Kubebuilder's approach to webhooks. +- [PR - Update to Align with Latest Controller-Runtime Webhook Interface](https://github.com/kubernetes-sigs/kubebuilder/pull/3399) - A pull request aimed at updating Kubebuilder to match controller-runtime's latest webhook interface. +- [PR - Enhancements to Controller Scaffolding for Upcoming Controller-Runtime Changes](https://github.com/kubernetes-sigs/kubebuilder/pull/3723) - A pull request proposing enhancements to Kubebuilder's controller scaffolding in anticipation of upcoming changes in controller-runtime. + +**We encourage the Kubebuilder community to participate in this discussion, offering feedback and contributing ideas +to refine these proposals. Your involvement is crucial in shaping the future of secure and efficient project scaffolding in Kubebuilder.**