k3s/pkg/agent/config/config_linux.go
Brad Davidson 3acf8db8f2 Update packages to remove dep on archived github.com/pkg/errors
Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
2026-03-09 16:09:01 -07:00

88 lines
3.3 KiB
Go

//go:build linux
package config
import (
"os"
"path/filepath"
"github.com/k3s-io/k3s/pkg/agent/containerd"
"github.com/k3s-io/k3s/pkg/cli/cmds"
"github.com/k3s-io/k3s/pkg/daemons/config"
"github.com/k3s-io/k3s/pkg/util/errors"
"github.com/sirupsen/logrus"
)
// applyContainerdOSSpecificConfig sets linux-specific containerd config
func applyContainerdOSSpecificConfig(nodeConfig *config.Node) error {
nodeConfig.Containerd.State = "/run/k3s/containerd"
nodeConfig.Containerd.Address = filepath.Join(nodeConfig.Containerd.State, "containerd.sock")
// validate that the selected snapshotter supports the filesystem at the root path.
// for stargz and nix, also overrides the image service endpoint path.
switch nodeConfig.AgentConfig.Snapshotter {
case "overlayfs":
if err := containerd.OverlaySupported(nodeConfig.Containerd.Root); err != nil {
return errors.WithMessagef(err, "\"overlayfs\" snapshotter cannot be enabled for %q, try using \"fuse-overlayfs\" or \"native\"",
nodeConfig.Containerd.Root)
}
case "fuse-overlayfs":
if err := containerd.FuseoverlayfsSupported(nodeConfig.Containerd.Root); err != nil {
return errors.WithMessagef(err, "\"fuse-overlayfs\" snapshotter cannot be enabled for %q, try using \"native\"",
nodeConfig.Containerd.Root)
}
case "stargz":
if err := containerd.StargzSupported(nodeConfig.Containerd.Root); err != nil {
return errors.WithMessagef(err, "\"stargz\" snapshotter cannot be enabled for %q, try using \"overlayfs\" or \"native\"",
nodeConfig.Containerd.Root)
}
nodeConfig.AgentConfig.ImageServiceSocket = "/run/containerd-stargz-grpc/containerd-stargz-grpc.sock"
case "nix":
if err := containerd.NixSupported(nodeConfig.Containerd.Root); err != nil {
return errors.WithMessagef(err, "\"nix\" snapshotter cannot be enabled for %q, try using \"overlayfs\" or \"native\"",
nodeConfig.Containerd.Root)
}
nodeConfig.AgentConfig.ImageServiceSocket = filepath.Join(nodeConfig.Containerd.State, "nix-snapshotter.sock")
}
return nil
}
// applyContainerdQoSClassConfigFileIfPresent sets linux-specific qos config
func applyContainerdQoSClassConfigFileIfPresent(envInfo *cmds.Agent, containerdConfig *config.Containerd) error {
containerdConfigDir := filepath.Join(envInfo.DataDir, "agent", "etc", "containerd")
blockioPath := filepath.Join(containerdConfigDir, "blockio_config.yaml")
// Set containerd config if file exists
if fileInfo, err := os.Stat(blockioPath); !errors.Is(err, os.ErrNotExist) {
if fileInfo.Mode().IsRegular() {
logrus.Infof("BlockIO configuration file found")
containerdConfig.BlockIOConfig = blockioPath
}
}
rdtPath := filepath.Join(containerdConfigDir, "rdt_config.yaml")
// Set containerd config if file exists
if fileInfo, err := os.Stat(rdtPath); !errors.Is(err, os.ErrNotExist) {
if fileInfo.Mode().IsRegular() {
logrus.Infof("RDT configuration file found")
containerdConfig.RDTConfig = rdtPath
}
}
return nil
}
// applyCRIDockerdOSSpecificConfig sets linux-specific cri-dockerd config
func applyCRIDockerdOSSpecificConfig(nodeConfig *config.Node) error {
nodeConfig.CRIDockerd.Address = "unix:///run/k3s/cri-dockerd/cri-dockerd.sock"
return nil
}
// configureACL will configure an Access Control List for the specified file.
// On Linux, this function is a no-op
func configureACL(file string) error {
return nil
}