Skip to content

Commit

Permalink
jsonnet/telemeter: add Memcached manifests
Browse files Browse the repository at this point in the history
This commit adds Jsonnet code to generate Kubernetes manifests for the
Memcached instances used by Telemeter server for caching auth responses.
Generation of these manifests can be toggled off by setting the replica
count to `0`.

Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
  • Loading branch information
squat committed Dec 10, 2019
1 parent a5af65a commit a118460
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 3 deletions.
3 changes: 2 additions & 1 deletion jsonnet/server.jsonnet
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
local t = (import 'telemeter/server.libsonnet');

{ [name]: t.telemeterServer[name] for name in std.objectFields(t.telemeterServer) }
{ [name]: t.telemeterServer[name] for name in std.objectFields(t.telemeterServer) } +
{ [name + 'Memcached']: t.memcached[name] for name in std.objectFields(t.memcached) if t.memcached.replicas > 0 }
12 changes: 11 additions & 1 deletion jsonnet/telemeter/server.libsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,22 @@ local list = import 'lib/list.libsonnet';

(import 'server/kubernetes.libsonnet') + {
local ts = super.telemeterServer,
local m = super.memcached,
telemeterServer+:: {
list: list.asList('telemeter', ts, [])
+ list.withAuthorizeURL($._config)
+ list.withNamespace($._config)
+ list.withServerImage($._config)
+ list.withResourceRequestsAndLimits('telemeter-server', $._config.telemeterServer.resourceRequests, $._config.telemeterServer.resourceLimits)
+ list.withResourceRequestsAndLimits('telemeter-server', $._config.telemeterServer.resourceRequests, $._config.telemeterServer.resourceLimits),
},
memcached+:: {
list: list.asList('memcached', m, [
{
name: 'MEMCACHED_IMAGE',
value: m.image,
},
])
+ list.withNamespace($._config),
},
} + {
_config+:: {
Expand Down
61 changes: 60 additions & 1 deletion jsonnet/telemeter/server/kubernetes.libsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,19 @@ local clusterPort = 8082;
$._config.telemeterServer.elideLabels
);

local memcachedReplicas = std.range(1, $.memcached.replicas);
local memcached = [
'--memcached=%s-%d.%s.%s.svc.cluster.local:%d' % [
$.memcached.statefulSet.metadata.name,
i,
$.memcached.service.metadata.name,
$.memcached.service.metadata.namespace,
$.memcached.service.spec.ports[0].port,
]
for i in memcachedReplicas
];


local telemeterServer =
container.new('telemeter-server', $._config.imageRepos.telemeterServer + ':' + $._config.versions.telemeterServer) +
container.withCommand([
Expand All @@ -79,7 +92,7 @@ local clusterPort = 8082;
'--oidc-issuer=$(OIDC_ISSUER)',
'--client-id=$(CLIENT_ID)',
'--client-secret=$(CLIENT_SECRET)',
] + whitelist + elide) +
] + memcached + whitelist + elide) +
container.withPorts([
containerPort.newNamed('external', externalPort),
containerPort.newNamed('internal', internalPort),
Expand Down Expand Up @@ -224,4 +237,50 @@ local clusterPort = 8082;
},
},
},

memcached+:: {
image:: 'docker.io/memcached:1.5.20-alpine',
replicas:: 3,

service:
local service = k.core.v1.service;
local ports = service.mixin.spec.portsType;

service.new(
'memcached',
$.memcached.statefulSet.metadata.labels,
[
ports.newNamed('memcached', 11211, 11211),
]
) +
service.mixin.metadata.withNamespace($._config.namespace) +
service.mixin.metadata.withLabels({ 'app.kubernetes.io/name': $.memcached.service.metadata.name }) +
service.mixin.spec.withClusterIp('None'),

statefulSet:
local sts = k.apps.v1beta2.statefulSet;
local volume = sts.mixin.spec.template.spec.volumesType;
local container = sts.mixin.spec.template.spec.containersType;
local containerEnv = container.envType;
local containerVolumeMount = container.volumeMountsType;

local c =
container.new($.memcached.statefulSet.metadata.name, $.memcached.image) +
container.withPorts([
{ name: 'memcached', containerPort: $.memcached.service.spec.ports[0].port },
]) +
container.mixin.resources.withRequests({ cpu: '100m', memory: '512Mi' }) +
container.mixin.resources.withLimits({ cpu: '1', memory: '1Gi' });

sts.new('memcached', $.memcached.replicas, c, [], $.memcached.statefulSet.metadata.labels) +
sts.mixin.metadata.withNamespace($._config.namespace) +
sts.mixin.metadata.withLabels({ 'app.kubernetes.io/name': $.memcached.statefulSet.metadata.name }) +
sts.mixin.spec.withServiceName($.memcached.service.metadata.name) +
sts.mixin.spec.selector.withMatchLabels($.memcached.statefulSet.metadata.labels) +
{
spec+: {
volumeClaimTemplates:: null,
},
},
},
}

0 comments on commit a118460

Please sign in to comment.