安裝Scheduler-plugins v1.18
創建 Kubernetes 集羣
Kubernetes 版本必須 >= v1.18.0
,檢查 Kubernetes 版本 kubectl version --short
安裝版本 v0.18.9 並使用 Coscheduling
本節將會說明如何用 scheduler-plugins 鏡像替換默認調度器。 由於新映像是在默認調度器之上構建的,因此會保留原生 Kubernetes 調度功能。同時可以獲得許多額外的開箱即用功能(由此 repo 中的插件實現),例如 coscheduling。
-
登陸到 Master 節點
-
如果你的集羣使用 kind 創建
sudo docker exec -it $(sudo docker ps | grep control-plane | awk '{print $1}') bash
-
Mac Docker Desktop
docker run -it --rm --privileged --pid=host justincormack/nsenter1
-
-
備份 kube-scheduler.yaml
cp /etc/kubernetes/manifests/kube-scheduler.yaml /etc/kubernetes/kube-scheduler.yaml
-
創建 /etc/kubernetes/coscheduling-config.yaml
apiVersion: kubescheduler.config.k8s.io/v1alpha2 kind: KubeSchedulerConfiguration leaderElection: # (Optional) Change true to false if you are not running a HA control-plane. leaderElect: true clientConnection: kubeconfig: /etc/kubernetes/scheduler.conf profiles: - schedulerName: default-scheduler plugins: queueSort: enabled: - name: Coscheduling disabled: - name: "*" preFilter: enabled: - name: Coscheduling permit: enabled: - name: Coscheduling unreserve: enabled: - name: Coscheduling
-
修改 /etc/kubernetes/manifests/kube-scheduler.yaml 使用 Coscheduling 運行調度器插件
主要修改內容如下所示:
- 通過參數 --config 傳入 scheduler-config 文件
- 刪除重複的(已在配置文件中定義) CLI 參數(例如,--leader-elect)
- 用 scheduler-plugin 鏡像替換默認調度器鏡像
- 在調度器啓動時掛載 scheduler-config 文件
--- /etc/kubernetes/kube-scheduler.yaml 2021-02-04 01:27:42.392508733 +0000 +++ /etc/kubernetes/manifests/kube-scheduler.yaml 2021-02-04 04:26:04.459171135 +0000 @@ -13,11 +13,12 @@ - kube-scheduler - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf + - --config=/etc/kubernetes/coscheduling-config.yaml - --bind-address=127.0.0.1 - --kubeconfig=/etc/kubernetes/scheduler.conf - --leader-elect=true - --port=0 - image: k8s.gcr.io/kube-scheduler:v1.19.1 + image: k8s.gcr.io/scheduler-plugins/kube-scheduler:v0.18.9 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 8 @@ -47,6 +48,9 @@ - mountPath: /etc/kubernetes/scheduler.conf name: kubeconfig readOnly: true + - mountPath: /etc/kubernetes/coscheduling-config.yaml + name: coscheduling-config + readOnly: true hostNetwork: true priorityClassName: system-node-critical volumes: @@ -54,4 +58,8 @@ path: /etc/kubernetes/scheduler.conf type: FileOrCreate name: kubeconfig + - hostPath: + path: /etc/kubernetes/coscheduling-config.yaml + type: File + name: coscheduling-config status: {}
-
驗證 kube-scheduler pod 是否正常運行,確認 image 是否爲 k8s.gcr.io/scheduler-plugins/kube-scheduler:v0.18.9
$ kubectl get pod -n kube-system | grep kube-scheduler kube-scheduler-xqcluster-control-plane 1/1 Running 0 3m27s $ kubectl get pods -l component=kube-scheduler -n kube-system -o=jsonpath="{.items[0].spec.containers[0].image}" k8s.gcr.io/scheduler-plugins/kube-scheduler:v0.18.9
卸載 Scheduler-plugins
- 刪除測試時創建的資源
- 恢復
kube-scheduler.yaml
刪除coscheduling-config.yaml
- 檢測默認調度器狀態