1
0
Fork 0
mirror of https://github.com/prometheus-operator/prometheus-operator.git synced 2025-04-21 11:48:53 +00:00

storagespec: add EmptyDirVolumeSource to prometheus/alertmanager statefulsets

This commit is contained in:
crandl201 2018-01-05 15:23:16 -05:00
parent 6bfeae2e69
commit 13b615823f
8 changed files with 92 additions and 0 deletions

View file

@ -320,6 +320,7 @@ StorageSpec defines the configured storage for a group Prometheus servers.
| Field | Description | Scheme | Required |
| ----- | ----------- | ------ | -------- |
| class | Name of the StorageClass to use when requesting storage provisioning. More info: https://kubernetes.io/docs/user-guide/persistent-volumes/#storageclasses DEPRECATED | string | true |
| emptyDir | EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More info: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir | *[v1.EmptyDirVolumeSource](https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#emptydirvolumesource-v1-core) | false |
| selector | A label query over volumes to consider for binding. DEPRECATED | *[metav1.LabelSelector](https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#labelselector-v1-meta) | true |
| resources | Resources represents the minimum resources the volume should have. More info: http://kubernetes.io/docs/user-guide/persistent-volumes#resources DEPRECATED | [v1.ResourceRequirements](https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#resourcerequirements-v1-core) | true |
| volumeClaimTemplate | A PVC spec to be used by the Prometheus StatefulSets. | [v1.PersistentVolumeClaim](https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#persistentvolumeclaim-v1-core) | false |

View file

@ -47,6 +47,7 @@ var (
"v1.LocalObjectReference": "https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#localobjectreference-v1-core",
"v1.SecretKeySelector": "https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#secretkeyselector-v1-core",
"v1.PersistentVolumeClaim": "https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#persistentvolumeclaim-v1-core",
"v1.EmptyDirVolumeSource": "https://v1-6.docs.kubernetes.io/docs/api-reference/v1.6/#emptydirvolumesource-v1-core",
}
selfLinks = map[string]string{}

View file

@ -106,6 +106,14 @@ func makeStatefulSet(am *monitoringv1.Alertmanager, old *v1beta1.StatefulSet, co
EmptyDir: &v1.EmptyDirVolumeSource{},
},
})
} else if storageSpec.EmptyDir != nil {
emptyDir := storageSpec.EmptyDir
statefulset.Spec.Template.Spec.Volumes = append(statefulset.Spec.Template.Spec.Volumes, v1.Volume{
Name: volumeName(am.Name),
VolumeSource: v1.VolumeSource{
EmptyDir: emptyDir,
},
})
} else {
pvcTemplate := storageSpec.VolumeClaimTemplate
pvcTemplate.Name = volumeName(am.Name)

View file

@ -145,3 +145,34 @@ func TestStatefulSetPVC(t *testing.T) {
t.Fatal("Error adding PVC Spec to StatefulSetSpec")
}
}
func TestStatefulEmptyDir(t *testing.T) {
labels := map[string]string{
"testlabel": "testlabelvalue",
}
annotations := map[string]string{
"testannotation": "testannotationvalue",
}
emptyDir := v1.EmptyDirVolumeSource{
Medium: v1.StorageMediumMemory,
}
sset, err := makeStatefulSet(&monitoringv1.Alertmanager{
ObjectMeta: metav1.ObjectMeta{
Labels: labels,
Annotations: annotations,
},
Spec: monitoringv1.AlertmanagerSpec{
Storage: &monitoringv1.StorageSpec{
EmptyDir: &emptyDir,
},
},
}, nil, defaultTestConfig)
require.NoError(t, err)
ssetVolumes := sset.Spec.Template.Spec.Volumes
if ssetVolumes[len(ssetVolumes)-1].VolumeSource.EmptyDir != nil && !reflect.DeepEqual(emptyDir.Medium, ssetVolumes[len(ssetVolumes)-1].VolumeSource.EmptyDir.Medium) {
t.Fatal("Error adding EmptyDir Spec to StatefulSetSpec")
}
}

View file

@ -157,6 +157,9 @@ type StorageSpec struct {
// info: https://kubernetes.io/docs/user-guide/persistent-volumes/#storageclasses
// DEPRECATED
Class string `json:"class"`
// EmptyDirVolumeSource to be used by the Prometheus StatefulSets. If specified, used in place of any volumeClaimTemplate. More
// info: https://kubernetes.io/docs/concepts/storage/volumes/#emptydir
EmptyDir *v1.EmptyDirVolumeSource `json:"emptyDir,omitempty"`
// A label query over volumes to consider for binding.
// DEPRECATED
Selector *metav1.LabelSelector `json:"selector"`

View file

@ -798,6 +798,15 @@ func (in *ServiceMonitorSpec) DeepCopy() *ServiceMonitorSpec {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *StorageSpec) DeepCopyInto(out *StorageSpec) {
*out = *in
if in.EmptyDir != nil {
in, out := &in.EmptyDir, &out.EmptyDir
if *in == nil {
*out = nil
} else {
*out = new(core_v1.EmptyDirVolumeSource)
(*in).DeepCopyInto(*out)
}
}
if in.Selector != nil {
in, out := &in.Selector, &out.Selector
if *in == nil {

View file

@ -140,6 +140,14 @@ func makeStatefulSet(p monitoringv1.Prometheus, old *v1beta1.StatefulSet, config
EmptyDir: &v1.EmptyDirVolumeSource{},
},
})
} else if storageSpec.EmptyDir != nil {
emptyDir := storageSpec.EmptyDir
statefulset.Spec.Template.Spec.Volumes = append(statefulset.Spec.Template.Spec.Volumes, v1.Volume{
Name: volumeName(p.Name),
VolumeSource: v1.VolumeSource{
EmptyDir: emptyDir,
},
})
} else {
pvcTemplate := storageSpec.VolumeClaimTemplate
pvcTemplate.Name = volumeName(p.Name)

View file

@ -117,6 +117,37 @@ func TestStatefulSetPVC(t *testing.T) {
}
func TestStatefulSetEmptyDir(t *testing.T) {
labels := map[string]string{
"testlabel": "testlabelvalue",
}
annotations := map[string]string{
"testannotation": "testannotationvalue",
}
emptyDir := v1.EmptyDirVolumeSource{
Medium: v1.StorageMediumMemory,
}
sset, err := makeStatefulSet(monitoringv1.Prometheus{
ObjectMeta: metav1.ObjectMeta{
Labels: labels,
Annotations: annotations,
},
Spec: monitoringv1.PrometheusSpec{
Storage: &monitoringv1.StorageSpec{
EmptyDir: &emptyDir,
},
},
}, nil, defaultTestConfig, []*v1.ConfigMap{})
require.NoError(t, err)
ssetVolumes := sset.Spec.Template.Spec.Volumes
if ssetVolumes[len(ssetVolumes)-1].VolumeSource.EmptyDir != nil && !reflect.DeepEqual(emptyDir.Medium, ssetVolumes[len(ssetVolumes)-1].VolumeSource.EmptyDir.Medium) {
t.Fatal("Error adding EmptyDir Spec to StatefulSetSpec")
}
}
func TestStatefulSetVolumeInitial(t *testing.T) {
expected := &v1beta1.StatefulSet{
Spec: v1beta1.StatefulSetSpec{