From a2c3fec8a3b00edfad1edc205778c81588a9ebf5 Mon Sep 17 00:00:00 2001 From: Han Kang Date: Tue, 30 Mar 2021 14:50:47 -0700 Subject: [PATCH 1/8] add metrics stability blog post --- .../2021-03-30-metrics-stability-hits-ga.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md new file mode 100644 index 0000000000000..ab9559123bfd8 --- /dev/null +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md @@ -0,0 +1,78 @@ +--- +layout: blog +title: 'Kubernetes 1.21: Metrics Stability hits GA' +date: 2021-03-30 +slug: kubernetes-release-1.21-metrics-stability-ga +--- + +**Authors**: Han Kang, Google & Elana Hashman, Red Hat + +Kubernetes 1.21 marks the graduation of the metrics stability framework and along with it, the first officially supported stable metrics. Not only do stable metrics come with supportability guarantees, the metrics stability framework brings escape hatches that you can use if you encounter problematic metrics. + +### What are stable metrics and why do we need them? +A stable metric is one which, from a consumption point of view, can be reliably consumed across a number of Kubernetes versions without risk of ingestion failure. + +Metrics stability is an ongoing community concern. Cluster monitoring infrastructure often assumes the stability of some control plane metrics, so we have introduced a mechanism for versioning metrics as a proper API, with stability guarantees around a formal metrics deprecation process. + +### What are the stability levels for metrics? + +Metrics can currently have one of two stability levels: alpha or stable. + +_Alpha metrics_ have no stability guarantees; as such they can be modified or deleted at any time. At this time, all Kubernetes metrics implicitly fall into this category. + +_Stable metrics_ can be guaranteed to not change, except that the metric may become marked deprecated for a future Kubernetes version. By not change, we mean three things: + +1. the metric itself will not be deleted or renamed +2. the type of metric will not be modified +3. no labels can be added or removed from this metric + +From an ingestion point of view, it is backwards-compatible to add or remove possible values for labels which already do exist, but not labels themselves. Therefore, adding or removing values from an existing label is permitted. Stable metrics can also be marked as deprecated for a future Kubernetes version, since this is tracked in a metadata field and does not actually change the metric itself. + +Removing or adding labels from stable metrics is not permitted. In order to add or remove a label from an existing stable metric, one would have to introduce a new metric and deprecate the stable one; otherwise this would violate compatibility agreements. + + +#### How are metrics deprecated? + +While deprecation policies only affect stability guarantees for stable metrics (and not alpha ones), deprecation information may be optionally provided on alpha metrics to help component owners inform users of future intent and assist with transition plans. + +A stable metric undergoing the deprecation process signals that the metric will eventually be deleted. The metrics deprecation lifecycle looks roughly like this (with each stage representing a Kubernetes release): + +Stable metric -> Deprecated metric -> Hidden metric -> Deletion + +_Deprecated metrics_ have the same stability guarantees of their stable counterparts. If a stable metric is deprecated, then a deprecated stable metric is guaranteed to not change. When deprecating a stable metric, a future Kubernetes release is specified as the point from which the metric will be considered deprecated. + +Deprecated metrics will have their description text prefixed with a deprecation notice string “(Deprecated from x.y)” and a warning log will be emitted during metric registration, in the spirit of the official Kubernetes deprecation policy. + +Like their stable metric counterparts, deprecated metrics will be automatically registered to the metrics endpoint. On a subsequent release (when the metric's deprecatedVersion is equal to _current\_kubernetes\_version - 4_)), a deprecated metric will become a _hidden_ metric. _Hidden metrics_ are not automatically registered, and hence are hidden by default from end users. These hidden metrics can be explicitly re-enabled for one release after they reach the hidden state, to provide a migration path for cluster operators. + + +#### As an owner of a Kubernetes component, how do I add stable metrics? + +During metric instantiation, stability can be specified by setting the metadata field, StabilityLevel, to “Stable”. When a StabilityLevel is not explicitly set, metrics default to “Alpha” stability. Note that metrics which have fields determined at runtime cannot be marked as Stable. Stable metrics will be detected during static analysis during the pre-commit phase, and must be reviewed by sig-instrumentation. + +```golang +var metricDefinition = kubemetrics.CounterOpts{ + Name: "some_metric", + Help: "some description", + StabilityLevel: kubemetrics.STABLE, +} +``` +For more examples of setting metrics stability and deprecation, see the [Metrics Stability KEP](http://bit.ly/metrics-stability). + + +### How do I get involved? + +This project, like all of Kubernetes, is the result of hard work by many contributors from diverse backgrounds working together. +We offer a huge thank you to all the contributors in Kubernetes community who helped review the design and implementation of the project, including but not limited to the following: + +- Han Kang (logicalhan) +- Frederic Branczyk (brancz) +- Marek Siarkowicz (serathius) +- Elana Hashman (ehashman) +- Solly Ross (DirectXMan12) +- Stefan Schimanski (sttts) +- David Ashpole (dashpole) +- Yuchen Zhou (yoyinzyc) +- Yu Yi (erain) + +If you’re interested in getting involved with the design and development of instrumentation or any part of the Kubernetes metrics system, join the [Kubernetes Instrumentation Special Interest Group (SIG)](https://github.com/kubernetes/community/tree/master/sig-instrumentation). We’re rapidly growing and always welcome new contributors. From f2737c2e23a0d486e7c768636c0a39ae0b3b9768 Mon Sep 17 00:00:00 2001 From: Han Kang Date: Thu, 1 Apr 2021 10:00:55 -0700 Subject: [PATCH 2/8] Update content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md Co-authored-by: Tim Bannister --- content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md index ab9559123bfd8..14186cc5f8139 100644 --- a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md @@ -5,7 +5,7 @@ date: 2021-03-30 slug: kubernetes-release-1.21-metrics-stability-ga --- -**Authors**: Han Kang, Google & Elana Hashman, Red Hat +**Authors**: Han Kang (Google). Elana Hashman (Red Hat) Kubernetes 1.21 marks the graduation of the metrics stability framework and along with it, the first officially supported stable metrics. Not only do stable metrics come with supportability guarantees, the metrics stability framework brings escape hatches that you can use if you encounter problematic metrics. From fbfa74e49fa6bae017b6331aa0c2130f77b4773a Mon Sep 17 00:00:00 2001 From: Han Kang Date: Thu, 1 Apr 2021 10:00:59 -0700 Subject: [PATCH 3/8] Update content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md Co-authored-by: Tim Bannister --- content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md index 14186cc5f8139..2b65e6a078150 100644 --- a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md @@ -37,7 +37,7 @@ While deprecation policies only affect stability guarantees for stable metrics ( A stable metric undergoing the deprecation process signals that the metric will eventually be deleted. The metrics deprecation lifecycle looks roughly like this (with each stage representing a Kubernetes release): -Stable metric -> Deprecated metric -> Hidden metric -> Deletion +Stable metric → Deprecated metric → Hidden metric → Deletion _Deprecated metrics_ have the same stability guarantees of their stable counterparts. If a stable metric is deprecated, then a deprecated stable metric is guaranteed to not change. When deprecating a stable metric, a future Kubernetes release is specified as the point from which the metric will be considered deprecated. From cea082ad1f45b7cabc2b6b4315439b7cfd96ac93 Mon Sep 17 00:00:00 2001 From: Han Kang Date: Thu, 1 Apr 2021 10:36:27 -0700 Subject: [PATCH 4/8] add diagram for metric lifecycle --- .../2021-03-30-metrics-stability-hits-ga.md | 2 +- .../lifecycle-metric.png | Bin 0 -> 39548 bytes 2 files changed, 1 insertion(+), 1 deletion(-) rename content/en/blog/_posts/{ => 2021-03-30-metrics-stability-ga}/2021-03-30-metrics-stability-hits-ga.md (98%) create mode 100644 content/en/blog/_posts/2021-03-30-metrics-stability-ga/lifecycle-metric.png diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md similarity index 98% rename from content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md rename to content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md index 2b65e6a078150..5ba84acfe9c42 100644 --- a/content/en/blog/_posts/2021-03-30-metrics-stability-hits-ga.md +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md @@ -37,7 +37,7 @@ While deprecation policies only affect stability guarantees for stable metrics ( A stable metric undergoing the deprecation process signals that the metric will eventually be deleted. The metrics deprecation lifecycle looks roughly like this (with each stage representing a Kubernetes release): -Stable metric → Deprecated metric → Hidden metric → Deletion +![Stable metric → Deprecated metric → Hidden metric → Deletion](lifecycle-metric.png) _Deprecated metrics_ have the same stability guarantees of their stable counterparts. If a stable metric is deprecated, then a deprecated stable metric is guaranteed to not change. When deprecating a stable metric, a future Kubernetes release is specified as the point from which the metric will be considered deprecated. diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/lifecycle-metric.png b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/lifecycle-metric.png new file mode 100644 index 0000000000000000000000000000000000000000..7618a98c5c7c67cec224fcdc83b05054cd7a7d52 GIT binary patch literal 39548 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 Date: Mon, 5 Apr 2021 12:41:41 -0700 Subject: [PATCH 5/8] add link to stable metrics list --- .../2021-03-30-metrics-stability-hits-ga.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md index 5ba84acfe9c42..93f58803233aa 100644 --- a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md @@ -9,6 +9,8 @@ slug: kubernetes-release-1.21-metrics-stability-ga Kubernetes 1.21 marks the graduation of the metrics stability framework and along with it, the first officially supported stable metrics. Not only do stable metrics come with supportability guarantees, the metrics stability framework brings escape hatches that you can use if you encounter problematic metrics. +See the list of [stable Kubernetes metrics here](https://github.com/kubernetes/kubernetes/blob/master/test/instrumentation/testdata/stable-metrics-list.yaml) + ### What are stable metrics and why do we need them? A stable metric is one which, from a consumption point of view, can be reliably consumed across a number of Kubernetes versions without risk of ingestion failure. From 3088ea1f04de41b5a10065ff839195bb6309c36c Mon Sep 17 00:00:00 2001 From: Han Kang Date: Mon, 5 Apr 2021 12:43:35 -0700 Subject: [PATCH 6/8] Update content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md Co-authored-by: Tim Bannister --- .../2021-03-30-metrics-stability-hits-ga.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md index 93f58803233aa..47a4b1834dd4a 100644 --- a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md @@ -5,7 +5,7 @@ date: 2021-03-30 slug: kubernetes-release-1.21-metrics-stability-ga --- -**Authors**: Han Kang (Google). Elana Hashman (Red Hat) +**Authors**: Han Kang (Google), Elana Hashman (Red Hat) Kubernetes 1.21 marks the graduation of the metrics stability framework and along with it, the first officially supported stable metrics. Not only do stable metrics come with supportability guarantees, the metrics stability framework brings escape hatches that you can use if you encounter problematic metrics. From 1b29725a11a7816812566610f8b758f86c4ee65e Mon Sep 17 00:00:00 2001 From: Han Kang Date: Mon, 12 Apr 2021 13:12:08 -0700 Subject: [PATCH 7/8] Update content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md Co-authored-by: Bob Killen --- .../2021-03-30-metrics-stability-hits-ga.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md index 47a4b1834dd4a..686016e3c5cef 100644 --- a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md +++ b/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md @@ -1,7 +1,7 @@ --- layout: blog title: 'Kubernetes 1.21: Metrics Stability hits GA' -date: 2021-03-30 +date: 2021-04-23 slug: kubernetes-release-1.21-metrics-stability-ga --- From fcbe5a72945aae7ba143c07b8014884a94ad5e83 Mon Sep 17 00:00:00 2001 From: Han Kang Date: Mon, 12 Apr 2021 13:16:15 -0700 Subject: [PATCH 8/8] fix dates on blog --- .../2021-04-23-metrics-stability-hits-ga.md} | 0 .../lifecycle-metric.png | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename content/en/blog/_posts/{2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md => 2021-04-23-metrics-stability-ga/2021-04-23-metrics-stability-hits-ga.md} (100%) rename content/en/blog/_posts/{2021-03-30-metrics-stability-ga => 2021-04-23-metrics-stability-ga}/lifecycle-metric.png (100%) diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md b/content/en/blog/_posts/2021-04-23-metrics-stability-ga/2021-04-23-metrics-stability-hits-ga.md similarity index 100% rename from content/en/blog/_posts/2021-03-30-metrics-stability-ga/2021-03-30-metrics-stability-hits-ga.md rename to content/en/blog/_posts/2021-04-23-metrics-stability-ga/2021-04-23-metrics-stability-hits-ga.md diff --git a/content/en/blog/_posts/2021-03-30-metrics-stability-ga/lifecycle-metric.png b/content/en/blog/_posts/2021-04-23-metrics-stability-ga/lifecycle-metric.png similarity index 100% rename from content/en/blog/_posts/2021-03-30-metrics-stability-ga/lifecycle-metric.png rename to content/en/blog/_posts/2021-04-23-metrics-stability-ga/lifecycle-metric.png