mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 05:27:21 +00:00
ReservedMemory Configuration for NUMA
Kubelet throws error when multiple numa nodes are specified for memory reservation. This is due to "," being used as separator for different memory types within same numa node as well as for different numa nodes. This PR fixes the error by using ";" as the separator for specifying multiple numa node configuration. Signed-off-by: Ravindra Thakur <ravindra.nath.thakur@est.tech>
This commit is contained in:
parent
77243f3274
commit
a1f73cc247
@ -188,16 +188,16 @@ func (v *ReservedMemoryVar) Set(s string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
numaNodeReservation := strings.Split(s, ":")
|
numaNodeReservations := strings.Split(s, ";")
|
||||||
|
for _, reservation := range numaNodeReservations {
|
||||||
|
numaNodeReservation := strings.Split(reservation, ":")
|
||||||
if len(numaNodeReservation) != 2 {
|
if len(numaNodeReservation) != 2 {
|
||||||
return fmt.Errorf("the reserved memory has incorrect format, expected numaNodeID:type=quantity[,type=quantity...], got %s", s)
|
return fmt.Errorf("the reserved memory has incorrect format, expected numaNodeID:type=quantity[,type=quantity...], got %s", reservation)
|
||||||
}
|
}
|
||||||
|
|
||||||
memoryTypeReservations := strings.Split(numaNodeReservation[1], ",")
|
memoryTypeReservations := strings.Split(numaNodeReservation[1], ",")
|
||||||
if len(memoryTypeReservations) < 1 {
|
if len(memoryTypeReservations) < 1 {
|
||||||
return fmt.Errorf("the reserved memory has incorrect format, expected numaNodeID:type=quantity[,type=quantity...], got %s", s)
|
return fmt.Errorf("the reserved memory has incorrect format, expected numaNodeID:type=quantity[,type=quantity...], got %s", reservation)
|
||||||
}
|
}
|
||||||
|
|
||||||
numaNodeID, err := strconv.Atoi(numaNodeReservation[0])
|
numaNodeID, err := strconv.Atoi(numaNodeReservation[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to convert the NUMA node ID, exptected integer, got %s", numaNodeReservation[0])
|
return fmt.Errorf("failed to convert the NUMA node ID, exptected integer, got %s", numaNodeReservation[0])
|
||||||
@ -208,10 +208,10 @@ func (v *ReservedMemoryVar) Set(s string) error {
|
|||||||
Limits: map[v1.ResourceName]resource.Quantity{},
|
Limits: map[v1.ResourceName]resource.Quantity{},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, reservation := range memoryTypeReservations {
|
for _, memoryTypeReservation := range memoryTypeReservations {
|
||||||
limit := strings.Split(reservation, "=")
|
limit := strings.Split(memoryTypeReservation, "=")
|
||||||
if len(limit) != 2 {
|
if len(limit) != 2 {
|
||||||
return fmt.Errorf("the reserved limit has incorrect value, expected type=quantatity, got %s", reservation)
|
return fmt.Errorf("the reserved limit has incorrect value, expected type=quantatity, got %s", memoryTypeReservation)
|
||||||
}
|
}
|
||||||
|
|
||||||
resourceName := v1.ResourceName(limit[0])
|
resourceName := v1.ResourceName(limit[0])
|
||||||
@ -226,9 +226,8 @@ func (v *ReservedMemoryVar) Set(s string) error {
|
|||||||
|
|
||||||
memoryReservation.Limits[v1.ResourceName(limit[0])] = q
|
memoryReservation.Limits[v1.ResourceName(limit[0])] = q
|
||||||
}
|
}
|
||||||
|
|
||||||
*v.Value = append(*v.Value, memoryReservation)
|
*v.Value = append(*v.Value, memoryReservation)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,6 +224,25 @@ func TestReservedMemoryVar(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
desc: "valid input with ';' as separator for multiple reserved-memory arguments",
|
||||||
|
argc: "blah --reserved-memory=0:memory=1Gi,hugepages-1Gi=1Gi;1:memory=1Gi",
|
||||||
|
expectVal: []kubeletconfig.MemoryReservation{
|
||||||
|
{
|
||||||
|
NumaNode: 0,
|
||||||
|
Limits: v1.ResourceList{
|
||||||
|
v1.ResourceMemory: memory1Gi,
|
||||||
|
resourceNameHugepages1Gi: memory1Gi,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
NumaNode: 1,
|
||||||
|
Limits: v1.ResourceList{
|
||||||
|
v1.ResourceMemory: memory1Gi,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
desc: "invalid input",
|
desc: "invalid input",
|
||||||
argc: "blah --reserved-memory=bad-input",
|
argc: "blah --reserved-memory=bad-input",
|
||||||
|
Loading…
Reference in New Issue
Block a user