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

Graduate Evented PLEG to Beta #39913

Merged
merged 1 commit into from
Apr 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,8 @@ For a reference to old feature gates that are removed, please refer to
| `DownwardAPIHugePages` | `false` | Beta | 1.21 | 1.21 |
| `DownwardAPIHugePages` | `true` | Beta | 1.22 | |
| `DynamicResourceAllocation` | `false` | Alpha | 1.26 | |
| `EventedPLEG` | `false` | Alpha | 1.26 | - |
sftim marked this conversation as resolved.
Show resolved Hide resolved
| `EventedPLEG` | `false` | Alpha | 1.26 | 1.26 |
| `EventedPLEG` | `false` | Beta | 1.27 | - |
harche marked this conversation as resolved.
Show resolved Hide resolved
| `ExpandedDNSConfig` | `false` | Alpha | 1.22 | 1.25 |
| `ExpandedDNSConfig` | `true` | Beta | 1.26 | |
| `ExperimentalHostUserNamespaceDefaulting` | `false` | Beta | 1.5 | |
Expand Down
91 changes: 91 additions & 0 deletions content/en/docs/tasks/administer-cluster/switch-to-evented-pleg.md
sftim marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
---
title: Switching From Polling to CRI Event-based Updates to Container Status
min-kubernetes-server-version: 1.26
content_type: task
weight: 90
---
sftim marked this conversation as resolved.
Show resolved Hide resolved

{{< feature-state for_k8s_version="v1.26" state="beta" >}}

<!-- overview -->
This page shows how to migrate notes to use event based updates for container status. The event-based
implementation reduces node resource consumption by the kubelet, compared to the legacy approach
that relies on polling.
You may know this feature as _evented Pod lifecycle event generator (PLEG)_. That's the name used
internally within the Kubernetes project for a key implementation detail.


## {{% heading "prerequisites" %}}

* You need to run a version of Kubernetes that provides this feature.
Kubernetes {{< skew currentVersion >}} includes beta support for event-based container
status updates. The feature is beta and is disabled by default.
{{< version-check >}}
If you are running a different version of Kubernetes, check the documentation for that release.


<!-- steps -->

## Why switch to Evented PLEG?

* The current `Generic PLEG` incurs non-negligible overhead due to frequent polling of container statuses.
* This overhead is exacerbated by Kubelet's parallelism, limiting its scalability and causing poor performance and reliability problems.
* The goal of `Evented PLEG` is to reduce unnecessary work during inactivity by replacing periodic polling.
Comment on lines +29 to +33
Copy link
Contributor

Choose a reason for hiding this comment

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

This should go before the list of prerequisites.


Copy link
Contributor

Choose a reason for hiding this comment

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

Should you drain the node first?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yes.

## Switching to Evented PLEG


1. Start the Kubelet with the [feature gate](https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/) `EventedPLEG` enabled. In Kubelet feature gates can be enabled by editing [config file](https://kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file/) and restarting the Kubelet service.

Copy link
Contributor

Choose a reason for hiding this comment

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

We could hint that you do this by editing its configuration file, and then you restart the kubelet.

2. Please make sure the node is [drained](https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/) before proceeding.

3. Start the `CRI Runtime` with the `Evented PLEG` support.
{{< tabs name="tab_with_code" >}}
{{< tab name="Containerd" codelang="bash" >}}
Version 1.7+
{{< /tab >}}
{{< tab name="CRI-O" codelang="bash" >}}
Version 1.26+

Check if the CRI-O is already configured to emit `CRI Events` by verifying the configuration,
```
$ crio config | grep enable_pod_events
```
If its enabled it should show,
```
# enable_pod_events = true
```

To enable it, start the cri-o daemon with the flag `--enable-pod-events=true` or using a drop in config like,

[crio.runtime]
enable_pod_events: true


{{< /tab >}}
{{< /tabs >}}


{{< version-check >}}

4. Verify that `Evented PLEG` is in use by looking for the term `EventedPLEG` in the kubelet logs

The output is similar to this:
```
I0314 11:10:13.909915 1105457 feature_gate.go:249] feature gates: &{map[EventedPLEG:true]}
```

If you have set LOG_LEVEL to 4 and above, you might see more entries that indicate `Evented PLEG` is in use by the kubelet.

```
I0314 11:12:42.009542 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=3b2c6172-b112-447a-ba96-94e7022912dc
I0314 11:12:44.623326 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=b3fba5ea-a8c5-4b76-8f43-481e17e8ec40
I0314 11:12:44.714564 1110177 evented.go:238] "Evented PLEG: Generated pod status from the received event" podUID=b3fba5ea-a8c5-4b76-8f43-481e17e8ec40
```

## {{% heading "whatsnext" %}}

* Learn more about [KEP 3386](https://github.com/kubernetes/enhancements/blob/5b258a990adabc2ffdc9d84581ea6ed696f7ce6c/keps/sig-node/3386-kubelet-evented-pleg/README.md).