feat!: add initial Helm chart, remove old k8s manifests and run script

This commit is contained in:
gmega 2024-12-17 10:35:56 -03:00
parent 03b7f52aca
commit 1bddfc7426
No known key found for this signature in database
GPG Key ID: 6290D34EAD824B18
14 changed files with 105 additions and 120 deletions

5
charts/deluge/Chart.yaml Normal file
View File

@ -0,0 +1,5 @@
apiVersion: v2
name: deluge-benchmarks
description: A Helm chart for running BitTorrent benchmarks with Deluge.
version: 0.1.0
appVersion: "1.0.0"

View File

@ -0,0 +1,19 @@
{{- define "filesize.bytes" }}
{{- $sizeNum := regexFind "\\d+" .Values.experiment.fileSize | int -}}
{{- $sizeUnit := regexFind "\\D+" .Values.experiment.fileSize -}}
{{- $size := dict "B" 1 "KB" 1024 "MB" 1048576 "GB" 1073741824 -}}
{{- mul $sizeNum (index $size $sizeUnit) -}}
{{- end -}}
{{- define "storage.size" }}
{{- $totalSize := mul .Values.experiment.networkSize (include "filesize.bytes" .) -}}
{{- div (mul $totalSize 12) 10 -}}
{{- end -}}
{{- define "deluge.pvc" }}
{{- default (printf "deluge-%s-pvc" .Release.Name) .Values.deployment.pvcName }}
{{- end -}}
{{- define "tracker.service.name" }}
{{- printf "bittorrent-tracker-%s" .Release.Name -}}
{{- end -}}

View File

@ -1,12 +1,12 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: deluge-pvc
namespace: codex-benchmarks
name: {{ include "deluge.pvc" . }}
namespace: {{ .Release.Namespace }}
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storage: {{ include "storage.size" . }}

View File

@ -1,14 +1,14 @@
apiVersion: v1
kind: Service
metadata:
name: deluge-service
namespace: codex-benchmarks
name: deluge-nodes-{{ .Release.Name }}-service
namespace: {{ .Release.Namespace }}
labels:
app: deluge-nodes
app: deluge-nodes-{{ .Release.Name }}
spec:
clusterIP: None
selector:
app: deluge-nodes
app: deluge-nodes-{{ .Release.Name }}
ports:
- port: 6890
name: rpc

View File

@ -1,25 +1,25 @@
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: deluge-nodes
namespace: codex-benchmarks
name: deluge-nodes-{{ .Release.Name }}
namespace: {{ .Release.Namespace }}
spec:
replicas: 10
serviceName: deluge-service
replicas: {{ .Values.experiment.networkSize }}
serviceName: deluge-nodes-{{ .Release.Name }}-service
podManagementPolicy: Parallel
selector:
matchLabels:
app: deluge-nodes
app: deluge-nodes-{{ .Release.Name }}
template:
metadata:
labels:
app: deluge-nodes
app: deluge-nodes-{{ .Release.Name }}
spec:
containers:
- name: deluge
- name: deluge-{{ .Release.Name }}
image: codexstorage/deluge
imagePullPolicy: Always
ports:
@ -52,10 +52,10 @@ spec:
${DELUGE_APP}/docker/bin/start.sh
volumeMounts:
- name: deluge-volume
- name: deluge-{{ .Release.Name }}-volume
mountPath: /var/lib/deluge
volumes:
- name: deluge-volume
- name: deluge-{{ .Release.Name }}-volume
persistentVolumeClaim:
claimName: deluge-pvc
claimName: {{ include "deluge.pvc" . }}

View File

@ -1,42 +1,42 @@
apiVersion: batch/v1
kind: Job
metadata:
name: testrunner
namespace: codex-benchmarks
name: deluge-{{ .Release.Namespace }}-testrunner
namespace: {{ .Release.Namespace }}
labels:
app: testrunner
app: deluge-{{ .Release.Namespace }}-testrunner
spec:
template:
metadata:
labels:
app: testrunner
app: deluge-{{ .Release.Namespace }}-testrunner
spec:
containers:
- name: testrunner
- name: deluge-{{ .Release.Namespace }}-testrunner
image: codexstorage/bittorrent-benchmarks:latest
imagePullPolicy: Always
args: [ "run", "deluge_experiment" ]
env:
- name: NETWORK_SIZE
value: "10"
value: {{ .Values.experiment.networkSize | quote }}
- name: SEEDERS
value: "4"
value: {{ .Values.experiment.seeders | quote }}
- name: REPETITIONS
value: "10"
value: {{ .Values.experiment.repetitions | quote }}
- name: SEEDER_SETS
value: "4"
value: {{ .Values.experiment.seederSets | quote }}
- name: FILE_SIZE
value: "104857600"
value: {{ include "filesize.bytes" . | quote }}
- name: TRACKER_ANNOUNCE_URL
value: "http://tracker-service.codex-benchmarks.svc.cluster.local:8000/announce"
value: "http://{{ include "tracker.service.name" . }}.{{ .Release.Namespace }}.svc.cluster.local:8000/announce"
- name: SHARED_VOLUME_PATH
value: "/opt/bittorrent-benchmarks/volume"
- name: DELUGE_STATEFULSET
value: "deluge-nodes"
value: "deluge-nodes-{{ .Release.Name }}"
- name: DELUGE_SERVICE
value: "deluge-service"
value: "deluge-nodes-{{ .Release.Name }}-service"
- name: NAMESPACE
valueFrom:
fieldRef:
@ -55,7 +55,7 @@ spec:
volumes:
- name: benchmark-volume
persistentVolumeClaim:
claimName: deluge-pvc
claimName: {{ include "deluge.pvc" . }}
restartPolicy: Never
backoffLimit: 0

View File

@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: bittorrent-tracker-{{ .Release.Name }}
namespace: {{ .Release.Namespace }}
labels:
app: bittorrent-tracker-{{ .Release.Name }}
spec:
replicas: 1
selector:
matchLabels:
app: bittorrent-tracker-{{ .Release.Name }}
template:
metadata:
labels:
app: bittorrent-tracker-{{ .Release.Name }}
spec:
containers:
- name: bittorrent-tracker-{{ .Release.Name }}
image: codexstorage/bittorrent-tracker
ports:
- containerPort: 8000

View File

@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: {{ include "tracker.service.name" . }}
namespace: {{ .Release.Namespace }}
labels:
app: tracker-{{ .Release.Name }}
spec:
type: ClusterIP
ports:
- port: 8000
targetPort: 8000
protocol: TCP
selector:
app: bittorrent-tracker-{{ .Release.Name }}

View File

@ -0,0 +1,9 @@
experiment:
networkSize: 10
fileSize: "100MB"
seeders: 4
seederSets: 4
repetitions: 10
deployment:
pvcName: ""

View File

@ -1,7 +0,0 @@
namespace.yaml
deluge-pvc.yaml
deluge-service.yaml
tracker-deployment.yaml
tracker-service.yaml
deluge-statefulset.yaml
testrunner-job.yaml

View File

@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: codex-benchmarks

View File

@ -1,37 +0,0 @@
#!/usr/bin/env bash
#
# Simple script for running benchmark experiments on a Kubernetes cluster.
set -e
function on_interrupt () {
read -p "CTRL+C pressed. Do you want to stop the test runner as well? [y/N] " -n 1 -r
echo ""
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "Deleting experiment namespace..."
kubectl delete namespace codex-benchmarks
fi
}
trap on_interrupt INT
echo " * Clearing previous deployments"
kubectl delete namespace codex-benchmarks || true
echo " * Deploying manifests"
while read -r resource; do
kubectl apply -f "${resource}"
done < deploy-order.txt
echo " * Awaiting for test runner to start"
kubectl wait --for=condition=Ready --selector=app=testrunner pod -n codex-benchmarks --timeout=300s
echo " * Attaching to test runner logs"
TESTRUNNER_POD=$(kubectl get pods -n codex-benchmarks -l app=testrunner -o jsonpath="{.items[0].metadata.name}")
if [ -z "${TESTRUNNER_POD}" ]; then
echo "Testrunner pod not found"
exit 1
fi
kubectl logs -f "${TESTRUNNER_POD}" -n codex-benchmarks
echo " * Test runner has finished."

View File

@ -1,25 +0,0 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: bittorrent-tracker
namespace: codex-benchmarks
labels:
app: bittorrent-tracker
spec:
replicas: 1
selector:
matchLabels:
app: bittorrent-tracker
template:
metadata:
labels:
app: bittorrent-tracker
spec:
containers:
- name: tracker
image: codexstorage/bittorrent-tracker
ports:
- containerPort: 8000

View File

@ -1,16 +0,0 @@
apiVersion: v1
kind: Service
metadata:
name: tracker-service
namespace: codex-benchmarks
labels:
app: tracker
spec:
type: ClusterIP # Change to NodePort or LoadBalancer if needed
ports:
- port: 8000
targetPort: 8000
protocol: TCP
selector:
app: bittorrent-tracker