Skip to content

Added the experimental features page#3676

Merged
knative-prow-robot merged 6 commits intoknative:mkdocsfrom
slinkydeveloper:experimental-features
Jun 3, 2021
Merged

Added the experimental features page#3676
knative-prow-robot merged 6 commits intoknative:mkdocsfrom
slinkydeveloper:experimental-features

Conversation

@slinkydeveloper
Copy link
Contributor

Signed-off-by: Francesco Guardiani francescoguard@gmail.com

Proposed Changes

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
@google-cla google-cla bot added the cla: yes Indicates the PR's author has signed the CLA. label May 27, 2021
@knative-prow-robot knative-prow-robot added the size/M Denotes a PR that changes 30-99 lines, ignoring generated files. label May 27, 2021
@netlify
Copy link

netlify bot commented May 27, 2021

✔️ Deploy Preview for dev-knative ready!

🔨 Explore the source changes: ac99766

🔍 Inspect the deploy log: https://app.netlify.com/sites/dev-knative/deploys/60b5e20eac2d760008263c61

😎 Browse the preview: https://deploy-preview-3676--dev-knative.netlify.app

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
knative.dev/config-propagation: original
knative.dev/config-category: eventing
data:
new-cool-feature: "false"
Copy link
Contributor

@julz julz May 27, 2021

Choose a reason for hiding this comment

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

This is really a comment on the eventing implementation of this rather than the doc, but Im only noticing this here now :).. Would it make sense (I think the proposal doc said we were going to) to align this with the serving features configmap where the settings are "enabled", "disabled", "allowed"?

Copy link
Contributor Author

@slinkydeveloper slinkydeveloper May 27, 2021

Choose a reason for hiding this comment

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

We talked about that, but we decided to avoid having the opt-in (see the mail thread) features in that same CM (like you have in serving), hence this CM is only about "experimental feature on/off".

In any case, feel free to reply to that mail thread if you have some concrete proposal around it, I see your other comment below about that :). Can we ignore this discussion here for the sake of this PR?

Copy link
Contributor

Choose a reason for hiding this comment

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

FWIW I think some of the serving features also only have "enabled" & "disabled", so I don't think there's a reason we can't align, even if you don't have a need for an "allowed" state yet. Anyway let me go look for the email and reply there, I didn't realise there was a mail thread going on as well as the proposal doc (I've been filtering out stuff tagged [Eventing])

Copy link
Member

Choose a reason for hiding this comment

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

The original doc it had the following clause - I'm surprised after the discussion in the mailing list the doc wasn't updated and comments resolved.

We store in a config map a map of enabled/disabled features. Pretty much the same as Kubernetes Feature Gates or https://github.com/knative/serving/blob/master/pkg/apis/config/features.go

The tri-state is more expressive and allows for users to individually opt into experimental behaviour - in contrast to the operator enabling it for everyone.

This allows for a gradual rollout of features.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The tri-state is more expressive and allows for users to individually opt into experimental behaviour - in contrast to the operator enabling it for everyone.

This was discussed as well both in the doc and in the mailing list: depending on the feature, we're going to decide if we want it opt-in and opt-out by default, but because eventing has plenty of CMs, most of them already namespace scoped, it doesn't make sense to have this ConfigMap too for enabling component features.

apiVersion: v1
kind: ConfigMap
metadata:
name: config-experimental-features
Copy link
Contributor

Choose a reason for hiding this comment

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

ditto that this is really a comment on the implementation not the doc, but making it here because this is where Im seeing it -- could this be config-features to align with the same thing in knative-serving namespace? (I'd say we should rename the serving one, but that would pose a backwards-compat challenge now).

Copy link
Member

@csantanapr csantanapr May 27, 2021

Choose a reason for hiding this comment

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

UX feedback
I think the word “experimental” should not be in any configuration to indicate the level of stability or to indicate that the configuration/feature might get removed

a better approach perhaps would be using docs to indicate this
For example a document comment in the yaml
A message on the command line like when using deprecated features in kubectl, they do this in Kubernetes know and even with colors text yellow to indicate warning
In the actual website docs in both the section explaining how to use the feature and in the Go generate rerefence html

the benefit would be that as the user upgrades from old version to new version, and it happens that the feature is stable and not longer experimental
There is not much work for the administrators to go and update the config in many places or coordinate with others to change the config in many places. Instead he can announce/doc that a new version of Knative is used and that feature X is not longer experimental and now is stable and supported

for Knative to move it out from experimental we don’t modify tests or code.

If the feature is removed from experimental then is a mute point the experience remains the same for that case as oppose feature remaining they have better experience

Copy link
Contributor Author

Choose a reason for hiding this comment

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

So this CM is an entrypoint for people that wants to try out experimental features, and when a feature is stable, the flag won't be here anymore. The name experimental is just to keep it consistent with the Experimental features process.

The CM gets commented too with details about each specific flag, and then this page will host the documentation for each flag.

For example a document comment in the yaml
A message on the command line like when using deprecated features in kubectl, they do this in Kubernetes know and even with colors text yellow to indicate warning
In the actual website docs in both the section explaining how to use the feature and in the Go generate rerefence html

For experimental features adding new fields to CRDs, we don't add them to the schema: https://github.com/knative/eventing/blob/main/docs/experimental-features.md#strategies-to-add-new-apis-for-experimental-features

Copy link
Member

Choose a reason for hiding this comment

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

So this CM is an entrypoint for people that wants to try out experimental features, and when a feature is stable, the flag won't be here anymore.

Sure but like @julz and @csantanapr have pointed out someone coming from serving to enable some functionality will now have a different approach will easily be confused and tripped up.

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
@julz
Copy link
Contributor

julz commented May 31, 2021

/hold to make sure we're all (especially @dprotaso from an alignment with serving api version of this POV) on the same page before merging docs and potentially having people start relying on it

@knative-prow-robot knative-prow-robot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label May 31, 2021
@csantanapr
Copy link
Member

csantanapr commented May 31, 2021

From UX I agree with a tri-state is not that a bad option, but having consistency in the project as “this is how knative handles experimental features” vs having fragmented experiences like Eventing works like x and Serving works like y is not a good UX

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
@slinkydeveloper
Copy link
Contributor Author

slinkydeveloper commented Jun 1, 2021

I've updated the page per knative/eventing#5459, but I didn't added the allowed flag documentation, since we don't have any particular feature today that use it, nor I can think of any we're working on that might use the allowed state.

I suggest we document it once we have a feature that is going to use the allowed state, so we can properly describe why we need it and how to use it. My fear is that describing it now, without having a proper example for it, it will look like just confusing for the user.

@julz
Copy link
Contributor

julz commented Jun 1, 2021

/unhold

@knative-prow-robot knative-prow-robot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Jun 1, 2021
## Experimental features configuration

When installing Eventing, the `config-features` ConfigMap is added to your cluster in the `knative-eventing` namespace.
In order to enable a feature, you just need to add it to the config map and set its value to `"enabled"`.
Copy link
Contributor

Choose a reason for hiding this comment

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

Note: @eric-sap related to the other PR you're doing, it looks like it's both `` and "" 🙂 so "enabled"

Copy link
Contributor

Choose a reason for hiding this comment

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

In this particular case (judging by the new-cool-feature: example text below this sentence) it looks like the quotes are literally supposed to be part of the configmap (as opposed to, say, the metadata.name or namespace, which do not have quotes). I'm unsure as to whether the yaml parser cares one way or the other. I only mention it here because in the config-kafka configmap, there are no fields that require literal double-quotes around them (nor are there examples of such in the document).

Copy link
Contributor Author

Choose a reason for hiding this comment

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

That's my bad, i was using true and false as values before, which needs escapes. #3714

Comment on lines +22 to +34
```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: config-features
namespace: knative-eventing
labels:
eventing.knative.dev/release: devel
knative.dev/config-propagation: original
knative.dev/config-category: eventing
data:
new-cool-feature: "enabled"
```
Copy link
Contributor

Choose a reason for hiding this comment

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

Can you add the kubectl command part as per the style guide for any YAML files

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't know if there's a kubectl counterpart for modifying the config maps...

- Debugging: eventing/debugging/index.md
- Accessing CloudEvent traces: eventing/accessing-traces.md
- Metrics API: eventing/metrics.md
- Experimental Features: eventing/experimental-features.md
Copy link
Contributor

Choose a reason for hiding this comment

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

Should probably go in the admin guide if they all require configmap editing?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

🤷 I see it's the same for serving...

Copy link
Contributor

@abrennan89 abrennan89 left a comment

Choose a reason for hiding this comment

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

Couple of comments

@csantanapr
Copy link
Member

/lgtm
thanks for addressing my comments @slinkydeveloper

@knative-prow-robot knative-prow-robot added the lgtm Indicates that a PR is ready to be merged. label Jun 3, 2021
@knative-prow-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: csantanapr, slinkydeveloper

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@knative-prow-robot knative-prow-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Jun 3, 2021
@knative-prow-robot knative-prow-robot merged commit b40c7df into knative:mkdocs Jun 3, 2021
@slinkydeveloper slinkydeveloper deleted the experimental-features branch June 3, 2021 07:17
@csantanapr
Copy link
Member

don't know why this merged when the PR had a "Request changes" from @abrennan89

@slinkydeveloper
Copy link
Contributor Author

@csantanapr 🤷, I'm addressing the comments in this other PR: #3714

RichardJJG pushed a commit to RichardJJG/docs that referenced this pull request Jun 30, 2021
* Added the experimental features page

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Trailing whitespaces

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Added to the index

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* suggestion by julz

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* suggestion by ashleigh

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Reflected changes of knative/eventing#5459

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
RichardJJG pushed a commit to RichardJJG/docs that referenced this pull request Jul 1, 2021
* Added the experimental features page

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Trailing whitespaces

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Added to the index

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* suggestion by julz

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* suggestion by ashleigh

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>

* Reflected changes of knative/eventing#5459

Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. cla: yes Indicates the PR's author has signed the CLA. lgtm Indicates that a PR is ready to be merged. size/M Denotes a PR that changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants