diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 05ea0e7d9821988ca034a1fa8f28c4ec1a224983..ba2bba99bfe8a20bc6bf2488b7837460193265b0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -241,4 +241,4 @@ deploy-uc4-workload-generator: when: always - if: "$DOCKERHUB_ORG && $DOCKERHUB_ID && $DOCKERHUB_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" when: manual - allow_failure: true + allow_failure: true \ No newline at end of file diff --git a/execution/random-scheduler/Dockerfile b/execution/random-scheduler/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..4c78f6a2009d0b9d418d42af08a24d48270b82cb --- /dev/null +++ b/execution/random-scheduler/Dockerfile @@ -0,0 +1,14 @@ +FROM ubuntu:bionic + +RUN apt-get update +RUN apt-get install -y curl jq + +RUN curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl + +RUN chmod +x ./kubectl + +RUN mv ./kubectl /usr/local/bin/kubectl + +ADD schedule.sh /bin/schedule + +CMD /bin/schedule \ No newline at end of file diff --git a/execution/random-scheduler/deployment.yaml b/execution/random-scheduler/deployment.yaml index d42b57c30b9280b47ecdcc9afd6ee4834a39ad1c..1bbc60a1ca1de2966ba7914b1d4e2f1c91f502d6 100644 --- a/execution/random-scheduler/deployment.yaml +++ b/execution/random-scheduler/deployment.yaml @@ -1,80 +1,22 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: random-scheduler - namespace: kube-system ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: random-scheduler-as-kube-scheduler -subjects: -- kind: ServiceAccount - name: random-scheduler - namespace: kube-system -roleRef: - kind: ClusterRole - name: system:kube-scheduler - apiGroup: rbac.authorization.k8s.io ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: random-scheduler-as-volume-scheduler -subjects: -- kind: ServiceAccount - name: random-scheduler - namespace: kube-system -roleRef: - kind: ClusterRole - name: system:volume-scheduler - apiGroup: rbac.authorization.k8s.io ---- apiVersion: apps/v1 kind: Deployment metadata: - labels: - component: scheduler - tier: control-plane name: random-scheduler + labels: + app: random-scheduler namespace: kube-system spec: + replicas: 1 selector: matchLabels: - component: scheduler - tier: control-plane - replicas: 1 + app: random-scheduler template: metadata: labels: - component: scheduler - tier: control-plane - version: second + app: random-scheduler spec: - serviceAccountName: random-scheduler + serviceAccount: random-scheduler containers: - - command: - - /usr/local/bin/kube-scheduler - - --address=0.0.0.0 - - --leader-elect=false - - --scheduler-name=random-scheduler # use correct config - image: gcr.io/my-gcp-project/my-kube-scheduler:1.0 # use correct image - livenessProbe: - httpGet: - path: /healthz - port: 10251 - initialDelaySeconds: 15 - name: kube-second-scheduler - readinessProbe: - httpGet: - path: /healthz - port: 10251 - resources: - requests: - cpu: '0.1' - securityContext: - privileged: false - volumeMounts: [] - hostNetwork: false - hostPID: false - volumes: [] \ No newline at end of file + - name: random-scheduler + image: sehrenstein/random-scheduler:latest + imagePullPolicy: Always diff --git a/execution/random-scheduler/rbac.yaml b/execution/random-scheduler/rbac.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ba463cc54a575730cacac6b905603892572b11ec --- /dev/null +++ b/execution/random-scheduler/rbac.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + namespace: kube-system + name: random-scheduler + labels: + app: random-scheduler + component: random-scheduler +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: random-scheduler +subjects: +- kind: ServiceAccount + name: random-scheduler + namespace: kube-system +roleRef: + kind: ClusterRole + apiGroup: rbac.authorization.k8s.io + name: system:kube-scheduler \ No newline at end of file diff --git a/execution/random-scheduler/schedule.sh b/execution/random-scheduler/schedule.sh new file mode 100755 index 0000000000000000000000000000000000000000..0cec94ef653921116ae1d1697f1234474137caa0 --- /dev/null +++ b/execution/random-scheduler/schedule.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +SERVER=($(kubectl config view -o json | jq '.clusters[0].cluster.server')) + +while true; + +do + + echo "$(kubectl get pods -n default)" + for PODNAME in $(kubectl get pods -n default -o json | jq '.items[] | select(.spec.schedulerName == "random-scheduler") | select(.spec.nodeName == null) | .metadata.name' | tr -d '"'); + + do + + NODES=($(kubectl get nodes -o json | jq '.items[].metadata.name' | tr -d '"')) + + + NUMNODES=${#NODES[@]} + + CHOSEN=${NODES[$[$RANDOM % $NUMNODES]]} + + curl --header "Content-Type:application/json" --request POST --data '{"apiVersion":"v1", "kind": "Binding", "metadata": {"name": "'$PODNAME'"}, "target": {"apiVersion": "v1", "kind": "Node", "name": "'$CHOSEN'"}}' $SERVER/api/v1/namespaces/default/pods/$PODNAME/binding/ + + echo "Assigned $PODNAME to $CHOSEN" + + done + + sleep 1 + +done \ No newline at end of file diff --git a/execution/random-scheduler/test.yaml b/execution/random-scheduler/test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9104a0968e7c0accc1889211c2447b6250137b8a --- /dev/null +++ b/execution/random-scheduler/test.yaml @@ -0,0 +1,20 @@ +apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 +kind: Deployment +metadata: + name: nginx-deployment +spec: + selector: + matchLabels: + app: nginx + replicas: 2 # tells deployment to run 2 pods matching the template + template: + metadata: + labels: + app: nginx + spec: + schedulerName: random-scheduler + containers: + - name: nginx + image: nginx:1.14.2 + ports: + - containerPort: 80 \ No newline at end of file