mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
smtalign: propagate policy options to cpumanager
The CPUManagerPolicyOptions received from the kubelet config/command line args is propogated to the Container Manager. We defer the consumption of the options to a later patch(set). Co-authored-by: Swati Sehgal <swsehgal@redhat.com> Signed-off-by: Francesco Romani <fromani@redhat.com>
This commit is contained in:
parent
6dccad45b4
commit
c5cb263dcf
@ -732,6 +732,16 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend
|
|||||||
|
|
||||||
devicePluginEnabled := utilfeature.DefaultFeatureGate.Enabled(features.DevicePlugins)
|
devicePluginEnabled := utilfeature.DefaultFeatureGate.Enabled(features.DevicePlugins)
|
||||||
|
|
||||||
|
var cpuManagerPolicyOptions map[string]string
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.CPUManager) {
|
||||||
|
if utilfeature.DefaultFeatureGate.Enabled(features.CPUManagerPolicyOptions) {
|
||||||
|
cpuManagerPolicyOptions = s.CPUManagerPolicyOptions
|
||||||
|
} else if s.CPUManagerPolicyOptions != nil {
|
||||||
|
return fmt.Errorf("CPU Manager policy options %v require feature gates %q, %q enabled",
|
||||||
|
s.CPUManagerPolicyOptions, features.CPUManager, features.CPUManagerPolicyOptions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
kubeDeps.ContainerManager, err = cm.NewContainerManager(
|
kubeDeps.ContainerManager, err = cm.NewContainerManager(
|
||||||
kubeDeps.Mounter,
|
kubeDeps.Mounter,
|
||||||
kubeDeps.CAdvisorInterface,
|
kubeDeps.CAdvisorInterface,
|
||||||
@ -756,6 +766,7 @@ func run(ctx context.Context, s *options.KubeletServer, kubeDeps *kubelet.Depend
|
|||||||
},
|
},
|
||||||
QOSReserved: *experimentalQOSReserved,
|
QOSReserved: *experimentalQOSReserved,
|
||||||
ExperimentalCPUManagerPolicy: s.CPUManagerPolicy,
|
ExperimentalCPUManagerPolicy: s.CPUManagerPolicy,
|
||||||
|
ExperimentalCPUManagerPolicyOptions: cpuManagerPolicyOptions,
|
||||||
ExperimentalCPUManagerReconcilePeriod: s.CPUManagerReconcilePeriod.Duration,
|
ExperimentalCPUManagerReconcilePeriod: s.CPUManagerReconcilePeriod.Duration,
|
||||||
ExperimentalMemoryManagerPolicy: s.MemoryManagerPolicy,
|
ExperimentalMemoryManagerPolicy: s.MemoryManagerPolicy,
|
||||||
ExperimentalMemoryManagerReservedMemory: s.ReservedMemory,
|
ExperimentalMemoryManagerReservedMemory: s.ReservedMemory,
|
||||||
|
@ -789,6 +789,12 @@ const (
|
|||||||
//
|
//
|
||||||
// Enables kubelet to support memory QoS with cgroups v2.
|
// Enables kubelet to support memory QoS with cgroups v2.
|
||||||
MemoryQoS featuregate.Feature = "MemoryQoS"
|
MemoryQoS featuregate.Feature = "MemoryQoS"
|
||||||
|
|
||||||
|
// owner: @fromanirh
|
||||||
|
// alpha: v1.22
|
||||||
|
//
|
||||||
|
// Allow fine-tuning of cpumanager policies
|
||||||
|
CPUManagerPolicyOptions featuregate.Feature = "CPUManagerPolicyOptions"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -906,6 +912,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
DelegateFSGroupToCSIDriver: {Default: false, PreRelease: featuregate.Alpha},
|
DelegateFSGroupToCSIDriver: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha},
|
KubeletInUserNamespace: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
MemoryQoS: {Default: false, PreRelease: featuregate.Alpha},
|
MemoryQoS: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
CPUManagerPolicyOptions: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
|
|
||||||
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
|
// inherited features from generic apiserver, relisted here to get a conflict if it is changed
|
||||||
// unintentionally on either side:
|
// unintentionally on either side:
|
||||||
|
@ -134,6 +134,7 @@ type NodeConfig struct {
|
|||||||
NodeAllocatableConfig
|
NodeAllocatableConfig
|
||||||
QOSReserved map[v1.ResourceName]int64
|
QOSReserved map[v1.ResourceName]int64
|
||||||
ExperimentalCPUManagerPolicy string
|
ExperimentalCPUManagerPolicy string
|
||||||
|
ExperimentalCPUManagerPolicyOptions map[string]string
|
||||||
ExperimentalTopologyManagerScope string
|
ExperimentalTopologyManagerScope string
|
||||||
ExperimentalCPUManagerReconcilePeriod time.Duration
|
ExperimentalCPUManagerReconcilePeriod time.Duration
|
||||||
ExperimentalMemoryManagerPolicy string
|
ExperimentalMemoryManagerPolicy string
|
||||||
|
@ -332,6 +332,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I
|
|||||||
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) {
|
if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CPUManager) {
|
||||||
cm.cpuManager, err = cpumanager.NewManager(
|
cm.cpuManager, err = cpumanager.NewManager(
|
||||||
nodeConfig.ExperimentalCPUManagerPolicy,
|
nodeConfig.ExperimentalCPUManagerPolicy,
|
||||||
|
nodeConfig.ExperimentalCPUManagerPolicyOptions,
|
||||||
nodeConfig.ExperimentalCPUManagerReconcilePeriod,
|
nodeConfig.ExperimentalCPUManagerReconcilePeriod,
|
||||||
machineInfo,
|
machineInfo,
|
||||||
nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs,
|
nodeConfig.NodeAllocatableConfig.ReservedSystemCPUs,
|
||||||
|
@ -143,7 +143,7 @@ func (s *sourcesReadyStub) AddSource(source string) {}
|
|||||||
func (s *sourcesReadyStub) AllReady() bool { return true }
|
func (s *sourcesReadyStub) AllReady() bool { return true }
|
||||||
|
|
||||||
// NewManager creates new cpu manager based on provided policy
|
// NewManager creates new cpu manager based on provided policy
|
||||||
func NewManager(cpuPolicyName string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) {
|
func NewManager(cpuPolicyName string, cpuPolicyOptions map[string]string, reconcilePeriod time.Duration, machineInfo *cadvisorapi.MachineInfo, specificCPUs cpuset.CPUSet, nodeAllocatableReservation v1.ResourceList, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) {
|
||||||
var topo *topology.CPUTopology
|
var topo *topology.CPUTopology
|
||||||
var policy Policy
|
var policy Policy
|
||||||
|
|
||||||
|
@ -634,7 +634,7 @@ func TestCPUManagerGenerate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer os.RemoveAll(sDir)
|
defer os.RemoveAll(sDir)
|
||||||
|
|
||||||
mgr, err := NewManager(testCase.cpuPolicyName, 5*time.Second, machineInfo, cpuset.NewCPUSet(), testCase.nodeAllocatableReservation, sDir, topologymanager.NewFakeManager())
|
mgr, err := NewManager(testCase.cpuPolicyName, nil, 5*time.Second, machineInfo, cpuset.NewCPUSet(), testCase.nodeAllocatableReservation, sDir, topologymanager.NewFakeManager())
|
||||||
if testCase.expectedError != nil {
|
if testCase.expectedError != nil {
|
||||||
if !strings.Contains(err.Error(), testCase.expectedError.Error()) {
|
if !strings.Contains(err.Error(), testCase.expectedError.Error()) {
|
||||||
t.Errorf("Unexpected error message. Have: %s wants %s", err.Error(), testCase.expectedError.Error())
|
t.Errorf("Unexpected error message. Have: %s wants %s", err.Error(), testCase.expectedError.Error())
|
||||||
|
Loading…
Reference in New Issue
Block a user