diff --git a/roadmap-2021.md b/roadmap-2021.md new file mode 100644 index 000000000..24f5c80cc --- /dev/null +++ b/roadmap-2021.md @@ -0,0 +1,119 @@ +# Kustomize roadmap 2021 Q3/4 + +Presented at the June 2, 2021 SIG-CLI meeting: [recording](https://youtu.be/YUNSIxWlOPA) + +kustomize maintainers: @knverey, @monopole + +[Objective: Improve contributor community](#objective-improve-contributor-community) + +[Objective: Improve end-user experience](#objective-improve-end-user-experience) + +[Objective: Improve extension experience](#objective-improve-extension-experience) + + + +## Objective: Improve contributor community + +**WHO: End user who also contributes source code.** + +- Publish (this) roadmap. +- Release **sigs.k8s.io/kustomize/api** **v1.0.0** ([PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/5)) + - [Fewer public packages](https://github.com/kubernetes-sigs/kustomize/issues/3942): + - builtins (generated code from legacy plugins): Internal + - hasher (for secret and configmap generation): Internal, or maybe kyaml + - ifc (single file with interfaces): Internal except maybe KustHasher and Validator + - Image (utils for parsing image field): Move to image transformer + - konfig: internalkrusty: keep external but rename it to e.g. “build” or “runner” + - kv: internal + - loader: internal + - provenance: probably needs to stay external for the linker, but confirm + - provider: internal + - resmap: needs to stay external as long as the go plugins exist + - testutils: try to make internal, but not a big deal + - [Vendor all transitive deps](https://github.com/kubernetes-sigs/kustomize/issues/3706). + Since kustomize is in kubectl, we must do as kubectl does to manage deps, exposing new transitive deps in code review. + - [Remove starlark dependencies](https://github.com/kubernetes-sigs/kustomize/issues/3943) (but make it possible to re-enable via injection) +- **Kustomization v1 (also end-user impact)** ([PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/12)) + - [Deprecate `vars` field](https://github.com/kubernetes-sigs/kustomize/issues/2052). Allowed but no longer honored. This includes: + - merging and documenting the [ReplacementTransformer](https://github.com/kubernetes-sigs/kustomize/issues/3492) + - [supporting vars→replacements migration in `kustomize edit fix`](https://github.com/kubernetes-sigs/kustomize/issues/3849), with documentation + - emitting warnings on stderr pointing users to the migration plan + - [Deprecate `crds` field](https://github.com/kubernetes-sigs/kustomize/issues/3944) with migration instructions to “openapi" + - [Add `reorder` field](https://github.com/kubernetes-sigs/kustomize/issues/3913). Default should be FIFO and legacy should also be supported (could add alphabetic and custom sort support eventually). Replaces -reorder flag. + - [Consider deprecating `configurations` field](https://github.com/kubernetes-sigs/kustomize/issues/3945) (old, pre-plugin, pre-openapi global configuration) +- Improve contributor documentation + - Clarify [contributor docs](https://kubectl.docs.kubernetes.io/contributing/kustomize/features/) regarding when discussions should happen on issues vs. brought to a SIG meeting + - [Add a top-level ARCHITECTURE.md document](https://github.com/kubernetes-sigs/kustomize/pull/3924). + - [Improve docs for kyaml libraries](https://github.com/kubernetes-sigs/kustomize/issues/3950), especially by adding examples. + - [Instructions to upgrade kustomize-in-kubectl](https://github.com/kubernetes-sigs/kustomize/issues/3951) (how to make a PR like [this one](https://github.com/kubernetes/kubernetes/pull/101120)). The description of that PR contains the instructions that worked on that particular date. Let this happen frequently +- [Improve the release process](https://github.com/kubernetes-sigs/kustomize/issues/3952) to support regular biweekly releases [PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/7) + - More automation - it has toil because of the multiple modules. + - More maintainers with authorization to do releases (e.g. create branches, delete mistake branches, move tags, trigger builds, etc.). + - Include an upgrade PR to kubectl in the release process. + - Send kustomize CLI version number into kubectl ([kubectl issue](https://github.com/kubernetes/kubectl/issues/797) / [kustomize issue](https://github.com/kubernetes-sigs/kustomize/issues/1424)) +- Project administration + - DONE Clean up Kustomize-related [KEPs](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cli) to reflect current status + - DONE Onboard Kustomize repo to SIG-CLI’s Triage Party for bug scrubs + - [Rename master branch to main](https://github.com/kubernetes-sigs/kustomize/issues/3954) + + + +## Objective: Improve end-user experience + +**WHO: End user that wants kustomize build artifacts (binaries, containers).** + +- Improve end-user documentation [PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/9) + - Easily discovered [tutorials](https://github.com/kubernetes-sigs/kustomize/issues/3973) for folks who just want to get the job done. + Implicit best practice recommendation. + - Usage [tutorial](https://github.com/kubernetes-sigs/kustomize/issues/3973) videos + - Clear explanation of differing capabilities of kustomize standalone vs. kustomize in kubectl. [Document kubectl kustomize integration #3951](https://github.com/kubernetes-sigs/kustomize/issues/3951) + - [The kustomize doc site should pull examples from the kustomize repo](https://github.com/kubernetes-sigs/kustomize/issues/3974) +- [Telemetry to guide investment decisions](https://github.com/kubernetes-sigs/kustomize/issues/3941) ([PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/13)) + - Idea: Resurrect "crawler" to gather stats on popularity of features so we know where to focus. + - Idea: Allow opt-in to build data (Kustomize file sent to some server at build time) + - A battery of [Go benchmark tests](https://github.com/kubernetes-sigs/kustomize/issues/3248) to monitor performance. We've had reports of performance regression, but no measures *in-repo*. +- **kustomize cli v5** ([PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/14)) + - [Indentation changes from go-yaml](https://github.com/kubernetes-sigs/kustomize/issues/3946), if we cannot prevent them in kubectl kustomize. (also related to a [kyaml feature request](https://github.com/kubernetes-sigs/kustomize/issues/3559)) + - [Drop the `--reorder` flag](https://github.com/kubernetes-sigs/kustomize/issues/3947) + - [Decide what to do with `kustomize cfg`](https://github.com/kubernetes-sigs/kustomize/issues/3953) + - Drop 'cfg create setter' and 'cfg set' and delete setter code from Kustomize (it lives in cmd/config). + - Keep the cfg read-only commands: grep, cat, tree. + - The --enable-**alpha**-plugins flag will remain in this version: this only changes when plugins graduate. +- Features + - [Kustomize Components KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cli/1802-kustomize-components) + - Needs end-user docs + - [OpenAPI KEP](https://github.com/kubernetes-sigs/kustomize/issues/3723) + - Should deprecate[ the existing `crds` field](https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/crds/) + - [Binary releases for M1 (darwin_arm64)](https://github.com/kubernetes-sigs/kustomize/issues/3736) + - [confusion around namespace replacement](https://github.com/kubernetes-sigs/kustomize/issues/880) - this is the most +1’d feature request and is two years old + - Release version 1.0 of sigs.k8s.io/kustomize/api for incorporating kustomize into other tools, as well as v1 of Kustomization. [see details under Contributor Community] + - git caching scheme (behind a flag) https://github.com/kubernetes-sigs/kustomize/pull/3655 + - hashicorp go-getter support via dependency injection or [external plugin](https://github.com/kubernetes-sigs/kustomize/issues/3585) + + + +## Objective: Improve extension experience + +**WHO: Plugin developers: end users who extend kustomize, but don’t think about internals.** + +- Replace `Resource` fields with annotations so that the data is visible to and survives across KRM function boundaries: + - [Replace Resource.options with annotations #3975](https://github.com/kubernetes-sigs/kustomize/issues/3975) + - [Replace Resource.refBy with annotations #3976](https://github.com/kubernetes-sigs/kustomize/issues/3976) +- Create KEP for plugin [graduation](https://github.com/kubernetes-sigs/kustomize/issues/2721) out of alpha. [PROJECT](https://github.com/kubernetes-sigs/kustomize/projects/15) + Proposals for this KEP: + - Implement the [Composition KEP](https://github.com/kubernetes/enhancements/pull/2300) . + - Deprecation story + - Deprecate shared Go libs. (if you use a Kustomization file that mentioned a plugin that must be loaded as a .so file, it fails). Although these have advantages--notably in terms of execution speed and ease of testing--they aren't portable. + - Deprecate the legacy path lookup exec plugin style in favor of the KRM style that also already exists. + - Add deprecation warnings if someone is using legacy plugins. See if we get complaints. Upon removal, add a fix command if feasible or at minimum a pointer to migration docs. + - Create a roadmap for plugin inclusion in kustomize-in-kubectl, or explicitly document that plugins will never be included (and why). + - Determine whether plugins need to be permanently gated with a flag. Remove the existing flag, and replace it with a non-alpha flag if necessary. + - Deprecate KRM plugin configuration options that promote violations of Kustomize’s policy that everything required for a build should be committed (no side-effects from env, cli flags, etc). All plugin config should be in the KRM config object for the plugin. + - Starlark plugins: Deprecate generic URL download for starlark plugins, replacing it with git-specific functionality in line with Kustomization’s own git URL support. Subject the relative path to loader restrictions. + - Container plugins: Deprecate network access, storage mount and env options. + - Exec plugins: Subject the exec path to loader restrictions. + - Move KRM plugin provider specification from an annotation to a reserved field. + - Add support for content-addressable OCI artifact storage for starlark and exec plugin providers. + - Implement a Catalog KRM resource that uses [OCI Artifacts](https://github.com/opencontainers/artifacts) ([maybe](https://jzelinskie.com/posts/oci-artifacts/)) to improve plugin distribution and enable end users to bypass specifying explicit plugin provider versions in their KRM plugin configs. This likely deserves a KEP on its own. + - Develop a streamlined contribution process for new “builtin” functionality, i.e. built-in transformers that essentially wrap kyaml filters. +- Add extensive docs, tests and examples for all plugin mechanisms that will remain supported after graduation.