2019-04-04 14:53:53 +00:00
|
|
|
# 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",
|
2023-11-18 16:58:19 +00:00
|
|
|
appName: error "appName must be set",
|
2019-04-04 14:53:53 +00:00
|
|
|
prefix: "", # if set, should be 'foo-'
|
2023-11-18 16:58:19 +00:00
|
|
|
|
|
|
|
# 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,
|
|
|
|
|
2020-10-10 17:44:14 +00:00
|
|
|
password: null,
|
2019-04-04 14:53:53 +00:00
|
|
|
|
2021-02-13 18:44:37 +00:00
|
|
|
# Persist data to disk
|
|
|
|
persistence: true,
|
2023-11-18 16:58:19 +00:00
|
|
|
storageSize: "5Gi",
|
|
|
|
storageClassName: error "storageClassName must be set",
|
2021-02-13 18:44:37 +00:00
|
|
|
|
2019-04-04 14:53:53 +00:00
|
|
|
resources: {
|
2023-11-18 16:58:19 +00:00
|
|
|
requests: { cpu: "50m", memory: "64Mi", },
|
|
|
|
limits: { cpu: "500m", memory: "256Mi", },
|
2019-04-04 14:53:53 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2023-11-18 16:58:19 +00:00
|
|
|
host:: redis.svc.host,
|
2019-04-04 14:53:53 +00:00
|
|
|
|
|
|
|
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,
|
2023-11-18 16:58:19 +00:00
|
|
|
storage:: cfg.storageSize,
|
2023-11-24 10:19:46 +00:00
|
|
|
storageClass:: cfg.storageClassName,
|
2019-04-04 14:53:53 +00:00
|
|
|
},
|
2023-11-18 16:58:19 +00:00
|
|
|
|
2019-04-04 14:53:53 +00:00
|
|
|
deployment: kube.Deployment(redis.makeName("redis")) {
|
|
|
|
metadata+: redis.metadata,
|
|
|
|
spec+: {
|
|
|
|
replicas: 1,
|
|
|
|
template+: {
|
|
|
|
spec+: {
|
|
|
|
volumes_: {
|
2023-11-24 12:28:57 +00:00
|
|
|
data: redis.volumeClaim.volume,
|
2019-04-04 14:53:53 +00:00
|
|
|
},
|
|
|
|
containers_: {
|
|
|
|
redis: kube.Container(redis.makeName("redis")) {
|
|
|
|
image: cfg.image,
|
|
|
|
args: [
|
|
|
|
"redis-server",
|
2021-02-13 18:44:37 +00:00
|
|
|
]
|
|
|
|
+ (if cfg.persistence then ["--appendonly", "yes"] else [])
|
|
|
|
+ (if cfg.password != null then ["--requirepass", "$(REDIS_PASSWORD)"] else []),
|
2019-04-04 14:53:53 +00:00
|
|
|
ports_: {
|
|
|
|
client: { containerPort: 6379 },
|
|
|
|
},
|
|
|
|
volumeMounts_: {
|
|
|
|
data: { mountPath: "/data" },
|
|
|
|
},
|
2020-10-10 17:44:14 +00:00
|
|
|
env_: {
|
|
|
|
[if cfg.password != null then "REDIS_PASSWORD"]: cfg.password,
|
|
|
|
},
|
2019-04-04 14:53:53 +00:00
|
|
|
resources: cfg.resources,
|
|
|
|
},
|
|
|
|
},
|
2020-02-15 11:39:35 +00:00
|
|
|
securityContext: {
|
|
|
|
runAsUser: 100,
|
2021-01-31 19:07:29 +00:00
|
|
|
runAsGroup: 101,
|
|
|
|
fsGroup: 101,
|
2020-02-15 11:39:35 +00:00
|
|
|
},
|
2019-04-04 14:53:53 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2023-11-18 16:58:19 +00:00
|
|
|
|
2019-04-04 14:53:53 +00:00
|
|
|
svc: kube.Service(redis.makeName("redis")) {
|
|
|
|
metadata+: redis.metadata,
|
2023-11-24 10:09:46 +00:00
|
|
|
target:: redis.deployment,
|
2019-04-04 14:53:53 +00:00
|
|
|
},
|
|
|
|
}
|