You are viewing documentation for Kubernetes version: v1.20

Kubernetes v1.20 documentation is no longer actively maintained. The version you are currently viewing is a static snapshot. For up-to-date documentation, see the latest version.

Enabling EndpointSlices

This page provides an overview of enabling EndpointSlices in Kubernetes.

Before you begin

You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. If you do not already have a cluster, you can create one by using minikube or you can use one of these Kubernetes playgrounds:

To check the version, enter kubectl version.

Introduction

EndpointSlices provide a scalable and extensible alternative to Endpoints in Kubernetes. They build on top of the base of functionality provided by Endpoints and extend that in a scalable way. When Services have a large number (>100) of network endpoints, they will be split into multiple smaller EndpointSlice resources instead of a single large Endpoints resource.

Enabling EndpointSlices

FEATURE STATE: Kubernetes v1.17 [beta]
Note: The EndpointSlice resource was designed to address shortcomings in a earlier resource: Endpoints. Some Kubernetes components and third-party applications continue to use and rely on Endpoints. Whilst that remains the case, EndpointSlices should be seen as an addition to Endpoints in a cluster, not as an outright replacement.

EndpointSlice functionality in Kubernetes is made up of several different components, most are enabled by default:

  • The EndpointSlice API: EndpointSlices are part of the discovery.k8s.io/v1beta1 API. This is beta and enabled by default since Kubernetes 1.17. All components listed below are dependent on this API being enabled.
  • The EndpointSlice Controller: This controller maintains EndpointSlices for Services and the Pods they reference. This is controlled by the EndpointSlice feature gate. It has been enabled by default since Kubernetes 1.18.
  • The EndpointSliceMirroring Controller: This controller mirrors custom Endpoints to EndpointSlices. This is controlled by the EndpointSlice feature gate. It has been enabled by default since Kubernetes 1.19.
  • Kube-Proxy: When kube-proxy is configured to use EndpointSlices, it can support higher numbers of Service endpoints. This is controlled by the EndpointSliceProxying feature gate on Linux and WindowsEndpointSliceProxying on Windows. It has been enabled by default on Linux since Kubernetes 1.19. It is not enabled by default for Windows nodes. To configure kube-proxy to use EndpointSlices on Windows, you can enable the WindowsEndpointSliceProxying feature gate on kube-proxy.

API fields

Some fields in the EndpointSlice API are feature-gated.

  • The EndpointSliceNodeName feature gate controls access to the nodeName field. This is an alpha feature that is disabled by default.
  • The EndpointSliceTerminating feature gate controls access to the serving and terminating condition fields. This is an alpha feature that is disabled by default.

Using EndpointSlices

With EndpointSlices fully enabled in your cluster, you should see corresponding EndpointSlice resources for each Endpoints resource. In addition to supporting existing Endpoints functionality, EndpointSlices will allow for greater scalability and extensibility of network endpoints in your cluster.

What's next

Last modified November 19, 2020 at 6:26 PM PST: Updating EndpointSlice docs for Kubernetes 1.20 (c927e9a57)