2017-08-02 19 views
0

私はここで指定したカスタムスケジューラで実行したいと思います: http://blog.kubernetes.io/2017/03/advanced-scheduling-in-kubernetes.htmlkubernetesカスタムスケジューラを実行するには?

bashスクリプトです。私はGoogleのクラウドクラスタでそれを使用する必要があります。 誰かがそのようなスケジューラを実装した経験はありますか?それを実行する手順は何ですか?

$ kubectl proxy 

この意志:ターミナルで

$ kubectl get nodes 

、単に以下のコマンドを実行します。

答えて

1

あなたは持つノードを取得し、Googleクラウドクラスターのためのあなたのkubectlを設定したことができますIEと仮定すると、あなたのスケジューラーのスクリプトは、ローカルホスト上のAPIサーバーと対話するようにしてください:8001

端末B 0​​、( "schedulerNameを:私の-スケジューラ" に注意してください):カスタムスケジューラとポッドの展開ファイルを作成するには、以下を実行

$ 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 

はポッドを展開:

$ kubectl create -f pod-to-schedule.yaml 

は、ポッドの状態をチェックします。

$ kubectl get pods nginx 
NAME  READY  STATUS RESTARTS AGE 
nginx  0/1  Pending 0   12s 

「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 

はあなたのスケジューラを実行します。

$ 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  1/1  Running 0   10m 
関連する問題