mirror of
https://gerrit.hackerspace.pl/hscloud
synced 2024-10-18 05:37:46 +00:00
radex
ec11a8173e
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>
94 lines
3 KiB
Text
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,
|
|
},
|
|
}
|