/
cache.go
75 lines (66 loc) · 2.74 KB
/
cache.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
package observatorium
import (
"maps"
"github.com/observatorium/observatorium/configuration_go/abstr/kubernetes/memcached"
kghelpers "github.com/observatorium/observatorium/configuration_go/kubegen/helpers"
"github.com/observatorium/observatorium/configuration_go/kubegen/workload"
monv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
policyv1 "k8s.io/api/policy/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/intstr"
)
func makeMemcached(name, namespace string, preManifestHook func(*memcached.MemcachedDeployment)) []runtime.Object {
// K8s config
memcachedDeployment := memcached.NewMemcached()
memcachedDeployment.Name = name
memcachedDeployment.Image = "quay.io/app-sre/memcached"
memcachedDeployment.ImageTag = "1.5"
memcachedDeployment.Namespace = namespace
memcachedDeployment.Replicas = 1
delete(memcachedDeployment.ContainerResources.Limits, corev1.ResourceCPU)
memcachedDeployment.SecurityContext = nil
memcachedDeployment.ContainerResources.Requests[corev1.ResourceCPU] = resource.MustParse("500m")
memcachedDeployment.ContainerResources.Requests[corev1.ResourceMemory] = resource.MustParse("2Gi")
memcachedDeployment.ContainerResources.Limits[corev1.ResourceMemory] = resource.MustParse("3Gi")
memcachedDeployment.ExporterImage = "quay.io/prometheus/memcached-exporter"
memcachedDeployment.ExporterImageTag = "v0.13.0"
// Compactor config
memcachedDeployment.Options.MemoryLimit = 2048
memcachedDeployment.Options.MaxItemSize = "5m"
memcachedDeployment.Options.ConnLimit = 3072
memcachedDeployment.Options.Verbose = true
// Execute preManifestsHook
executeIfNotNil(preManifestHook, memcachedDeployment)
// Post process
manifests := memcachedDeployment.Objects()
postProcessServiceMonitor(kghelpers.GetObject[*monv1.ServiceMonitor](manifests, ""), memcachedDeployment.Namespace)
addQuayPullSecret(kghelpers.GetObject[*corev1.ServiceAccount](manifests, ""))
// Add pod disruption budget
labels := maps.Clone(kghelpers.GetObject[*appsv1.Deployment](manifests, "").ObjectMeta.Labels)
delete(labels, workload.VersionLabel)
manifests = append(manifests, &policyv1.PodDisruptionBudget{
TypeMeta: metav1.TypeMeta{
Kind: "PodDisruptionBudget",
APIVersion: policyv1.SchemeGroupVersion.String(),
},
ObjectMeta: metav1.ObjectMeta{
Name: memcachedDeployment.Name,
Namespace: namespace,
Labels: labels,
},
Spec: policyv1.PodDisruptionBudgetSpec{
MaxUnavailable: &intstr.IntOrString{
Type: intstr.Int,
IntVal: 1,
},
Selector: &metav1.LabelSelector{
MatchLabels: labels,
},
},
})
return manifests
}