4
0
Fork 2
mirror of https://gerrit.hackerspace.pl/hscloud synced 2024-10-18 08:27:46 +00:00
hscloud/kube/redis.libsonnet
radex ec11a8173e kube/redis: explicit version and storage class, clean up
By forcing version to be explicit, we encourage users to pick the latest version when they first deploy, or to upgrade to latest from the old 5.0.4.

Also, non-existent storage class default is removed in favor of explicitly asking for storageClassName.

Change-Id: Ibf9113eae4c2be20bf273c7536176b42fac52256
Reviewed-on: https://gerrit.hackerspace.pl/c/hscloud/+/1796
Reviewed-by: q3k <q3k@hackerspace.pl>
Reviewed-by: radex <radex@hackerspace.pl>
2024-02-04 14:23:06 +00:00

94 lines
3 KiB
Text

# Redis on Kubernetes.
# For now, single instance (no redis-sentinel or redis-cluster)
local kube = import "kube.libsonnet";
{
local redis = self,
local cfg = redis.cfg,
cfg:: {
namespace: error "namespace must be set",
appName: error "appName must be set",
prefix: "", # if set, should be 'foo-'
# valid version tag for https://hub.docker.com/_/redis/
version: error "version must be set (to a valid docker hub tag, e.g. 5.0.4-alpine)",
image: "redis:" + self.version,
password: null,
# Persist data to disk
persistence: true,
storageSize: "5Gi",
storageClassName: error "storageClassName must be set",
resources: {
requests: { cpu: "50m", memory: "64Mi", },
limits: { cpu: "500m", memory: "256Mi", },
},
},
host:: redis.svc.host,
makeName(suffix):: cfg.prefix + suffix,
metadata:: {
namespace: cfg.namespace,
labels: {
"app.kubernetes.io/name": cfg.appName,
"app.kubernetes.io/managed-by": "kubecfg",
"app.kubernetes.io/component": "redis",
},
},
volumeClaim: kube.PersistentVolumeClaim(redis.makeName("redis")) {
metadata+: redis.metadata,
storage:: cfg.storageSize,
storageClass:: cfg.storageClassName,
},
deployment: kube.Deployment(redis.makeName("redis")) {
metadata+: redis.metadata,
spec+: {
replicas: 1,
template+: {
spec+: {
volumes_: {
data: redis.volumeClaim.volume,
},
containers_: {
redis: kube.Container(redis.makeName("redis")) {
image: cfg.image,
args: [
"redis-server",
]
+ (if cfg.persistence then ["--appendonly", "yes"] else [])
+ (if cfg.password != null then ["--requirepass", "$(REDIS_PASSWORD)"] else []),
ports_: {
client: { containerPort: 6379 },
},
volumeMounts_: {
data: { mountPath: "/data" },
},
env_: {
[if cfg.password != null then "REDIS_PASSWORD"]: cfg.password,
},
resources: cfg.resources,
},
},
securityContext: {
runAsUser: 100,
runAsGroup: 101,
fsGroup: 101,
},
},
},
},
},
svc: kube.Service(redis.makeName("redis")) {
metadata+: redis.metadata,
target:: redis.deployment,
},
}