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

Add blog article: Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering #37648

Merged
merged 2 commits into from
Dec 12, 2022

Conversation

andrewsykim
Copy link
Member

Signed-off-by: Andrew Sy Kim [email protected]

Add feature blog placeholder PR for KEP-2086

@k8s-ci-robot k8s-ci-robot added the cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. label Nov 1, 2022
@k8s-ci-robot k8s-ci-robot added area/blog Issues or PRs related to the Kubernetes Blog subproject language/en Issues or PRs related to English language sig/docs Categorizes an issue or PR as relevant to SIG Docs. labels Nov 1, 2022
@andrewsykim andrewsykim changed the title Add placeholder feature blog post for KEP-2086 [WIP] Add placeholder feature blog post for KEP-2086 Nov 1, 2022
@k8s-ci-robot k8s-ci-robot added do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. labels Nov 1, 2022
@netlify
Copy link

netlify bot commented Nov 1, 2022

Pull request preview available for checking

Built without sensitive environment variables

Name Link
🔨 Latest commit 8592fa2
🔍 Latest deploy log https://app.netlify.com/sites/kubernetes-io-main-staging/deploys/639163cd7f525900087c5dc8
😎 Deploy Preview https://deploy-preview-37648--kubernetes-io-main-staging.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

@davidmirror-ops
Copy link

HI @andrewsykim, Comms Shadow for the 1.26 release here. This feature blog is tracked for release, the deadline for submitting the draft is November 29.
Considering editorial review times, the sooner you can send the draft the better.
Any doubt, me and the Comms team are here to help!
cc @fsmunoz

@fsmunoz
Copy link
Contributor

fsmunoz commented Nov 24, 2022

Hello @andrewsykim , we're doing a global reminder about submitting a draft for review for all opted-in feature blogs. If it's at all possible, it is very helpful for the release team to have drafts submitted for review before the hard deadline date, to better plan the release dates and avoid missing out. Thank you!

@andrewsykim
Copy link
Member Author

@fsmunoz I have a working draft in a google doc, I'll have it copied over here sometime today or tomorrow

@k8s-ci-robot k8s-ci-robot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. labels Nov 29, 2022
@andrewsykim andrewsykim changed the title [WIP] Add placeholder feature blog post for KEP-2086 Blog: Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering Nov 29, 2022
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 29, 2022
@fsmunoz
Copy link
Contributor

fsmunoz commented Nov 29, 2022

Thank you @andrewsykim , moving tracking for Ready for Review!

@tengqm
Copy link
Contributor

tengqm commented Nov 29, 2022

/label tide/merge-method-squash

@k8s-ci-robot k8s-ci-robot added the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Nov 29, 2022
@sftim
Copy link
Contributor

sftim commented Nov 29, 2022

/remove-label tide/merge-method-squash

@k8s-ci-robot k8s-ci-robot removed the tide/merge-method-squash Denotes a PR that should be squashed by tide when it merges. label Nov 29, 2022
Copy link
Contributor

@sftim sftim left a comment

Choose a reason for hiding this comment

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

Thanks

/retitle [WIP] Add blog article: Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering

If you have SVG images, or can get them, that's even better.

Comment on lines 10 to 13
Kubernetes v1.26 includes significant advancements in traffic engineering with the graduation of the
`ServiceInternalTrafficPolicy` and `EndpointSliceTerminatingCondition` features to GA and the
`ProxyTerminatingEndpoints` feature to Beta. The combination of these enhancements aim to address
short-comings in traffic engineering today and unlock new capabilities for the future.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
Kubernetes v1.26 includes significant advancements in traffic engineering with the graduation of the
`ServiceInternalTrafficPolicy` and `EndpointSliceTerminatingCondition` features to GA and the
`ProxyTerminatingEndpoints` feature to Beta. The combination of these enhancements aim to address
short-comings in traffic engineering today and unlock new capabilities for the future.
Kubernetes v1.26 includes significant advancements in network traffic engineering with the graduation of
two features (Service internal traffic policy support, and EndpointSlice terminating conditions) GA,
and a third feature (Proxy terminating endpoints) `ProxyTerminatingEndpoints` feature to beta.
The combination of these enhancements aims to address short-comings in traffic engineering that
people face today, and unlock new capabilities for the future.

No need to name the feature gates in the introduction; better to let people know that detail later,
if needed.


## Traffic Loss from Load Balancers During Rolling Updates

Prior to Kubernetes v1.26, [clusters can experience loss of traffic](https://github.com/kubernetes/kubernetes/issues/85643)
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
Prior to Kubernetes v1.26, [clusters can experience loss of traffic](https://github.com/kubernetes/kubernetes/issues/85643)
Prior to Kubernetes v1.26, clusters could experience [loss of traffic](https://github.com/kubernetes/kubernetes/issues/85643)

from Service load balancers during rolling updates when setting the `externalTrafficPolicy` field to `Local`.
There are a lot of moving parts at play here so a quick overview of how Kubernetes manages load balancers might help!

In Kubernetes, you can create a Service with Type=LoadBalancer to expose an application externally with a load balancer.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
In Kubernetes, you can create a Service with Type=LoadBalancer to expose an application externally with a load balancer.
In Kubernetes, you can create a Service with `type: LoadBalancer` to expose an application externally with a load balancer.

YAML is the norm; JSON is a fallback. Type=LoadBalancer isn't part of the API either way (it's more like Golang).

```

Under the hood, Kubernetes allocates a NodePort for the Service, which is then used by kube-proxy to provide a
network data path from the NodePort to the Pod. A controller running in the Kubernetes Control Plane will then
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
network data path from the NodePort to the Pod. A controller running in the Kubernetes Control Plane will then
network data path from the NodePort to the Pod. A controller will then

The boundary is blurred here; you can set service.kubernetes.io/service-proxy-name on a Service and use your own load balancer. We can assume that the thing watching for Services is a controller, though.

add all available Nodes in the cluster to the load balancer’s backend pool, using the designated NodePort for
the Service as the backend target port.

{{< figure src="traffic-engineering-service-load-balancer.png" alt="Figure 1: Overview of Service Load Balancers" >}}
Copy link
Contributor

Choose a reason for hiding this comment

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

(nit) You can caption the image rather than setting the figure name only in the alt attribute.

the more likely this will happen, since the load balancer will take longer to realize that a node is no longer
healthy and unable to accept traffic. This also occurred when Pods started terminating during rolling updates,
specifically when a Node went from N to 0 healthy pods because Kubernetes does not consider terminating Pods
as “Ready”, regardless of their readiness probes.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
as Ready, regardless of their readiness probes.
as `Ready`, regardless of their readiness probes.

Comment on lines 64 to 68
Starting in Kubernetes v1.26, kube-proxy enables the `ProxyTerminatingEndpoints` feature by default, which
adds automatic failover and routing to terminating endpoints in scenarios where the traffic would otherwise
be dropped. More specifically, when there is a rolling update and a Node only contains terminating replicas,
kube-proxy will route traffic to the terminating replicas as long as their readiness probes are passing.
By doing so, kube-proxy provides the external load balancer a window of time to gracefully steer traffic
away from the Node after its next health check probe.
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this right:

Suggested change
Starting in Kubernetes v1.26, kube-proxy enables the `ProxyTerminatingEndpoints` feature by default, which
adds automatic failover and routing to terminating endpoints in scenarios where the traffic would otherwise
be dropped. More specifically, when there is a rolling update and a Node only contains terminating replicas,
kube-proxy will route traffic to the terminating replicas as long as their readiness probes are passing.
By doing so, kube-proxy provides the external load balancer a window of time to gracefully steer traffic
away from the Node after its next health check probe.
Starting in Kubernetes v1.26, kube-proxy defaults to using _proxy terminating endpoints_ behavior. The
kube-proxy spots when traffic arrives that is destined to a terminating endpoint, and avoids some scenarios where the traffic would otherwise be dropped.
More specifically, when there is a rolling update and a Node only contains terminating replicas,
kube-proxy routes traffic to the terminating replicas only as long as their readiness probes are passing.
By doing so, kube-proxy provides the external load balancer a window of time to gracefully steer traffic
away from the Node after its next health check probe.
If there are no local healthy replicas, kube-proxy looks for another node with healthy endpoints and
tries to send the traffic there.

?

I'm worried that readers won't work out how the new behavior is different.

@@ -0,0 +1 @@
PLACEHOLDER
Copy link
Contributor

Choose a reason for hiding this comment

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

Remember to remove this file.

@k8s-ci-robot k8s-ci-robot changed the title Blog: Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering [WIP] Add blog article: Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering Nov 29, 2022
@k8s-ci-robot k8s-ci-robot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 29, 2022
@sftim
Copy link
Contributor

sftim commented Nov 29, 2022

/hold

OK to unhold once this has a publication date assigned.

@k8s-ci-robot k8s-ci-robot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Nov 29, 2022
@k8s-ci-robot k8s-ci-robot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 30, 2022
@k8s-ci-robot k8s-ci-robot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Nov 30, 2022
@fsmunoz
Copy link
Contributor

fsmunoz commented Nov 30, 2022

Hello, Comms Lead for v1.26 here: this Feature Blog PR is confirmed for the post-release Feature Blog series. We will add the publishing date in the next days. Thank you for your work!

@andrewsykim andrewsykim force-pushed the blog-kep-2086 branch 3 times, most recently from c3deeb1 to c466ce9 Compare December 1, 2022 15:45
@sftim
Copy link
Contributor

sftim commented Dec 2, 2022

Let's publish this on the 30th of December.

@fsmunoz
Copy link
Contributor

fsmunoz commented Dec 3, 2022

Hello, Comms Lead for v1.26 here. The publication order and date for the Feature Blog series has been finalised and the tracking board updated (cf. discussion).

The publication date for this article is 30-12-2022 (December 30).

Thanks!

@fsmunoz
Copy link
Contributor

fsmunoz commented Dec 7, 2022

@sftim I think the latest commits addressed the comments/suggestions, would you say this is ready to publish?

@sftim
Copy link
Contributor

sftim commented Dec 7, 2022

/approve
/hold

Don't merge this until v1.26 is released.

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Dec 7, 2022
@sftim
Copy link
Contributor

sftim commented Dec 7, 2022

The publication date in this PR is wrong; it should be 2022-12-30

/approve cancel
I'm happy to approve this otherwise; I think it's good to go.

Between now and publication it would be great to get SVG versions of the images.

@k8s-ci-robot k8s-ci-robot removed the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Dec 7, 2022
@fsmunoz
Copy link
Contributor

fsmunoz commented Dec 7, 2022

Thank you @sftim - @andrewsykim , could you correct the publication date to 2022-12-30 ?

---
layout: blog
title: "Kubernetes v1.26: Advancements in Kubernetes Traffic Engineering"
date: 2022-11-28
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
date: 2022-11-28
date: 2022-12-30

Please also change the path content/en/blog/_posts/2022-11-28-advancements-in-traffic-engineering/index.md to match.

Copy link
Member Author

Choose a reason for hiding this comment

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

Updated publication date, thanks

@sftim
Copy link
Contributor

sftim commented Dec 8, 2022

Thanks

/lgtm
/approve

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Dec 8, 2022
@k8s-ci-robot
Copy link
Contributor

LGTM label has been added.

Git tree hash: 656eea21d1090fec3c7dafee708e02880c174c91

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: sftim

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

The pull request process is described here

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

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Dec 8, 2022
@andrewsykim
Copy link
Member Author

/hold cancel

@k8s-ci-robot k8s-ci-robot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Dec 12, 2022
@k8s-ci-robot k8s-ci-robot merged commit bd3fcac into kubernetes:main Dec 12, 2022
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. area/blog Issues or PRs related to the Kubernetes Blog subproject cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. language/en Issues or PRs related to English language lgtm "Looks good to me", indicates that a PR is ready to be merged. sig/docs Categorizes an issue or PR as relevant to SIG Docs. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
Status: Published
Development

Successfully merging this pull request may close these issues.

6 participants