-
Notifications
You must be signed in to change notification settings - Fork 53
/
statefulsets.go
119 lines (116 loc) · 3.08 KB
/
statefulsets.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package cortex
import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr"
)
func (r *Reconciler) highlyAvailableStatefulSets() []*appsv1.StatefulSet {
compactor := r.buildCortexStatefulSet("compactor",
WithOverrides(r.mc.Spec.Cortex.Workloads.Compactor),
)
storeGateway := r.buildCortexStatefulSet("store-gateway",
ServiceName("cortex-store-gateway-headless"),
)
ingester := r.buildCortexStatefulSet("ingester",
Lifecycle(&corev1.Lifecycle{
PreStop: &corev1.LifecycleHandler{
HTTPGet: &corev1.HTTPGetAction{
Path: "/ingester/shutdown",
Port: intstr.FromString("http-metrics"),
},
},
}),
WithOverrides(r.mc.Spec.Cortex.Workloads.Ingester),
NoLivenessProbe(),
NoStartupProbe(),
TerminationGracePeriodSeconds(600),
VolumeClaimTemplates(corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "data",
},
Spec: corev1.PersistentVolumeClaimSpec{
AccessModes: []corev1.PersistentVolumeAccessMode{
corev1.ReadWriteOnce,
},
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("64Gi"),
},
},
},
}),
)
alertmanager := r.buildCortexStatefulSet("alertmanager",
ExtraVolumes(corev1.Volume{
Name: "fallback-config",
VolumeSource: corev1.VolumeSource{
ConfigMap: &corev1.ConfigMapVolumeSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: "alertmanager-fallback-config",
},
Items: []corev1.KeyToPath{
{
Key: "fallback.yaml",
Path: "fallback.yaml",
},
},
},
},
}),
ExtraVolumeMounts(corev1.VolumeMount{
Name: "fallback-config",
MountPath: "/etc/alertmanager/fallback.yaml",
SubPath: "fallback.yaml",
}),
)
querier := r.buildCortexStatefulSet("querier",
Ports(HTTP),
WithOverrides(r.mc.Spec.Cortex.Workloads.Querier),
)
return []*appsv1.StatefulSet{
alertmanager,
ingester,
compactor,
storeGateway,
querier,
}
}
func (r *Reconciler) allInOneStatefulSets() []*appsv1.StatefulSet {
all := r.buildCortexStatefulSet("all",
WithOverrides(r.mc.Spec.Cortex.Workloads.AllInOne),
ExtraVolumeMounts(corev1.VolumeMount{
Name: "tmp",
MountPath: "/rules",
}),
ExtraVolumes(corev1.Volume{
Name: "tmp",
VolumeSource: corev1.VolumeSource{
EmptyDir: &corev1.EmptyDirVolumeSource{},
},
}),
Replicas(1), // Force replicas to 1 for all-in-one mode
NoLivenessProbe(),
NoStartupProbe(),
TerminationGracePeriodSeconds(600),
VolumeClaimTemplates(corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: "data",
},
Spec: corev1.PersistentVolumeClaimSpec{
AccessModes: []corev1.PersistentVolumeAccessMode{
corev1.ReadWriteOnce,
},
Resources: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("64Gi"), // TODO: Make this configurable
},
},
},
}),
)
return []*appsv1.StatefulSet{
all,
}
}