Skip to content

Commit b0eb15f

Browse files
authored
[ ADD ] : Scylladb helm chart(#47)
1 parent 0e79ff8 commit b0eb15f

File tree

12 files changed

+318
-37
lines changed

12 files changed

+318
-37
lines changed

charts/scylladb/Chart.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: v1
2+
appVersion: "1.0"
3+
description: Helm chart for deploying ScyllaDB
4+
name: scylladb
5+
version: 0.0.1
6+
icon: "https://zop.dev/logo.png"
7+
maintainers:
8+
- name: ZopDev
9+
url: zop.dev
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{{- range $index, $service := .Values.services }}
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: {{ $.Release.Name }}-{{ $service.database }}-{{ $service.name }}-scylladb-configmap
6+
namespace: {{ $.Release.Namespace }}
7+
data:
8+
SCYLLADB_HOST: {{ $.Release.Name }}-scylladb
9+
SCYLLADB_KEYSPACE: "{{ $service.database }}"
10+
SCYLLADB_PORT: "9042"
11+
SCYLLADB_USERNAME: "{{ $service.name }}-user"
12+
---
13+
{{- end }}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{{- range $index, $service := .Values.services }}
2+
apiVersion: v1
3+
kind: Pod
4+
metadata:
5+
name: {{ $.Release.Name }}-{{ $service.name }}-scylladb-init
6+
namespace: {{ $.Release.Namespace }}
7+
spec:
8+
containers:
9+
- name: scylladb-init
10+
image: {{ $.Values.image }}
11+
command:
12+
- /bin/bash
13+
- -c
14+
- |
15+
until cqlsh -u superuser -p $SCYLLADB_PASSWORD {{ $.Release.Name }}-scylladb; do
16+
echo "Waiting for ScyllaDB to be ready..."
17+
sleep 5
18+
done
19+
cqlsh -u superuser -p $SCYLLADB_PASSWORD {{ $.Release.Name }}-scylladb -e "SOURCE '/etc/config/init-schema.cql';"
20+
env:
21+
- name: SCYLLADB_PASSWORD
22+
valueFrom:
23+
secretKeyRef:
24+
name: {{ $.Release.Name }}-scylladb-database-secret
25+
key: pod_password
26+
volumeMounts:
27+
- name: script-volume
28+
mountPath: /etc/config
29+
volumes:
30+
- name: script-volume
31+
configMap:
32+
name: {{ $.Release.Name }}-{{ $service.name }}-init-script
33+
restartPolicy: OnFailure
34+
---
35+
{{- end}}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{{- range $index, $service := .Values.services }}
2+
apiVersion: v1
3+
kind: Secret
4+
metadata:
5+
name: {{ $.Release.Name }}-{{ $service.database }}-{{ $service.name}}-scylladb-database-secret
6+
namespace: {{ $.Release.Namespace }}
7+
type: Opaque
8+
data:
9+
SCYLLADB_PASSWORD: {{ $service.password | b64enc }}
10+
---
11+
{{- end }}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{{- range $index, $service := .Values.services }}
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: {{ $.Release.Name }}-{{ $service.name }}-init-script
6+
namespace: {{ $.Release.Namespace }}
7+
data:
8+
init-schema.cql: |
9+
CREATE KEYSPACE IF NOT EXISTS "{{ $service.database }}"
10+
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
11+
12+
USE "{{ $service.database }}";
13+
CREATE ROLE IF NOT EXISTS "{{ $service.name }}-user" WITH PASSWORD = '{{ $service.password }}' AND LOGIN = true;
14+
GRANT ALL PERMISSIONS ON KEYSPACE "{{ $service.database }}" TO "{{ $service.name }}-user";
15+
---
16+
{{- end }}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: {{ $.Release.Name }}-scylladb-database-secret
5+
namespace: {{ .Release.Namespace }}
6+
type: Opaque
7+
data:
8+
pod_password: {{ .Values.scylladbRootPassword | b64enc }}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: {{ $.Release.Name }}-scylladb
5+
labels:
6+
app: {{ $.Release.Name }}-scylladb
7+
spec:
8+
type: ClusterIP
9+
clusterIP: None
10+
ports:
11+
- port: 9042
12+
targetPort: 9042
13+
selector:
14+
app: {{ $.Release.Name }}-scylladb
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: {{ $.Release.Name }}-scylladb
5+
labels:
6+
app: {{ $.Release.Name }}-scylladb
7+
spec:
8+
replicas: 1
9+
serviceName: {{ $.Release.Name }}-scylladb
10+
selector:
11+
matchLabels:
12+
app: {{ $.Release.Name }}-scylladb
13+
template:
14+
metadata:
15+
labels:
16+
app: {{ $.Release.Name }}-scylladb
17+
spec:
18+
initContainers:
19+
- name: sysctl-tune
20+
image: busybox:1.35.0-uclibc
21+
command:
22+
- "sh"
23+
- "-c"
24+
- "sysctl -w fs.aio-max-nr=524288"
25+
securityContext:
26+
privileged: true
27+
containers:
28+
- name: scylladb
29+
image: {{ .Values.image }}
30+
imagePullPolicy: {{ .Values.pullPolicy }}
31+
command: ["/bin/bash", "-c", "--"]
32+
args:
33+
- |
34+
sed -i "s/#cluster_name: .*/cluster_name: '${CLUSTER_NAME}'/" /etc/scylla/scylla.yaml
35+
sed -i 's/# data_file_directories:/data_file_directories:/' /etc/scylla/scylla.yaml
36+
sed -i 's/# - \/var\/lib\/scylla\/data/ - \/var\/lib\/scylla\/data/' /etc/scylla/scylla.yaml
37+
sed -i 's/# commitlog_directory: \/var\/lib\/scylla\/commitlog/commitlog_directory: \/var\/lib\/scylla\/commitlog/' /etc/scylla/scylla.yaml
38+
39+
# Modify the seeds in scylla.yaml by replacing "127.0.0.1" with the SCYLLA_SEEDS value
40+
sed -i "s/seeds: \"127.0.0.1\"/seeds: '${SCYLLA_SEEDS}'/" /etc/scylla/scylla.yaml
41+
42+
# Modify Authenticator and Authorizer
43+
sed -i "s/# authenticator: AllowAllAuthenticator/authenticator: '${SCYLLA_AUTHENTICATOR}'/" /etc/scylla/scylla.yaml
44+
sed -i "s/# authorizer: AllowAllAuthorizer/authorizer: '${SCYLLA_AUTHORIZER}'/" /etc/scylla/scylla.yaml
45+
46+
# Modify listen_address to the Helm release name
47+
sed -i "s/listen_address: localhost/listen_address: '{{ .Release.Name }}-scylladb-0'/" /etc/scylla/scylla.yaml
48+
49+
# Modify rpc_address to listen on all interfaces
50+
sed -i "s/rpc_address: localhost/rpc_address: '0.0.0.0'/" /etc/scylla/scylla.yaml
51+
52+
# Set broadcast_rpc_address to Helm release name for correct node discovery
53+
sed -i "s/# broadcast_rpc_address: 1.2.3.4/broadcast_rpc_address: '{{ .Release.Name }}-scylladb-0'/" /etc/scylla/scylla.yaml
54+
55+
# Enable Prometheus metrics on port 9180
56+
sed -i 's/# prometheus_port: 9180/prometheus_port: 9180/' /etc/scylla/scylla.yaml
57+
# Start ScyllaDB in the background
58+
exec /docker-entrypoint.py
59+
ports:
60+
- containerPort: 9042
61+
resources:
62+
requests:
63+
memory: {{ .Values.resources.requests.memory }}
64+
cpu: {{ .Values.resources.requests.cpu }}
65+
limits:
66+
memory: {{ .Values.resources.limits.memory }}
67+
cpu: {{ .Values.resources.limits.cpu }}
68+
env:
69+
- name: SCYLLA_SEEDS
70+
value: "{{ $.Release.Name }}-scylladb-0.{{ $.Release.Name }}-scylladb.{{ $.Release.Namespace }}.svc.cluster.local"
71+
- name: SCYLLA_AUTHENTICATOR
72+
value: "PasswordAuthenticator"
73+
- name: SCYLLA_AUTHORIZER
74+
value: "CassandraAuthorizer"
75+
- name: CLUSTER_NAME
76+
value: "Cluster"
77+
- name: SCYLLA_PASSWORD
78+
valueFrom:
79+
secretKeyRef:
80+
name: {{ $.Release.Name }}-scylladb-database-secret
81+
key: pod_password
82+
livenessProbe:
83+
exec:
84+
command:
85+
- sh
86+
- -c
87+
- "nodetool status"
88+
initialDelaySeconds: 120
89+
periodSeconds: 20
90+
timeoutSeconds: 15
91+
failureThreshold: 3
92+
readinessProbe:
93+
exec:
94+
command:
95+
- sh
96+
- -c
97+
- "nodetool status"
98+
initialDelaySeconds: 60
99+
periodSeconds: 20
100+
timeoutSeconds: 15
101+
failureThreshold: 3
102+
volumeMounts:
103+
- name: {{ $.Release.Name }}-scylla-data
104+
mountPath: /var/lib/scylla
105+
volumeClaimTemplates:
106+
- metadata:
107+
name: {{ $.Release.Name }}-scylla-data
108+
spec:
109+
accessModes: ["ReadWriteOnce"]
110+
resources:
111+
requests:
112+
storage: {{ .Values.diskSize }}
113+
storageClassName: standard
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
apiVersion: batch/v1
2+
kind: Job
3+
metadata:
4+
name: {{ $.Release.Name }}-scylladb-create-superuser
5+
namespace: {{ $.Release.Namespace }}
6+
spec:
7+
template:
8+
spec:
9+
containers:
10+
- name: scylla-superuser-creation
11+
image: {{ .Values.image }}
12+
command:
13+
- "/bin/bash"
14+
- "-c"
15+
- |
16+
until cqlsh -u cassandra -p cassandra {{ $.Release.Name }}-scylladb; do
17+
echo "Waiting for ScyllaDB to be ready..."
18+
sleep 5
19+
done
20+
21+
cqlsh -u cassandra -p cassandra {{ $.Release.Name }}-scylladb -e "CREATE ROLE superuser WITH PASSWORD = '${SCYLLA_PASSWORD}' AND LOGIN = true AND SUPERUSER = true;"
22+
cqlsh -u superuser -p ${SCYLLA_PASSWORD} {{ $.Release.Name }}-scylladb -e "DROP ROLE cassandra;"
23+
env:
24+
- name: SCYLLA_PASSWORD
25+
valueFrom:
26+
secretKeyRef:
27+
name: {{ $.Release.Name }}-scylladb-database-secret
28+
key: pod_password
29+
restartPolicy: OnFailure

charts/scylladb/values.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
image: "scylladb/scylla:latest"
2+
pullPolicy: IfNotPresent
3+
4+
resources:
5+
requests:
6+
memory: "1Gi"
7+
cpu: "500m"
8+
limits:
9+
memory: "2Gi"
10+
cpu: "1000m"
11+
12+
diskSize: "10Gi"
13+
14+
config:
15+
cluster_name: "Cluster"
16+
17+
scylladbRootPassword:
18+
19+
services:

0 commit comments

Comments
 (0)