mirror of
https://github.com/k3s-io/k3s.git
synced 2026-04-07 02:15:03 -04:00
88 lines
3.3 KiB
Go
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
|
|
}
|