From 1bddfc74265efb3a250ef6ed116488d96c6b0c61 Mon Sep 17 00:00:00 2001 From: gmega Date: Tue, 17 Dec 2024 10:35:56 -0300 Subject: [PATCH] feat!: add initial Helm chart, remove old k8s manifests and run script --- charts/deluge/Chart.yaml | 5 +++ charts/deluge/templates/_helpers.tpl | 19 ++++++++++ .../deluge/templates}/deluge-pvc.yaml | 6 +-- .../deluge/templates}/deluge-service.yaml | 8 ++-- .../deluge/templates}/deluge-statefulset.yaml | 20 +++++----- .../deluge/templates}/testrunner-job.yaml | 28 +++++++------- .../deluge/templates/tracker-deployment.yaml | 25 +++++++++++++ charts/deluge/templates/tracker-service.yaml | 16 ++++++++ charts/deluge/values.yaml | 9 +++++ k8s/deploy-order.txt | 7 ---- k8s/namespace.yaml | 4 -- k8s/run.sh | 37 ------------------- k8s/tracker-deployment.yaml | 25 ------------- k8s/tracker-service.yaml | 16 -------- 14 files changed, 105 insertions(+), 120 deletions(-) create mode 100644 charts/deluge/Chart.yaml create mode 100644 charts/deluge/templates/_helpers.tpl rename {k8s => charts/deluge/templates}/deluge-pvc.yaml (50%) rename {k8s => charts/deluge/templates}/deluge-service.yaml (54%) rename {k8s => charts/deluge/templates}/deluge-statefulset.yaml (76%) rename {k8s => charts/deluge/templates}/testrunner-job.yaml (57%) create mode 100644 charts/deluge/templates/tracker-deployment.yaml create mode 100644 charts/deluge/templates/tracker-service.yaml create mode 100644 charts/deluge/values.yaml delete mode 100644 k8s/deploy-order.txt delete mode 100644 k8s/namespace.yaml delete mode 100755 k8s/run.sh delete mode 100644 k8s/tracker-deployment.yaml delete mode 100644 k8s/tracker-service.yaml diff --git a/charts/deluge/Chart.yaml b/charts/deluge/Chart.yaml new file mode 100644 index 0000000..622d362 --- /dev/null +++ b/charts/deluge/Chart.yaml @@ -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" \ No newline at end of file diff --git a/charts/deluge/templates/_helpers.tpl b/charts/deluge/templates/_helpers.tpl new file mode 100644 index 0000000..65ab001 --- /dev/null +++ b/charts/deluge/templates/_helpers.tpl @@ -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 -}} \ No newline at end of file diff --git a/k8s/deluge-pvc.yaml b/charts/deluge/templates/deluge-pvc.yaml similarity index 50% rename from k8s/deluge-pvc.yaml rename to charts/deluge/templates/deluge-pvc.yaml index 908cc3f..e214d71 100644 --- a/k8s/deluge-pvc.yaml +++ b/charts/deluge/templates/deluge-pvc.yaml @@ -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 \ No newline at end of file + storage: {{ include "storage.size" . }} \ No newline at end of file diff --git a/k8s/deluge-service.yaml b/charts/deluge/templates/deluge-service.yaml similarity index 54% rename from k8s/deluge-service.yaml rename to charts/deluge/templates/deluge-service.yaml index 775fbbe..b2a49d8 100644 --- a/k8s/deluge-service.yaml +++ b/charts/deluge/templates/deluge-service.yaml @@ -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 diff --git a/k8s/deluge-statefulset.yaml b/charts/deluge/templates/deluge-statefulset.yaml similarity index 76% rename from k8s/deluge-statefulset.yaml rename to charts/deluge/templates/deluge-statefulset.yaml index 005021d..0151822 100644 --- a/k8s/deluge-statefulset.yaml +++ b/charts/deluge/templates/deluge-statefulset.yaml @@ -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" . }} diff --git a/k8s/testrunner-job.yaml b/charts/deluge/templates/testrunner-job.yaml similarity index 57% rename from k8s/testrunner-job.yaml rename to charts/deluge/templates/testrunner-job.yaml index 4763082..e3deeb6 100644 --- a/k8s/testrunner-job.yaml +++ b/charts/deluge/templates/testrunner-job.yaml @@ -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 diff --git a/charts/deluge/templates/tracker-deployment.yaml b/charts/deluge/templates/tracker-deployment.yaml new file mode 100644 index 0000000..d6c15df --- /dev/null +++ b/charts/deluge/templates/tracker-deployment.yaml @@ -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 diff --git a/charts/deluge/templates/tracker-service.yaml b/charts/deluge/templates/tracker-service.yaml new file mode 100644 index 0000000..20acd15 --- /dev/null +++ b/charts/deluge/templates/tracker-service.yaml @@ -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 }} \ No newline at end of file diff --git a/charts/deluge/values.yaml b/charts/deluge/values.yaml new file mode 100644 index 0000000..0811f04 --- /dev/null +++ b/charts/deluge/values.yaml @@ -0,0 +1,9 @@ +experiment: + networkSize: 10 + fileSize: "100MB" + seeders: 4 + seederSets: 4 + repetitions: 10 + +deployment: + pvcName: "" \ No newline at end of file diff --git a/k8s/deploy-order.txt b/k8s/deploy-order.txt deleted file mode 100644 index edcf6dd..0000000 --- a/k8s/deploy-order.txt +++ /dev/null @@ -1,7 +0,0 @@ -namespace.yaml -deluge-pvc.yaml -deluge-service.yaml -tracker-deployment.yaml -tracker-service.yaml -deluge-statefulset.yaml -testrunner-job.yaml diff --git a/k8s/namespace.yaml b/k8s/namespace.yaml deleted file mode 100644 index d6ac571..0000000 --- a/k8s/namespace.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: codex-benchmarks \ No newline at end of file diff --git a/k8s/run.sh b/k8s/run.sh deleted file mode 100755 index f7d804b..0000000 --- a/k8s/run.sh +++ /dev/null @@ -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." \ No newline at end of file diff --git a/k8s/tracker-deployment.yaml b/k8s/tracker-deployment.yaml deleted file mode 100644 index 192aede..0000000 --- a/k8s/tracker-deployment.yaml +++ /dev/null @@ -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 diff --git a/k8s/tracker-service.yaml b/k8s/tracker-service.yaml deleted file mode 100644 index 776078f..0000000 --- a/k8s/tracker-service.yaml +++ /dev/null @@ -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 \ No newline at end of file