如何运行kubernetes自定义调度程序?

如何运行kubernetes自定义调度程序?,kubernetes,scheduler,gcloud,Kubernetes,Scheduler,Gcloud,我想运行此处提供的自定义计划程序: 这是一个bash脚本。我需要在谷歌云集群中使用它。 有没有人有过实现这样一个调度器的经验?运行该功能的步骤是什么?假设您已经为Google Cloud cluster配置了kubectl,即您可以通过以下方式获得节点: $ kubectl get nodes 在终端A中,只需运行以下操作: $ kubectl proxy 这将允许您的调度程序脚本通过localhost:8001与api服务器交互 在终端B中,运行以下命令以使用自定义计划程序note sc

我想运行此处提供的自定义计划程序:

这是一个bash脚本。我需要在谷歌云集群中使用它。
有没有人有过实现这样一个调度器的经验?运行该功能的步骤是什么?

假设您已经为Google Cloud cluster配置了kubectl,即您可以通过以下方式获得节点:

$ kubectl get nodes
在终端A中,只需运行以下操作:

$ kubectl proxy
这将允许您的调度程序脚本通过localhost:8001与api服务器交互

在终端B中,运行以下命令以使用自定义计划程序note schedulerName:my scheduler为pod创建部署文件:

$ cat > pod-to-schedule.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  schedulerName: my-scheduler
  containers:
  - name: nginx
    image: nginx:1.10
EOF
$ bash my-scheduler.sh
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Success",
  "code": 201
}Assigned nginx to gke-cluster-1-default-pool-ac152967-nd30
检查吊舱状态:

$ kubectl get pods nginx
NAME      READY     STATUS    RESTARTS   AGE
nginx     0/1       Pending   0          12s
Pod状态为挂起,因为没有名为my scheduler的计划程序

现在,在您提到的博客中保存调度程序脚本:

$ cat << 'EOF' > my-scheduler.sh
#!/bin/bash
SERVER='localhost:8001'
while true;
do
    for PODNAME in $(kubectl --server $SERVER get pods -o json | jq '.items[] | select(.spec.schedulerName == "my-scheduler") | select(.spec.nodeName == null) | .metadata.name' | tr -d '"');
    do
        NODES=($(kubectl --server $SERVER 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'"}}' http://$SERVER/api/v1/namespaces/default/pods/$PODNAME/binding/
        echo "Assigned $PODNAME to $CHOSEN"
    done
    sleep 1
done
EOF
观察说明pod的节点分配调度已完成的输出。确认pod不再处于挂起状态:

$ kubectl get pods nginx
NAME      READY     STATUS    RESTARTS   AGE
nginx     1/1       Running   0          10m
$ kubectl get pods nginx
NAME      READY     STATUS    RESTARTS   AGE
nginx     1/1       Running   0          10m