mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Topology manager aligns pods of all QoS classes.
This commit is contained in:
parent
71bebe4c13
commit
a9203ebdcf
@ -320,23 +320,17 @@ func (m *manager) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAdmitR
|
|||||||
}
|
}
|
||||||
pod := attrs.Pod
|
pod := attrs.Pod
|
||||||
c := make(map[string]TopologyHint)
|
c := make(map[string]TopologyHint)
|
||||||
klog.Infof("[topologymanager] Pod QoS Level: %v", pod.Status.QOSClass)
|
|
||||||
|
|
||||||
if pod.Status.QOSClass == v1.PodQOSGuaranteed {
|
for _, container := range append(pod.Spec.InitContainers, pod.Spec.Containers...) {
|
||||||
for _, container := range append(pod.Spec.InitContainers, pod.Spec.Containers...) {
|
result := m.calculateAffinity(*pod, container)
|
||||||
result := m.calculateAffinity(*pod, container)
|
admitPod := m.policy.CanAdmitPodResult(&result)
|
||||||
admitPod := m.policy.CanAdmitPodResult(&result)
|
if !admitPod.Admit {
|
||||||
if !admitPod.Admit {
|
return admitPod
|
||||||
return admitPod
|
}
|
||||||
}
|
c[container.Name] = result
|
||||||
c[container.Name] = result
|
}
|
||||||
}
|
m.podTopologyHints[string(pod.UID)] = c
|
||||||
m.podTopologyHints[string(pod.UID)] = c
|
klog.Infof("[topologymanager] Topology Affinity for Pod: %v are %v", pod.UID, m.podTopologyHints[string(pod.UID)])
|
||||||
klog.Infof("[topologymanager] Topology Affinity for Pod: %v are %v", pod.UID, m.podTopologyHints[string(pod.UID)])
|
|
||||||
|
|
||||||
} else {
|
|
||||||
klog.Infof("[topologymanager] Topology Manager only affinitises Guaranteed pods.")
|
|
||||||
}
|
|
||||||
|
|
||||||
return lifecycle.PodAdmitResult{
|
return lifecycle.PodAdmitResult{
|
||||||
Admit: true,
|
Admit: true,
|
||||||
|
@ -874,6 +874,32 @@ func TestAdmit(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: true,
|
expected: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "QOSClass set as Burstable. BestEffort Policy. More than one Preferred Affinity.",
|
||||||
|
qosClass: v1.PodQOSBurstable,
|
||||||
|
policy: NewBestEffortPolicy(),
|
||||||
|
hp: []HintProvider{
|
||||||
|
&mockHintProvider{
|
||||||
|
map[string][]TopologyHint{
|
||||||
|
"resource": {
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0),
|
||||||
|
Preferred: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(1),
|
||||||
|
Preferred: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0, 1),
|
||||||
|
Preferred: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "QOSClass set as Guaranteed. BestEffort Policy. No Preferred Affinity.",
|
name: "QOSClass set as Guaranteed. BestEffort Policy. No Preferred Affinity.",
|
||||||
qosClass: v1.PodQOSGuaranteed,
|
qosClass: v1.PodQOSGuaranteed,
|
||||||
@ -914,6 +940,28 @@ func TestAdmit(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: true,
|
expected: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "QOSClass set as Burstable. Restricted Policy. Preferred Affinity.",
|
||||||
|
qosClass: v1.PodQOSBurstable,
|
||||||
|
policy: NewRestrictedPolicy(),
|
||||||
|
hp: []HintProvider{
|
||||||
|
&mockHintProvider{
|
||||||
|
map[string][]TopologyHint{
|
||||||
|
"resource": {
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0),
|
||||||
|
Preferred: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0, 1),
|
||||||
|
Preferred: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "QOSClass set as Guaranteed. Restricted Policy. More than one Preferred affinity.",
|
name: "QOSClass set as Guaranteed. Restricted Policy. More than one Preferred affinity.",
|
||||||
qosClass: v1.PodQOSGuaranteed,
|
qosClass: v1.PodQOSGuaranteed,
|
||||||
@ -940,6 +988,32 @@ func TestAdmit(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: true,
|
expected: true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "QOSClass set as Burstable. Restricted Policy. More than one Preferred affinity.",
|
||||||
|
qosClass: v1.PodQOSBurstable,
|
||||||
|
policy: NewRestrictedPolicy(),
|
||||||
|
hp: []HintProvider{
|
||||||
|
&mockHintProvider{
|
||||||
|
map[string][]TopologyHint{
|
||||||
|
"resource": {
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0),
|
||||||
|
Preferred: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(1),
|
||||||
|
Preferred: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0, 1),
|
||||||
|
Preferred: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: true,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "QOSClass set as Guaranteed. Restricted Policy. No Preferred affinity.",
|
name: "QOSClass set as Guaranteed. Restricted Policy. No Preferred affinity.",
|
||||||
qosClass: v1.PodQOSGuaranteed,
|
qosClass: v1.PodQOSGuaranteed,
|
||||||
@ -958,6 +1032,24 @@ func TestAdmit(t *testing.T) {
|
|||||||
},
|
},
|
||||||
expected: false,
|
expected: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "QOSClass set as Burstable. Restricted Policy. No Preferred affinity.",
|
||||||
|
qosClass: v1.PodQOSBurstable,
|
||||||
|
policy: NewRestrictedPolicy(),
|
||||||
|
hp: []HintProvider{
|
||||||
|
&mockHintProvider{
|
||||||
|
map[string][]TopologyHint{
|
||||||
|
"resource": {
|
||||||
|
{
|
||||||
|
NUMANodeAffinity: NewTestBitMask(0, 1),
|
||||||
|
Preferred: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expected: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tc := range tcases {
|
for _, tc := range tcases {
|
||||||
man := manager{
|
man := manager{
|
||||||
|
Loading…
Reference in New Issue
Block a user