cri: add ignore_rdt_not_enabled_errors config option

Enabling this option effectively causes RDT class of a container to be a
soft requirement. If RDT support has not been enabled the RDT class
setting will not have any effect.

Signed-off-by: Markus Lehtonen <markus.lehtonen@intel.com>
This commit is contained in:
Markus Lehtonen 2021-09-24 13:00:51 +03:00
parent eba1048163
commit 9c2e3835fa
5 changed files with 23 additions and 4 deletions

View File

@ -143,6 +143,14 @@ version = 2
# default_runtime_name is the default runtime name to use. # default_runtime_name is the default runtime name to use.
default_runtime_name = "runc" default_runtime_name = "runc"
# ignore_rdt_not_enabled_errors disables RDT related errors when RDT
# support has not been enabled. Intel RDT is a technology for cache and
# memory bandwidth management. By default, trying to set the RDT class of
# a container via annotations produces an error if RDT hasn't been enabled.
# This config option practically enables a "soft" mode for RDT where these
# errors are ignored and the container gets no RDT class.
ignore_rdt_not_enabled_errors = false
# 'plugins."io.containerd.grpc.v1.cri".containerd.default_runtime' is the runtime to use in containerd. # 'plugins."io.containerd.grpc.v1.cri".containerd.default_runtime' is the runtime to use in containerd.
# DEPRECATED: use `default_runtime_name` and `plugins."io.containerd.grpc.v1.cri".containerd.runtimes` instead. # DEPRECATED: use `default_runtime_name` and `plugins."io.containerd.grpc.v1.cri".containerd.runtimes` instead.
[plugins."io.containerd.grpc.v1.cri".containerd.default_runtime] [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime]

View File

@ -97,6 +97,10 @@ type ContainerdConfig struct {
// remove layers from the content store after successfully unpacking these // remove layers from the content store after successfully unpacking these
// layers to the snapshotter. // layers to the snapshotter.
DiscardUnpackedLayers bool `toml:"discard_unpacked_layers" json:"discardUnpackedLayers"` DiscardUnpackedLayers bool `toml:"discard_unpacked_layers" json:"discardUnpackedLayers"`
// IgnoreRdtNotEnabledErrors is a boolean flag to ignore RDT related errors
// when RDT support has not been enabled.
IgnoreRdtNotEnabledErrors bool `toml:"ignore_rdt_not_enabled_errors" json:"ignoreRdtNotEnabledErrors"`
} }
// CniConfig contains toml config related to cni // CniConfig contains toml config related to cni

View File

@ -257,7 +257,7 @@ func (c *criService) containerSpec(
supplementalGroups := securityContext.GetSupplementalGroups() supplementalGroups := securityContext.GetSupplementalGroups()
// Get RDT class // Get RDT class
rdtClass, err := rdtClassFromAnnotations(config.GetMetadata().GetName(), config.Annotations, sandboxConfig.Annotations) rdtClass, err := c.rdtClassFromAnnotations(config.GetMetadata().GetName(), config.Annotations, sandboxConfig.Annotations)
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to set RDT class") return nil, errors.Wrap(err, "failed to set RDT class")
} }

View File

@ -23,17 +23,24 @@ import (
"github.com/containerd/containerd/services/tasks" "github.com/containerd/containerd/services/tasks"
"github.com/intel/goresctrl/pkg/rdt" "github.com/intel/goresctrl/pkg/rdt"
"github.com/sirupsen/logrus"
) )
// rdtClassFromAnnotations examines container and pod annotations of a // rdtClassFromAnnotations examines container and pod annotations of a
// container and returns its effective RDT class. // container and returns its effective RDT class.
func rdtClassFromAnnotations(containerName string, containerAnnotations, podAnnotations map[string]string) (string, error) { func (c *criService) rdtClassFromAnnotations(containerName string, containerAnnotations, podAnnotations map[string]string) (string, error) {
cls, err := rdt.ContainerClassFromAnnotations(containerName, containerAnnotations, podAnnotations) cls, err := rdt.ContainerClassFromAnnotations(containerName, containerAnnotations, podAnnotations)
if err != nil { if err != nil {
return "", err return "", err
} }
if cls != "" && !tasks.RdtEnabled() { if cls != "" && !tasks.RdtEnabled() {
if c.config.ContainerdConfig.IgnoreRdtNotEnabledErrors {
cls = ""
logrus.Debugf("continuing create container %s, ignoring rdt not enabled (%v)", containerName, err)
} else {
return "", fmt.Errorf("RDT disabled, refusing to set RDT class of container %q to %q", containerName, cls) return "", fmt.Errorf("RDT disabled, refusing to set RDT class of container %q to %q", containerName, cls)
} }
}
return cls, nil return cls, nil
} }

View File

@ -18,6 +18,6 @@
package server package server
func rdtClassFromAnnotations(containerName string, containerAnnotations, podAnnotations map[string]string) (string, error) { func (c *criService) rdtClassFromAnnotations(containerName string, containerAnnotations, podAnnotations map[string]string) (string, error) {
return "", nil return "", nil
} }