2017-08-02 2 views

Répondre

1

En supposant que vous avez configuré votre kubectl pour le cluster Google Cloud, à savoir que vous pouvez obtenir avec des nœuds:

$ kubectl get nodes 

dans le terminal A, exécutez les éléments suivants:

$ kubectl proxy 

cette volonté laissez votre script de planificateur interagir avec l'api-server sur localhost: 8001

Dans le terminal B, exécutez la commande suivante pour créer un fichier de déploiement pour pod avec le programmateur personnalisé (note "nom_planificateur: my-planificateur"):

$ 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 

déployer la nacelle:

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

vérifier l'état du pod:

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

L'état du pod est "en attente" car il n'y a pas de planificateur nommé "my-scheduler".

Maintenant, enregistrez le script du planificateur dans le blog que vous avez mentionné:

$ 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 

Exécutez votre planificateur:

$ bash my-scheduler.sh 
{ 
    "kind": "Status", 
    "apiVersion": "v1", 
    "metadata": {}, 
    "status": "Success", 
    "code": 201 
}Assigned nginx to gke-cluster-1-default-pool-ac152967-nd30 

Observer la sortie indiquant une affectation de noeud (ordonnancement) est fait pour votre pod. Vérifiez que le module n'est plus en attente:

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