diff --git a/k8s/argo-workflows/codex-workflows-rbac.yaml b/k8s/argo-workflows/codex-workflows-rbac.yaml index d57915c..63cd20d 100644 --- a/k8s/argo-workflows/codex-workflows-rbac.yaml +++ b/k8s/argo-workflows/codex-workflows-rbac.yaml @@ -1,5 +1,12 @@ # This sets up a service account with the required permissions for running the Codex workflows. For now, # this needs to be manually applied to the cluster running Argo Workflows. + +# The codex-benchmarks needs to exist, as otherwise we can't create the RoleBinding in the proper namespace. +apiVersion: v1 +kind: Namespace +metadata: + name: codex-benchmarks +--- apiVersion: v1 kind: ServiceAccount metadata: @@ -7,30 +14,33 @@ metadata: namespace: argo --- apiVersion: rbac.authorization.k8s.io/v1 -kind: Role +kind: ClusterRole metadata: name: codex-workflows-runner - namespace: argo rules: - apiGroups: [ "" ] - resources: [ "namespaces", "persistentvolumeclaims", "pods", "services" ] + resources: [ "namespaces", "persistentvolumeclaims", "pods", "services", "secrets" ] verbs: [ "*" ] - apiGroups: [ "apps" ] resources: [ "deployments", "statefulsets" ] verbs: [ "*" ] + + - apiGroups: [ "batch" ] + resources: [ "jobs" ] + verbs: [ "*" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: codex-workflows-runner - namespace: argo + namespace: codex-benchmarks subjects: - kind: ServiceAccount name: codex-benchmarks-workflows namespace: argo roleRef: - kind: Role + kind: ClusterRole name: codex-workflows-runner apiGroup: rbac.authorization.k8s.io --- diff --git a/k8s/argo-workflows/deluge-benchmark-workflow.yaml b/k8s/argo-workflows/deluge-benchmark-workflow.yaml index 2f1113f..8653144 100644 --- a/k8s/argo-workflows/deluge-benchmark-workflow.yaml +++ b/k8s/argo-workflows/deluge-benchmark-workflow.yaml @@ -5,39 +5,68 @@ metadata: spec: serviceAccountName: codex-benchmarks-workflows entrypoint: deluge-benchmark-workflow + onExit: cleanup + arguments: + parameters: + - name: repetitions + value: 10 + - name: fileSize + value: "100MB" + - name: networkSize + value: 10 + - name: seeders + value: 4 + - name: seederSets + value: 4 + - name: maxExperimentDuration + value: "72h" + templates: - name: deluge-benchmark-workflow steps: - - name: deploy-experiment template: deploy-experiment - - - name: wait-for-testrunner - template: wait-for-testrunner + - - name: wait-for-test-start + template: wait-for-test-start - - - name: wait-for-completion - template: wait-for-completion + - - name: wait-for-test-completion + template: wait-for-test-completion - name: deploy-experiment script: image: codexstorage/bittorrent-benchmarks-workflows:latest command: ["/bin/bash"] source: | - helm install e1 k8s/charts/deluge --namespace codex-benchmarks + helm install e1 ./k8s/charts/deluge --namespace codex-benchmarks\ + --set experiment.repetitions={{workflow.parameters.repetitions}}\ + --set experiment.fileSize={{workflow.parameters.fileSize}}\ + --set experiment.networkSize={{workflow.parameters.networkSize}}\ + --set experiment.seeders={{workflow.parameters.seeders}}\ + --set experiment.seederSets={{workflow.parameters.seederSets}} - - name: wait-for-testrunner + - name: wait-for-test-start script: image: codexstorage/bittorrent-benchmarks-workflows:latest command: ["/bin/bash"] source: | - kubectl wait --for=condition=Ready --selector=app=testrunner pod -n codex-benchmarks --timeout=300s + kubectl wait -n codex-benchmarks\ + --for=condition=Ready\ + --selector=app=deluge-codex-benchmarks-testrunner\ + --timeout=300s\ + pod - - name: wait-for-completion + - name: wait-for-test-completion script: image: codexstorage/bittorrent-benchmarks-workflows:latest command: ["/bin/bash"] source: | set -e - ./ docker/bin/kubectl-wait-job --selector=app=testrunner -n codex-benchmarks + + ./docker/bin/kubectl-wait-job\ + --selector=app=deluge-codex-benchmarks-testrunner\ + --timeout={{workflow.parameters.maxExperimentDuration}}\ + -n codex-benchmarks - name: cleanup script: