Skip to content

Generate memcached for obs api prod #779

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 14, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions magefiles/cache.go
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@ import (
"fmt"

"github.com/observatorium/observatorium/configuration_go/kubegen/openshift"
"github.com/philipgough/mimic"
"github.com/philipgough/mimic/encoding"
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"

@@ -79,13 +80,25 @@ func (f *memcachedFlags) ToArgs() []string {
}

func (s Stage) Cache() {
gen := s.generator(cacheName)
gwConf := s.gatewayCache(StageMaps)
gen := func() *mimic.Generator {
return s.generator(cacheName)
}
cache(gen, StageMaps, s.namespace())
}

func (p Production) Cache() {
gen := func() *mimic.Generator {
return p.generator(cacheName)
}
cache(gen, ProductionMaps, p.namespace())
}

func cache(g func() *mimic.Generator, m TemplateMaps, namespace string) {
gwConf := gatewayCache(m, namespace)
var sms []runtime.Object

objs := []runtime.Object{
memcachedStatefulSet(gwConf, StageMaps),
memcachedStatefulSet(gwConf, m),
createServiceAccount(gwConf.ServiceAccount, gwConf.Namespace, gwConf.Labels),
createCacheHeadlessService(gwConf),
}
@@ -96,19 +109,19 @@ func (s Stage) Cache() {
Name: cacheName,
}, nil)
enc := encoding.GhodssYAML(template)
gen := g()
gen.Add(cacheTemplate, enc)
gen.Generate()

gen = s.generator(cacheName)
template = openshift.WrapInTemplate(sms, metav1.ObjectMeta{
Name: cacheName + "-service-monitor",
}, nil)
gen = g()
gen.Add("service-monitor-"+cacheTemplate, encoding.GhodssYAML(template))
gen.Generate()

}

func (s Stage) gatewayCache(m TemplateMaps) *memcachedConfig {
func gatewayCache(m TemplateMaps, namespace string) *memcachedConfig {
return &memcachedConfig{
Flags: &memcachedFlags{
Memory: 2048,
@@ -117,7 +130,7 @@ func (s Stage) gatewayCache(m TemplateMaps) *memcachedConfig {
Verbose: true,
},
Name: gatewayCacheName,
Namespace: s.namespace(),
Namespace: namespace,
MemcachedImage: m.Images[apiCache],
ExporterImage: m.Images[memcachedExporter],
Labels: map[string]string{
112 changes: 112 additions & 0 deletions resources/services/memcached/production/memcached-template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
apiVersion: template.openshift.io/v1
kind: Template
metadata:
creationTimestamp: null
name: memcached
objects:
- apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
name: api-memcached
namespace: rhobs-production
spec:
clusterIP: None
ports:
- name: client
port: 11211
protocol: TCP
targetPort: 11211
- name: metrics
port: 9150
protocol: TCP
targetPort: 9150
selector:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
status:
loadBalancer: {}
- apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
name: api-memcached
namespace: rhobs-production
- apiVersion: apps/v1
kind: StatefulSet
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
name: api-memcached
namespace: rhobs-production
spec:
podManagementPolicy: OrderedReady
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
serviceName: api-memcached
template:
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
spec:
containers:
- args:
- -m 2048
- -c 3072
- -I 5m
- -v
imagePullPolicy: IfNotPresent
name: memcached
ports:
- containerPort: 11211
name: client
protocol: TCP
resources: {}
terminationMessagePolicy: FallbackToLogsOnError
- args:
- --memcached.address=localhost:11211
- --web.listen-address=0.0.0.0:9150
imagePullPolicy: IfNotPresent
name: exporter
ports:
- containerPort: 9150
name: metrics
protocol: TCP
resources: {}
securityContext: {}
serviceAccountName: api-memcached
updateStrategy: {}
status:
availableReplicas: 0
replicas: 0
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
apiVersion: template.openshift.io/v1
kind: Template
metadata:
creationTimestamp: null
name: memcached-service-monitor
objects:
- apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""
prometheus: app-sre
name: api-memcached
namespace: openshift-customer-monitoring
spec:
endpoints:
- honorLabels: true
interval: 30s
path: /metrics
port: metrics
namespaceSelector:
matchNames:
- rhobs-production
selector:
matchLabels:
app.kubernetes.io/component: api-memcached
app.kubernetes.io/instance: rhobs
app.kubernetes.io/name: memcached
app.kubernetes.io/part-of: observatorium
app.kubernetes.io/version: ""