diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go b/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go index 6f858b7482e..5501592b8ef 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_container_windows.go @@ -28,6 +28,8 @@ import ( kubefeatures "k8s.io/kubernetes/pkg/features" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/securitycontext" + + "k8s.io/klog" ) // applyPlatformSpecificContainerConfig applies platform specific configurations to runtimeapi.ContainerConfig. @@ -82,6 +84,28 @@ func (m *kubeGenericRuntimeManager) generateWindowsContainerConfig(container *v1 } wc.Resources.CpuShares = cpuShares + if !isolatedByHyperv { + // The processor resource controls are mutually exclusive on + // Windows Server Containers, the order of precedence is + // CPUCount first, then CPUShares, and CPUMaximum last. + if wc.Resources.CpuCount > 0 { + if wc.Resources.CpuShares > 0 { + wc.Resources.CpuShares = 0 + klog.Warningf("Mutually exclusive options: CPUCount priority > CPUShares priority on Windows Server Containers. CPUShares should be ignored") + } + if wc.Resources.CpuMaximum > 0 { + wc.Resources.CpuMaximum = 0 + klog.Warningf("Mutually exclusive options: CPUCount priority > CPUMaximum priority on Windows Server Containers. CPUMaximum should be ignored") + } + } else if wc.Resources.CpuShares > 0 { + if wc.Resources.CpuMaximum > 0 { + wc.Resources.CpuMaximum = 0 + klog.Warningf("Mutually exclusive options: CPUShares priority > CPUMaximum priority on Windows Server Containers. CPUMaximum should be ignored") + } + + } + } + memoryLimit := container.Resources.Limits.Memory().Value() if memoryLimit != 0 { wc.Resources.MemoryLimitInBytes = memoryLimit