0
我想運行此處給出的自定義調度程序: http://blog.kubernetes.io/2017/03/advanced-scheduling-in-kubernetes.html如何運行kubernetes自定義調度程序?
這是一個bash腳本。我需要在谷歌雲集羣中使用它。 有沒有人有執行這樣的調度程序的經驗?有什麼步驟來運行?
我想運行此處給出的自定義調度程序: http://blog.kubernetes.io/2017/03/advanced-scheduling-in-kubernetes.html如何運行kubernetes自定義調度程序?
這是一個bash腳本。我需要在谷歌雲集羣中使用它。 有沒有人有執行這樣的調度程序的經驗?有什麼步驟來運行?
假設你已經配置了谷歌針對雲團kubectl,即你可以得到節點:
$ kubectl get nodes
在終端A,只是運行以下命令:
$ kubectl proxy
這將讓您的調度程序腳本通過localhost與api-server進行交互:8001
在終端B,運行以下命令以創建自定義調度POD部署文件(注意 「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」的調度程序,所以Pod狀態爲「Pending」。
現在,保存調度腳本在你博客中提到的:
$ 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