96 lines
3.1 KiB
Go
96 lines
3.1 KiB
Go
/*
|
|
Copyright 2015 The Kubernetes Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package cm
|
|
|
|
import (
|
|
"k8s.io/apimachinery/pkg/util/sets"
|
|
// TODO: Migrate kubelet to either use its own internal objects or client library.
|
|
"k8s.io/kubernetes/pkg/api/v1"
|
|
evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
|
|
)
|
|
|
|
type ActivePodsFunc func() []*v1.Pod
|
|
|
|
// Manages the containers running on a machine.
|
|
type ContainerManager interface {
|
|
// Runs the container manager's housekeeping.
|
|
// - Ensures that the Docker daemon is in a container.
|
|
// - Creates the system container where all non-containerized processes run.
|
|
Start(*v1.Node, ActivePodsFunc) error
|
|
|
|
// Returns resources allocated to system cgroups in the machine.
|
|
// These cgroups include the system and Kubernetes services.
|
|
SystemCgroupsLimit() v1.ResourceList
|
|
|
|
// Returns a NodeConfig that is being used by the container manager.
|
|
GetNodeConfig() NodeConfig
|
|
|
|
// Returns internal Status.
|
|
Status() Status
|
|
|
|
// NewPodContainerManager is a factory method which returns a podContainerManager object
|
|
// Returns a noop implementation if qos cgroup hierarchy is not enabled
|
|
NewPodContainerManager() PodContainerManager
|
|
|
|
// GetMountedSubsystems returns the mounted cgroup subsytems on the node
|
|
GetMountedSubsystems() *CgroupSubsystems
|
|
|
|
// GetQOSContainersInfo returns the names of top level QoS containers
|
|
GetQOSContainersInfo() QOSContainersInfo
|
|
|
|
// GetNodeAllocatable returns the amount of compute resources that have to be reserved from scheduling.
|
|
GetNodeAllocatableReservation() v1.ResourceList
|
|
|
|
// UpdateQOSCgroups performs housekeeping updates to ensure that the top
|
|
// level QoS containers have their desired state in a thread-safe way
|
|
UpdateQOSCgroups() error
|
|
}
|
|
|
|
type NodeConfig struct {
|
|
RuntimeCgroupsName string
|
|
SystemCgroupsName string
|
|
KubeletCgroupsName string
|
|
ContainerRuntime string
|
|
CgroupsPerQOS bool
|
|
CgroupRoot string
|
|
CgroupDriver string
|
|
ProtectKernelDefaults bool
|
|
EnableCRI bool
|
|
NodeAllocatableConfig
|
|
}
|
|
|
|
type NodeAllocatableConfig struct {
|
|
KubeReservedCgroupName string
|
|
SystemReservedCgroupName string
|
|
EnforceNodeAllocatable sets.String
|
|
KubeReserved v1.ResourceList
|
|
SystemReserved v1.ResourceList
|
|
HardEvictionThresholds []evictionapi.Threshold
|
|
}
|
|
|
|
type Status struct {
|
|
// Any soft requirements that were unsatisfied.
|
|
SoftRequirements error
|
|
}
|
|
|
|
const (
|
|
// Uer visible keys for managing node allocatable enforcement on the node.
|
|
NodeAllocatableEnforcementKey = "pods"
|
|
SystemReservedEnforcementKey = "system-reserved"
|
|
KubeReservedEnforcementKey = "kube-reserved"
|
|
)
|