Commit 564d3c83 authored by Oliver Larsson's avatar Oliver Larsson Committed by Brad Davidson

QoS-class resource configuration

Problem: Configuring qos-class features in containerd requres a custom containerd configuration template. Solution: Look for configuration files in default locations and configure containerd to use them if they exist. Signed-off-by: 's avatarOliver Larsson <larsson.e.oliver@gmail.com> (cherry picked from commit 30c8ad92) Signed-off-by: 's avatarBrad Davidson <brad.davidson@rancher.com>
parent 00821f0d
...@@ -557,6 +557,7 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N ...@@ -557,6 +557,7 @@ func get(ctx context.Context, envInfo *cmds.Agent, proxy proxy.Proxy) (*config.N
nodeConfig.Containerd.Debug = envInfo.Debug nodeConfig.Containerd.Debug = envInfo.Debug
applyContainerdStateAndAddress(nodeConfig) applyContainerdStateAndAddress(nodeConfig)
applyCRIDockerdAddress(nodeConfig) applyCRIDockerdAddress(nodeConfig)
applyContainerdQoSClassConfigFileIfPresent(envInfo, nodeConfig)
nodeConfig.Containerd.Template = filepath.Join(envInfo.DataDir, "agent", "etc", "containerd", "config.toml.tmpl") nodeConfig.Containerd.Template = filepath.Join(envInfo.DataDir, "agent", "etc", "containerd", "config.toml.tmpl")
nodeConfig.Certificate = servingCert nodeConfig.Certificate = servingCert
......
...@@ -4,9 +4,13 @@ ...@@ -4,9 +4,13 @@
package config package config
import ( import (
"errors"
"os"
"path/filepath" "path/filepath"
"github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/daemons/config" "github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/sirupsen/logrus"
) )
func applyContainerdStateAndAddress(nodeConfig *config.Node) { func applyContainerdStateAndAddress(nodeConfig *config.Node) {
...@@ -17,3 +21,21 @@ func applyContainerdStateAndAddress(nodeConfig *config.Node) { ...@@ -17,3 +21,21 @@ func applyContainerdStateAndAddress(nodeConfig *config.Node) {
func applyCRIDockerdAddress(nodeConfig *config.Node) { func applyCRIDockerdAddress(nodeConfig *config.Node) {
nodeConfig.CRIDockerd.Address = "unix:///run/k3s/cri-dockerd/cri-dockerd.sock" nodeConfig.CRIDockerd.Address = "unix:///run/k3s/cri-dockerd/cri-dockerd.sock"
} }
func applyContainerdQoSClassConfigFileIfPresent(envInfo *cmds.Agent, nodeConfig *config.Node) {
blockioPath := filepath.Join(envInfo.DataDir, "agent", "etc", "containerd", "blockio_config.yaml")
// Set containerd config if file exists
if _, err := os.Stat(blockioPath); !errors.Is(err, os.ErrNotExist) {
logrus.Infof("BlockIO configuration file found")
nodeConfig.Containerd.BlockIOConfig = blockioPath
}
rdtPath := filepath.Join(envInfo.DataDir, "agent", "etc", "containerd", "rdt_config.yaml")
// Set containerd config if file exists
if _, err := os.Stat(rdtPath); !errors.Is(err, os.ErrNotExist) {
logrus.Infof("RDT configuration file found")
nodeConfig.Containerd.RDTConfig = rdtPath
}
}
...@@ -6,6 +6,7 @@ package config ...@@ -6,6 +6,7 @@ package config
import ( import (
"path/filepath" "path/filepath"
"github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/daemons/config" "github.com/k3s-io/k3s/pkg/daemons/config"
) )
...@@ -17,3 +18,7 @@ func applyContainerdStateAndAddress(nodeConfig *config.Node) { ...@@ -17,3 +18,7 @@ func applyContainerdStateAndAddress(nodeConfig *config.Node) {
func applyCRIDockerdAddress(nodeConfig *config.Node) { func applyCRIDockerdAddress(nodeConfig *config.Node) {
nodeConfig.CRIDockerd.Address = "npipe:////.pipe/cri-dockerd" nodeConfig.CRIDockerd.Address = "npipe:////.pipe/cri-dockerd"
} }
func applyContainerdQoSClassConfigFileIfPresent(envInfo *cmds.Agent, nodeConfig *config.Node) {
// QoS-class resource management not supported on windows.
}
...@@ -82,6 +82,12 @@ enable_keychain = true ...@@ -82,6 +82,12 @@ enable_keychain = true
conf_dir = "{{ .NodeConfig.AgentConfig.CNIConfDir }}" conf_dir = "{{ .NodeConfig.AgentConfig.CNIConfDir }}"
{{end}} {{end}}
{{- if or .NodeConfig.Containerd.BlockIOConfig .NodeConfig.Containerd.RDTConfig }}
[plugins."io.containerd.service.v1.tasks-service"]
{{ if .NodeConfig.Containerd.BlockIOConfig }}blockio_config_file = "{{ .NodeConfig.Containerd.BlockIOConfig }}"{{end}}
{{ if .NodeConfig.Containerd.RDTConfig }}rdt_config_file = "{{ .NodeConfig.Containerd.RDTConfig }}"{{end}}
{{end}}
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2" runtime_type = "io.containerd.runc.v2"
......
...@@ -59,15 +59,17 @@ type Node struct { ...@@ -59,15 +59,17 @@ type Node struct {
} }
type Containerd struct { type Containerd struct {
Address string Address string
Log string Log string
Root string Root string
State string State string
Config string Config string
Opt string Opt string
Template string Template string
SELinux bool BlockIOConfig string
Debug bool RDTConfig string
SELinux bool
Debug bool
} }
type CRIDockerd struct { type CRIDockerd struct {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment