From c89dd4a92f1ece6d022c8c9439771b7dd0ec3923 Mon Sep 17 00:00:00 2001 From: Andre Marianiello Date: Mon, 5 Feb 2024 11:48:29 -0800 Subject: [PATCH] Use tmpfs mounts when creating a memory-backed emptyDir volume Signed-off-by: Andre Marianiello --- pkg/specgen/generate/kube/kube.go | 7 +++++++ pkg/specgen/generate/kube/volume.go | 13 ++++++++++++- pkg/specgen/generate/kube/volume_test.go | 24 ++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 pkg/specgen/generate/kube/volume_test.go diff --git a/pkg/specgen/generate/kube/kube.go b/pkg/specgen/generate/kube/kube.go index c9361380a9..1ab7eb74e6 100644 --- a/pkg/specgen/generate/kube/kube.go +++ b/pkg/specgen/generate/kube/kube.go @@ -554,6 +554,13 @@ func ToSpecGen(ctx context.Context, opts *CtrSpecGenOptions) (*specgen.SpecGener SubPath: volume.SubPath, } s.Volumes = append(s.Volumes, &emptyDirVolume) + case KubeVolumeTypeEmptyDirTmpfs: + memVolume := spec.Mount{ + Destination: volume.MountPath, + Type: define.TypeTmpfs, + Source: define.TypeTmpfs, + } + s.Mounts = append(s.Mounts, memVolume) default: return nil, errors.New("unsupported volume source type") } diff --git a/pkg/specgen/generate/kube/volume.go b/pkg/specgen/generate/kube/volume.go index 48f9abe094..7e86c618cf 100644 --- a/pkg/specgen/generate/kube/volume.go +++ b/pkg/specgen/generate/kube/volume.go @@ -34,6 +34,7 @@ const ( KubeVolumeTypeCharDevice KubeVolumeTypeSecret KubeVolumeTypeEmptyDir + KubeVolumeTypeEmptyDirTmpfs ) //nolint:revive @@ -263,7 +264,17 @@ func VolumeFromConfigMap(configMapVolumeSource *v1.ConfigMapVolumeSource, config // Create a kubeVolume for an emptyDir volume func VolumeFromEmptyDir(emptyDirVolumeSource *v1.EmptyDirVolumeSource, name string) (*KubeVolume, error) { - return &KubeVolume{Type: KubeVolumeTypeEmptyDir, Source: name}, nil + if emptyDirVolumeSource.Medium == v1.StorageMediumMemory { + return &KubeVolume{ + Type: KubeVolumeTypeEmptyDirTmpfs, + Source: name, + }, nil + } else { + return &KubeVolume{ + Type: KubeVolumeTypeEmptyDir, + Source: name, + }, nil + } } // Create a KubeVolume from one of the supported VolumeSource diff --git a/pkg/specgen/generate/kube/volume_test.go b/pkg/specgen/generate/kube/volume_test.go new file mode 100644 index 0000000000..aa7548c46a --- /dev/null +++ b/pkg/specgen/generate/kube/volume_test.go @@ -0,0 +1,24 @@ +//go:build !remote + +package kube + +import ( + "testing" + + v1 "github.com/containers/podman/v4/pkg/k8s.io/api/core/v1" + "github.com/stretchr/testify/assert" +) + +func TestVolumeFromEmptyDir(t *testing.T) { + emptyDirSource := v1.EmptyDirVolumeSource{} + emptyDirVol, err := VolumeFromEmptyDir(&emptyDirSource, "emptydir") + assert.NoError(t, err) + assert.Equal(t, emptyDirVol.Type, KubeVolumeTypeEmptyDir) + + memEmptyDirSource := v1.EmptyDirVolumeSource{ + Medium: v1.StorageMediumMemory, + } + memEmptyDirVol, err := VolumeFromEmptyDir(&memEmptyDirSource, "emptydir") + assert.NoError(t, err) + assert.Equal(t, memEmptyDirVol.Type, KubeVolumeTypeEmptyDirTmpfs) +}