osd: set osd resources for specific device class
The OSDs may require different resources based on their device
class. The overall osd resources were only being used, rather
than properly looking up the specific device class resources.
Now the expected resources will take affect per device class.
Co-authored-by: Matthias Osthues <osthues.matthias@gmail.com>
Signed-off-by: Travis Nielsen <tnielsen@redhat.com>
(cherry picked from commit d3c0bacd88)
This commit is contained in:
1 parent
95ef325c6e
commit
f834612c85
3 files changed
+26
-2
No files matched your search
@@ -77,6 +77,16 @@ func GetOSDResources(p ResourceSpec, deviceClass string) v1.ResourceRequirements
|
||||
return p[ResourcesKeyOSD]
|
||||
}
|
||||
|
||||
// GetOSDResourcesForDeviceClass returns the resources for a device class, if specified
|
||||
func GetOSDResourcesForDeviceClass(resourceSpec ResourceSpec, deviceClass string) (v1.ResourceRequirements, bool) {
|
||||
// if the device class requests specific resources, return them here
|
||||
if resources, ok := resourceSpec[getOSDResourceKeyForDeviceClass(deviceClass)]; ok {
|
||||
return resources, true
|
||||
}
|
||||
// no resources requested specific to the device class
|
||||
return v1.ResourceRequirements{}, false
|
||||
}
|
||||
|
||||
// getOSDResourceKeyForDeviceClass returns key name for device class in resources spec
|
||||
func getOSDResourceKeyForDeviceClass(deviceClass string) string {
|
||||
return ResourcesKeyOSD + "-" + deviceClass
|
||||
|
||||
@@ -354,6 +354,11 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd *OSDInfo, provision
|
||||
logger.Infof("The device class for osd %d is changing from %q to %q", osd.ID, osd.DeviceClass, osdProps.storeConfig.DeviceClass)
|
||||
osd.DeviceClass = osdProps.storeConfig.DeviceClass
|
||||
}
|
||||
// Assign the resources specific to this device class
|
||||
if resources, ok := cephv1.GetOSDResourcesForDeviceClass(c.spec.Resources, osd.DeviceClass); ok {
|
||||
logger.Debugf("assigning resources for device class %q to osd %d: %+v", osd.DeviceClass, osd.ID, resources)
|
||||
osdProps.resources = resources
|
||||
}
|
||||
|
||||
dataDir := k8sutil.DataDir
|
||||
// Create volume config for /dev so the pod can access devices on the host
|
||||
|
||||
@@ -636,13 +636,21 @@ func TestHostNetwork(t *testing.T) {
|
||||
spec := cephv1.ClusterSpec{
|
||||
Storage: storageSpec,
|
||||
Network: cephv1.NetworkSpec{HostNetwork: true},
|
||||
Resources: cephv1.ResourceSpec{
|
||||
"osd-myclass": corev1.ResourceRequirements{
|
||||
Limits: corev1.ResourceList{
|
||||
corev1.ResourceMemory: *resource.NewQuantity(2345.0, resource.BinarySI),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
c := New(context, clusterInfo, spec, "rook/rook:myversion")
|
||||
|
||||
n := c.spec.Storage.ResolveNode(storageSpec.Nodes[0].Name)
|
||||
osd := &OSDInfo{
|
||||
ID: 0,
|
||||
CVMode: "raw",
|
||||
ID: 0,
|
||||
CVMode: "raw",
|
||||
DeviceClass: "myclass",
|
||||
}
|
||||
|
||||
osdProp := osdProperties{
|
||||
@@ -664,6 +672,7 @@ func TestHostNetwork(t *testing.T) {
|
||||
assert.Equal(t, "rook-ceph-osd-0", r.ObjectMeta.Name)
|
||||
assert.Equal(t, true, r.Spec.Template.Spec.HostNetwork)
|
||||
assert.Equal(t, corev1.DNSClusterFirstWithHostNet, r.Spec.Template.Spec.DNSPolicy)
|
||||
assert.Equal(t, "2345", r.Spec.Template.Spec.Containers[0].Resources.Limits.Memory().String())
|
||||
}
|
||||
|
||||
func TestOsdPrepareResources(t *testing.T) {
|
||||
|
||||
Reference in new issue
Block a user