Skip to content

Commit

Permalink
osd: allow for injecting extra env. variables via ConfigMap
Browse files Browse the repository at this point in the history
This patch brings a mechanism to define arbitrary environment
variables in OSD containers (both prepare and main ones).
It bases on idea proposed by Sebastien Han to use an optional
`ConfigMap` instance named `aook-ceph-daemon-env-override`
as the source of these settings.

The need for the patch comes from the fact that, although
crimson finally exposes the same CLI interface as the classical
OSD, the broadly used development builds have ASan built in.
As ASan, by default, complains if it isn't the very first loaded
DSO, we need a way to set the `ASAN_OPTIONS` environment variable
to `verify_asan_link_order=0` to mitigate the early aborts.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
  • Loading branch information
rzarzynski committed Jan 26, 2022
1 parent 8fd1f1a commit 17ca41f
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 0 deletions.
19 changes: 19 additions & 0 deletions deploy/examples/osd-env-override.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# ###############################################################################################################
# The `rook-ceph-osd-env-override` ConfigMap is a development feature
# that allows to inject arbitrary environment variables to OSD-related
# containers created by the operator.
# ###############################################################################################################

apiVersion: v1
kind: ConfigMap
metadata:
name: rook-ceph-osd-env-override
namespace: rook-ceph
data:
# Bypass the ASan's assertion that it is the very first loaded DSO.
# This is necessary for crimson-osd as it's currently built with
# the ASan sanitizer turned on which means the `libasan.so` must
# the be the very first loaded dynamic library. Unfortunately, this
# isn't fulfilled as the containers use `ld.preload`, so ASan was
# aborting the entire OSD.
ASAN_OPTIONS: verify_asan_link_order=0
14 changes: 14 additions & 0 deletions pkg/operator/ceph/cluster/osd/envs.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ const (
osdWalSizeEnvVarName = "ROOK_OSD_WAL_SIZE"
osdsPerDeviceEnvVarName = "ROOK_OSDS_PER_DEVICE"
osdDeviceClassEnvVarName = "ROOK_OSD_DEVICE_CLASS"
osdConfigMapOverrideName = "rook-ceph-osd-env-override"
// EncryptedDeviceEnvVarName is used in the pod spec to indicate whether the OSD is encrypted or not
EncryptedDeviceEnvVarName = "ROOK_ENCRYPTED_DEVICE"
PVCNameEnvVarName = "ROOK_PVC_NAME"
Expand Down Expand Up @@ -213,6 +214,19 @@ func osdActivateEnvVar() []v1.EnvVar {
return append(cephVolumeEnvVar(), monEnvVars...)
}

func getEnvFromSources() []v1.EnvFromSource {
optionalConfigMapRef := true

return []v1.EnvFromSource{
{
ConfigMapRef: &v1.ConfigMapEnvSource{
LocalObjectReference: v1.LocalObjectReference{Name: osdConfigMapOverrideName},
Optional: &optionalConfigMapRef,
},
},
}
}

func getTcmallocMaxTotalThreadCacheBytes(tcmallocMaxTotalThreadCacheBytes string) v1.EnvVar {
var value string
// If empty we read the default value from the file coming with the package
Expand Down
1 change: 1 addition & 0 deletions pkg/operator/ceph/cluster/osd/provision_spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,7 @@ func (c *Cluster) provisionOSDContainer(osdProps osdProperties, copyBinariesMoun
Image: c.spec.CephVersion.Image,
VolumeMounts: volumeMounts,
Env: envVars,
EnvFrom: getEnvFromSources(),
SecurityContext: &v1.SecurityContext{
Privileged: &privileged,
RunAsUser: &runAsUser,
Expand Down
3 changes: 3 additions & 0 deletions pkg/operator/ceph/cluster/osd/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,7 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd OSDInfo, provisionC
Image: c.rookVersion,
VolumeMounts: configVolumeMounts,
Env: configEnvVars,
EnvFrom: getEnvFromSources(),
SecurityContext: securityContext,
})
}
Expand Down Expand Up @@ -549,6 +550,7 @@ func (c *Cluster) makeDeployment(osdProps osdProperties, osd OSDInfo, provisionC
Image: c.spec.CephVersion.Image,
VolumeMounts: volumeMounts,
Env: envVars,
EnvFrom: getEnvFromSources(),
Resources: osdProps.resources,
SecurityContext: securityContext,
StartupProbe: controller.GenerateStartupProbeExecDaemon(opconfig.OsdType, osdID),
Expand Down Expand Up @@ -767,6 +769,7 @@ func (c *Cluster) getActivateOSDInitContainer(configDir, namespace, osdID string
VolumeMounts: volMounts,
SecurityContext: controller.PrivilegedContext(true),
Env: envVars,
EnvFrom: getEnvFromSources(),
Resources: osdProps.resources,
}

Expand Down

0 comments on commit 17ca41f

Please sign in to comment.