// Module included in the following assemblies:
//
// * nodes/nodes-cluster-overcommit.adoc
// * post_installation_configuration/node-tasks.adoc

[id="nodes-cluster-overcommit-node-enforcing_{context}"]

= Disabling or enforcing CPU limits using CPU CFS quotas

Nodes by default enforce specified CPU limits using the Completely Fair Scheduler (CFS) quota support in
the Linux kernel.

.Prerequisites

. Obtain the label associated with the static Machine Config Pool CRD for the type of node you want to configure.
Perform one of the following steps:

.. View the Machine Config Pool:
+
[source,terminal]
----
$ oc describe machineconfigpool <name>
----
+
For example:
+
[source,terminal]
----
$ oc describe machineconfigpool worker
----
+
.Example output
[source,terminal]
----
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfigPool
metadata:
  creationTimestamp: 2019-02-08T14:52:39Z
  generation: 1
  labels:
    custom-kubelet: small-pods <1>
----
<1> If a label has been added it appears under `labels`.

.. If the label is not present, add a key/value pair:
+
[source,terminal]
----
$ oc label machineconfigpool worker custom-kubelet=small-pods
----

.Procedure

. Create a Custom Resource (CR) for your configuration change.
+
.Sample configuration for a disabling CPU limits
[source,yaml]
----
apiVersion: machineconfiguration.openshift.io/v1
kind: KubeletConfig
metadata:
  name: disable-cpu-units <1>
spec:
  machineConfigPoolSelector:
    matchLabels:
      custom-kubelet: small-pods <2>
  kubeletConfig:
    cpu-cfs-quota: <3>
      - "false"
----
<1> Assign a name to CR.
<2> Specify the label to apply the configuration change.
<3> Set the `cpu-cfs-quota` parameter to `false`.

If CPU limit enforcement is disabled, it is important to understand the impact that will have on your node:

- If a container makes a request for CPU, it will continue to be enforced by CFS
shares in the Linux kernel.
- If a container makes no explicit request for CPU, but it does specify a limit,
the request will default to the specified limit, and be enforced by CFS shares
in the Linux kernel.
- If a container specifies both a request and a limit for CPU, the request will
be enforced by CFS shares in the Linux kernel, and the limit will have no
impact on the node.
