From cd5ff1aff81374846f029ff5d5e4cb36bcbdc41d Mon Sep 17 00:00:00 2001 From: Guillaume Abrioux Date: Thu, 24 Oct 2024 10:08:15 +0200 Subject: [PATCH] osd: mount /run/udev in the init container for ceph-volume activate The /run/udev directory is now mounted in the OSD init container. This change is necessary because `ceph-volume activate` needs access to /run/udev [1] in order to properly handle devices. Without this mount, `ceph-volume activate` could fail to discover devices during OSD initialization. [1] https://github.com/ceph/ceph/commit/c2e8c295dc46f1bd74861feb163d9d82f8bb5509 Signed-off-by: Guillaume Abrioux (cherry picked from commit dbcd0d46dd09d6b65047ed8f406714bac0871696) Signed-off-by: Satoru Takeuchi --- pkg/operator/ceph/cluster/osd/spec.go | 3 +++ pkg/operator/ceph/cluster/osd/spec_test.go | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/operator/ceph/cluster/osd/spec.go b/pkg/operator/ceph/cluster/osd/spec.go index 98d927564..82f9b79e9 100644 --- a/pkg/operator/ceph/cluster/osd/spec.go +++ b/pkg/operator/ceph/cluster/osd/spec.go @@ -886,10 +886,13 @@ func (c *Cluster) getActivateOSDInitContainer(configDir, namespace, osdID string adminKeyringVol, adminKeyringVolMount := cephkey.Volume().Admin(), cephkey.VolumeMount().Admin() volume = append(volume, adminKeyringVol) + udevVolume := v1.Volume{Name: "udev", VolumeSource: v1.VolumeSource{HostPath: &v1.HostPathVolumeSource{Path: "/run/udev"}}} + volume = append(volume, udevVolume) volMounts := []v1.VolumeMount{ {Name: activateOSDVolumeName, MountPath: activateOSDMountPathID}, {Name: "devices", MountPath: "/dev"}, {Name: k8sutil.ConfigOverrideName, ReadOnly: true, MountPath: tempEtcCephDir}, + {Name: "udev", MountPath: "/run/udev"}, adminKeyringVolMount, } diff --git a/pkg/operator/ceph/cluster/osd/spec_test.go b/pkg/operator/ceph/cluster/osd/spec_test.go index 6532d7c85..615e041d8 100644 --- a/pkg/operator/ceph/cluster/osd/spec_test.go +++ b/pkg/operator/ceph/cluster/osd/spec_test.go @@ -143,10 +143,10 @@ func testPodDevices(t *testing.T, dataDir, deviceName string, allDevices bool) { assert.Equal(t, corev1.RestartPolicyAlways, deployment.Spec.Template.Spec.RestartPolicy) assert.Equal(t, "my-priority-class", deployment.Spec.Template.Spec.PriorityClassName) if devMountNeeded && len(dataDir) > 0 { - assert.Equal(t, 9, len(deployment.Spec.Template.Spec.Volumes)) + assert.Equal(t, 10, len(deployment.Spec.Template.Spec.Volumes)) } if devMountNeeded && len(dataDir) == 0 { - assert.Equal(t, 9, len(deployment.Spec.Template.Spec.Volumes)) + assert.Equal(t, 10, len(deployment.Spec.Template.Spec.Volumes)) } if !devMountNeeded && len(dataDir) > 0 { assert.Equal(t, 1, len(deployment.Spec.Template.Spec.Volumes)) @@ -164,7 +164,7 @@ func testPodDevices(t *testing.T, dataDir, deviceName string, allDevices bool) { initCont := deployment.Spec.Template.Spec.InitContainers[0] assert.Equal(t, "quay.io/ceph/ceph:v15", initCont.Image) assert.Equal(t, "activate", initCont.Name) - assert.Equal(t, 4, len(initCont.VolumeMounts)) + assert.Equal(t, 5, len(initCont.VolumeMounts)) initCont = deployment.Spec.Template.Spec.InitContainers[1] assert.Equal(t, "quay.io/ceph/ceph:v15", initCont.Image) assert.Equal(t, "expand-bluefs", initCont.Name)