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:
parent
6bfeae2e69
commit
13b615823f
8 changed files with 92 additions and 0 deletions
Documentation
cmd/po-docgen
pkg
alertmanager
client/monitoring/v1
prometheus
|
@ -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 |
|
||||
|
|
|
@ -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{}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"`
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue