Skip to content
Snippets Groups Projects
Commit 5c099bba authored by Simon Ehrenstein's avatar Simon Ehrenstein
Browse files

Add custom random-scheduler

parent 02661d7d
No related branches found
No related tags found
1 merge request!61Allow using a random scheduler
...@@ -241,4 +241,4 @@ deploy-uc4-workload-generator: ...@@ -241,4 +241,4 @@ deploy-uc4-workload-generator:
when: always when: always
- if: "$DOCKERHUB_ORG && $DOCKERHUB_ID && $DOCKERHUB_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" - if: "$DOCKERHUB_ORG && $DOCKERHUB_ID && $DOCKERHUB_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME"
when: manual when: manual
allow_failure: true allow_failure: true
\ No newline at end of file
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
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 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
labels:
component: scheduler
tier: control-plane
name: random-scheduler name: random-scheduler
labels:
app: random-scheduler
namespace: kube-system namespace: kube-system
spec: spec:
replicas: 1
selector: selector:
matchLabels: matchLabels:
component: scheduler app: random-scheduler
tier: control-plane
replicas: 1
template: template:
metadata: metadata:
labels: labels:
component: scheduler app: random-scheduler
tier: control-plane
version: second
spec: spec:
serviceAccountName: random-scheduler serviceAccount: random-scheduler
containers: containers:
- command: - name: random-scheduler
- /usr/local/bin/kube-scheduler image: sehrenstein/random-scheduler:latest
- --address=0.0.0.0 imagePullPolicy: Always
- --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
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
#!/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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment