⎈ k8s knowledge compiler

EndpointSlices [page]deterministic

The EndpointSlice API is the mechanism that Kubernetes uses to let your Service scale to handle large numbers of backends, and allows the cluster to update its list of healthy backends efficiently.

conceptsnetworking

[definition:endpoint-slice]

## EndpointSlice API {#endpointslice-resource}

In Kubernetes, an EndpointSlice contains references to a set of network endpoints. The control plane automatically creates EndpointSlices for any Kubernetes Service that has a [selector](#gloss:selector) specified. These EndpointSlices include references to all the Pods that match the Service selector. EndpointSlices group network endpoints together by unique combinations of IP family, protocol, port number, and Service name. The name of a EndpointSlice object must be a valid [DNS subdomain name](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names).

As an example, here's a sample EndpointSlice object, that's owned by the `example` Kubernetes Service.

```yaml apiVersion: discovery.k8s.io/v1 kind: EndpointSlice metadata: name: example-abc labels: kubernetes.io/service-name: example addressType: IPv4 ports: - name: http protocol: TCP port: 80 endpoints: - addresses: - "10.1.2.3" conditions: ready: true hostname: pod-1 nodeName: node-1 zone: us-west2-a ```

By default, the control plane creates and manages EndpointSlices to have no more than 100 endpoints each. You can configure this with the `--max-endpoints-per-slice` [kube-controller-manager](#gloss:kube-controller-manager) flag, up to a maximum of 1000.

EndpointSlices act as the source of truth for [kube-proxy](#gloss:kube-proxy) when it comes to how to route internal traffic.

### Address types

EndpointSlices support two address types:

* IPv4 * IPv6

Each `EndpointSlice` object represents a specific IP address type. If you have a Service that is available via IPv4 and IPv6, there will be at least two `EndpointSlice` objects (one for IPv4, and one for IPv6).

### Conditions

The EndpointSlice API stores conditions about endpoints that may be useful for consumers. The three conditions are `serving`, `terminating`, and `ready`.

#### Serving

The `serving` condition indicates that the endpoint is currently serving responses, and so it should be used as a target for Service traffic. For endpoints backed by a Pod, this maps to the Pod's `Ready` condition.

#### Terminating

The `terminating` condition indicates that the endpoint is terminating. For endpoints backed by a Pod, this condition is set when the Pod is first deleted (that is, when it receives a deletion timestamp, but most likely before the Pod's containers exit).

Service proxies will normally ignore endpoints that are `terminating`, but they may route traffic to endpoints that are both `serving` and `terminating` if all available endpoints are `terminating`. (This helps to ensure that no Service traffic is lost during rolling updates of the underlying Pods.)

#### Ready

The `ready` condition is essentially a shortcut for checking "`serving` and not `terminating`" (though it will also always be `true` for Services with `spec.publishNotReadyAddresses` set to `true`).

### Topology information {#topology}

Each endpoint within an EndpointSlice can contain relevant topology information. The topology information includes the location of the endpoint and information about the corresponding Node and zone. These are available in the following per endpoint fields on EndpointSlices:

* `nodeName` - The name of the Node this endpoint is on. * `zone` - The zone this endpoint is in.

### Management

Most often, the control plane (specifically, the endpoint slice [controller](#gloss:controller)) creates and manages EndpointSlice objects. There are a variety of other use cases for EndpointSlices, such as service mesh implementations, that could result in other entities or controllers managing additional sets of EndpointSlices.

To ensure that multiple entities can manage EndpointSlices without interfering with each other, Kubernetes defines the [label](#gloss:label) `endpointslice.kubernetes.io/managed-by`, which indicates the entity managing an EndpointSlice. The endpoint sli …(trimmed)

Sources

concepts/services-networking/endpoint-slices.md · docEndpointSlices

Related (17)

references Selectorselector conf=1
references kube-controller-managerkube-controller-manager conf=1
references kube-proxykube-proxy conf=1
references Controllercontroller conf=1
references Labellabel conf=1
defines EndpointSlice conf=1
part_of EndpointSlice API {#endpointslice-resource}describes conf=1
part_of {{% heading "whatsnext" %}}describes conf=1
part_of Address typesdescribes conf=1
part_of Conditionsdescribes conf=1
part_of Topology information {#topology}describes conf=1
part_of Managementdescribes conf=1
part_of Ownershipdescribes conf=1
part_of Distribution of EndpointSlicesdescribes conf=1
part_of Duplicate endpointsdescribes conf=1
part_of EndpointSlice mirroringdescribes conf=1
api_for Endpointsdocuments API object conf=1

← all Docs