cgmgr

package
v1.25.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 22, 2023 License: Apache-2.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultCgroupManager = systemdCgroupManager
)

Variables

This section is empty.

Functions

func MemLimitGivenSystem added in v1.23.0

func MemLimitGivenSystem(cgroupLimit uint64) uint64

MemLimitGivenSystem limit returns the memory limit for a given cgroup If the configured memory limit is larger than the total memory on the sys, the physical system memory size is returned

func MoveProcessToContainerCgroup added in v1.24.0

func MoveProcessToContainerCgroup(containerPid, commandPid int) error

MoveProcessToContainerCgroup moves process to the container cgroup

func UpdateWithMemoryStatsFromFile added in v1.23.0

func UpdateWithMemoryStatsFromFile(memoryStatPath, inactiveFileSearchString string, memory *types.MemoryUsage, usage uint64) error

func VerifyMemoryIsEnough

func VerifyMemoryIsEnough(memoryLimit int64) error

VerifyMemoryIsEnough verifies that the cgroup memory limit is above a specified minimum memory limit.

Types

type CgroupManager

type CgroupManager interface {
	// String returns the name of the cgroup manager (either cgroupfs or systemd)
	Name() string
	// IsSystemd returns whether it is a systemd cgroup manager
	IsSystemd() bool
	// ContainerCgroupPath takes arguments sandbox parent cgroup and container ID and returns
	// the cgroup path for that containerID. If parentCgroup is empty, it
	// uses the default parent for that particular manager
	ContainerCgroupPath(string, string) string
	// ContainerCgroupAbsolutePath takes arguments sandbox parent cgroup and container ID and
	// returns the cgroup path on disk for that containerID. If parentCgroup is empty, it
	// uses the default parent for that particular manager
	ContainerCgroupAbsolutePath(string, string) (string, error)
	// PopulateContainerCgroupStats fills the stats object with information from the cgroup found
	// given a cgroup parent and container ID.
	PopulateContainerCgroupStats(sbParent, containerID string, stats *types.ContainerStats) error
	// SandboxCgroupPath takes the sandbox parent, and sandbox ID. It
	// returns the cgroup parent, cgroup path, and error. For systemd cgroups,
	// it also checks there is enough memory in the given cgroup
	SandboxCgroupPath(string, string) (string, string, error)
	// PopulateContainerCgroupStats takes arguments sandbox parent cgroup, and sandbox stats object.
	// It fills the object with information from the cgroup found given that parent.
	PopulateSandboxCgroupStats(sbParent string, stats *types.PodSandboxStats) error
	// MoveConmonToCgroup takes the container ID, cgroup parent, conmon's cgroup (from the config), conmon's PID, and some customized resources
	// It attempts to move conmon to the correct cgroup, and set the resources for that cgroup.
	// It returns the cgroupfs parent that conmon was put into
	// so that CRI-O can clean the parent cgroup of the newly added conmon once the process terminates (systemd handles this for us)
	MoveConmonToCgroup(cid, cgroupParent, conmonCgroup string, pid int, resources *rspec.LinuxResources) (string, error)
	// CreateSandboxCgroup takes the sandbox parent, and sandbox ID.
	// It creates a new cgroup for that sandbox, which is useful when spoofing an infra container.
	CreateSandboxCgroup(sbParent, containerID string) error
	// RemoveSandboxCgroup takes the sandbox parent, and sandbox ID.
	// It removes the cgroup for that sandbox, which is useful when spoofing an infra container.
	RemoveSandboxCgroup(sbParent, containerID string) error
}

CgroupManager is an interface to interact with cgroups on a node. CRI-O is configured at startup to either use systemd or cgroupfs, and the node itself is booted with cgroup v1, or cgroup v2. CgroupManager is an interface for the CRI-O server to use cgroups, regardless of how it or the node was configured.

func New

func New() CgroupManager

New creates a new CgroupManager with defaults

func SetCgroupManager

func SetCgroupManager(cgroupManager string) (CgroupManager, error)

SetCgroupManager takes a string and branches on it to return the type of cgroup manager configured

type CgroupfsManager

type CgroupfsManager struct {
	// contains filtered or unexported fields
}

CgroupfsManager defines functionality whrn **** TODO: Update this

func (*CgroupfsManager) ContainerCgroupAbsolutePath

func (m *CgroupfsManager) ContainerCgroupAbsolutePath(sbParent, containerID string) (string, error)

ContainerCgroupAbsolutePath just calls ContainerCgroupPath, because they both return the absolute path

func (*CgroupfsManager) ContainerCgroupPath

func (*CgroupfsManager) ContainerCgroupPath(sbParent, containerID string) string

ContainerCgroupPath takes arguments sandbox parent cgroup and container ID and returns the cgroup path for that containerID. If parentCgroup is empty, it uses the default parent /crio

func (*CgroupfsManager) CreateSandboxCgroup added in v1.21.0

func (m *CgroupfsManager) CreateSandboxCgroup(sbParent, containerID string) error

CreateSandboxCgroup calls the helper function createSandboxCgroup for this manager.

func (*CgroupfsManager) IsSystemd

func (*CgroupfsManager) IsSystemd() bool

IsSystemd returns that this is not a systemd cgroup manager

func (*CgroupfsManager) MoveConmonToCgroup

func (*CgroupfsManager) MoveConmonToCgroup(cid, cgroupParent, conmonCgroup string, pid int, resources *rspec.LinuxResources) (cgroupPathToClean string, _ error)

MoveConmonToCgroup takes the container ID, cgroup parent, conmon's cgroup (from the config) and conmon's PID It attempts to move conmon to the correct cgroup. It returns the cgroupfs parent that conmon was put into so that CRI-O can clean the cgroup path of the newly added conmon once the process terminates (systemd handles this for us)

func (*CgroupfsManager) Name

func (*CgroupfsManager) Name() string

Name returns the name of the cgroup manager (cgroupfs)

func (*CgroupfsManager) PopulateContainerCgroupStats added in v1.23.0

func (m *CgroupfsManager) PopulateContainerCgroupStats(sbParent, containerID string, stats *types.ContainerStats) error

PopulateContainerCgroupStats takes arguments sandbox parent cgroup, container ID, and containers stats object. It fills the object with information from the cgroup found given that parent and ID

func (*CgroupfsManager) PopulateSandboxCgroupStats added in v1.23.0

func (m *CgroupfsManager) PopulateSandboxCgroupStats(sbParent string, stats *types.PodSandboxStats) error

PopulateSandboxCgroupStats takes arguments sandbox parent cgroup and sandbox stats object It fills the object with information from the cgroup found given that cgroup

func (*CgroupfsManager) RemoveSandboxCgroup added in v1.24.6

func (m *CgroupfsManager) RemoveSandboxCgroup(sbParent, containerID string) error

RemoveSandboxCgroup calls the helper function removeSandboxCgroup for this manager.

func (*CgroupfsManager) SandboxCgroupPath

func (m *CgroupfsManager) SandboxCgroupPath(sbParent, sbID string) (cgParent, cgPath string, _ error)

SandboxCgroupPath takes the sandbox parent, and sandbox ID. It returns the cgroup parent, cgroup path, and error.

type SystemdManager

type SystemdManager struct {
	// contains filtered or unexported fields
}

SystemdManager is the parent type of SystemdV{1,2}Manager. it defines all of the common functionality between V1 and V2

func NewSystemdManager added in v1.19.3

func NewSystemdManager() *SystemdManager

func (*SystemdManager) ContainerCgroupAbsolutePath

func (m *SystemdManager) ContainerCgroupAbsolutePath(sbParent, containerID string) (string, error)

func (*SystemdManager) ContainerCgroupPath

func (*SystemdManager) ContainerCgroupPath(sbParent, containerID string) string

ContainerCgroupPath takes arguments sandbox parent cgroup and container ID and returns the cgroup path for that containerID. If parentCgroup is empty, it uses the default parent system.slice

func (*SystemdManager) CreateSandboxCgroup added in v1.21.0

func (m *SystemdManager) CreateSandboxCgroup(sbParent, containerID string) error

CreateSandboxCgroup calls the helper function createSandboxCgroup for this manager. Note: createSandboxCgroup will create a cgroupfs cgroup for the infra container underneath the pod slice. It will not use dbus to create this cgroup, but instead call libcontainer's cgroupfs manager directly. This is because a scope created here will not have a process within it (as it's usually for a dropped infra container), and a slice cannot have the required `crio` prefix (while still being within the pod slice). Ultimately, this cgroup is required for cAdvisor to be able to register the pod and collect network metrics for it. This work will not be relevant when CRI-O is responsible for gathering pod metrics (KEP-2371), but is required until that's done.

func (*SystemdManager) IsSystemd

func (*SystemdManager) IsSystemd() bool

IsSystemd returns that it is a systemd cgroup manager

func (*SystemdManager) MoveConmonToCgroup

func (m *SystemdManager) MoveConmonToCgroup(cid, cgroupParent, conmonCgroup string, pid int, resources *rspec.LinuxResources) (cgroupPathToClean string, _ error)

MoveConmonToCgroup takes the container ID, cgroup parent, conmon's cgroup (from the config) and conmon's PID It attempts to move conmon to the correct cgroup. cgroupPathToClean should always be returned empty. It is part of the interface to return the cgroup path that cri-o is responsible for cleaning up upon the container's death. Systemd takes care of this cleaning for us, so return an empty string

func (*SystemdManager) Name

func (*SystemdManager) Name() string

Name returns the name of the cgroup manager (systemd)

func (*SystemdManager) PopulateContainerCgroupStats added in v1.23.0

func (m *SystemdManager) PopulateContainerCgroupStats(sbParent, containerID string, stats *types.ContainerStats) error

PopulateContainerCgroupStats takes arguments sandbox parent cgroup, container ID, and containers stats object. It fills the object with information from the cgroup found given that parent and ID

func (*SystemdManager) PopulateSandboxCgroupStats added in v1.23.0

func (m *SystemdManager) PopulateSandboxCgroupStats(sbParent string, stats *types.PodSandboxStats) error

PopulateSandboxCgroupStats takes arguments sandbox parent cgroup and sandbox stats object It fills the object with information from the cgroup found given that cgroup

func (*SystemdManager) RemoveSandboxCgroup added in v1.24.6

func (m *SystemdManager) RemoveSandboxCgroup(sbParent, containerID string) error

RemoveSandboxCgroup calls the helper function removeSandboxCgroup for this manager.

func (*SystemdManager) SandboxCgroupPath

func (m *SystemdManager) SandboxCgroupPath(sbParent, sbID string) (cgParent, cgPath string, _ error)

SandboxCgroupPath takes the sandbox parent, and sandbox ID. It returns the cgroup parent, cgroup path, and error. It also checks there is enough memory in the given cgroup

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL