cdk8s-redis-sts
v0.0.5
Published
Create a Replicated Redis Statefulset on Kubernetes, powered by the [cdk8s project](https://cdk8s.io) 🚀
Downloads
4
Readme
cdk8s-redis-sts
Create a Replicated Redis Statefulset on Kubernetes, powered by the cdk8s project 🚀
Disclaimer
This construct is under heavy development, and breaking changes will be introduced very often. Please don't forget to version lock your code if you are using this construct.
Overview
cdk8s-redis-sts is a cdk8s library.
import { Construct } from 'constructs';
import { App, Chart, ChartProps } from 'cdk8s';
import { MyRedis } from 'cdk8s-redis-sts';
export class MyChart extends Chart {
constructor(scope: Construct, id: string, props: RedisProps = { }) {
super(scope, id, props);
new MyRedis(this, 'dev', {
image: 'redis',
namespace: 'databases',
volumeSize: '10Gi',
replicas: 2,
});
}
}
const app = new App();
new MyChart(app, 'dev');
app.synth();
Create a configmap for your redis statefulset with the same name as your statefulset :
apiVersion: v1
kind: ConfigMap
metadata:
name: dev
data:
master.conf: |
bind 0.0.0.0
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
slave.conf: |
slaveof dev 6379 # dev should be the name of your service
Then the Kubernetes manifests created by cdk8s synth
command will have Kubernetes resources such as Statefulset
, and Service
as follows.
apiVersion: v1
kind: Service
metadata:
labels:
app: dev
name: dev
namespace: databases
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: dev
type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: dev
name: dev
namespace: databases
spec:
replicas: 2
selector:
matchLabels:
app: dev
serviceName: dev
template:
metadata:
labels:
app: dev
spec:
containers:
- command:
- bash
- -c
- |-
[[ `hostname` =~ -([0-9]+)$ ]] || exit 1
ordinal=${BASH_REMATCH[1]}
if [[ $ordinal -eq 0 ]]; then
echo "starting master"
redis-server /mnt/redis/master.conf
else
echo "starting slave"
redis-server /mnt/redis/slave.conf
fi
env: []
image: redis
name: redis
ports:
- containerPort: 6379
resources:
limits:
cpu: 400m
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi
volumeMounts:
- mountPath: /data
name: dev
- mountPath: /mnt/redis/
name: dev-redis-conf
terminationGracePeriodSeconds: 10
volumes:
- configMap:
name: dev-redis-conf
name: dev-redis-conf
volumeClaimTemplates:
- metadata:
name: dev
namespace: databases
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Installation
TypeScript
Use yarn
or npm
to install.
$ npm install cdk8s-redis-sts
$ yarn add cdk8s-redis-sts
Python
$ pip install cdk8s-redis-sts
Contribution
Fork (https://github.com/Hunter-Thompson/cdk8s-mongo-sts/fork)
Bootstrap the repo:
npx projen # generates package.json yarn install # installs dependencies
Development scripts: |Command|Description |-|- |
yarn compile
|Compiles typescript => javascript |yarn watch
|Watch & compile |yarn test
|Run unit test & linter through jest |yarn test -u
|Update jest snapshots |yarn run package
|Creates adist
with packages for all languages. |yarn build
|Compile + test + package |yarn bump
|Bump version (with changelog) based on [conventional commits] |yarn release
|Bump + push tomaster
Create a feature branch
Commit your changes
Rebase your local changes against the master branch
Create a new Pull Request (use conventional commits for the title please)