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:
parent
eba1048163
commit
9c2e3835fa
@ -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]
|
||||||
|
@ -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
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user