日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 配置多個(gè)調(diào)度器

配置多個(gè)調(diào)度器

Kubernetes 自帶了一個(gè)默認(rèn)調(diào)度器。 如果默認(rèn)調(diào)度器不適合你的需求,你可以實(shí)現(xiàn)自己的調(diào)度器。 而且,你甚至可以和默認(rèn)調(diào)度器一起同時(shí)運(yùn)行多個(gè)調(diào)度器,并告訴 Kubernetes 為每個(gè) Pod 使用哪個(gè)調(diào)度器。 讓我們通過(guò)一個(gè)例子講述如何在 Kubernetes 中運(yùn)行多個(gè)調(diào)度器。

創(chuàng)新互聯(lián)建站專注于特克斯網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供特克斯?fàn)I銷(xiāo)型網(wǎng)站建設(shè),特克斯網(wǎng)站制作、特克斯網(wǎng)頁(yè)設(shè)計(jì)、特克斯網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造特克斯網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供特克斯網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

關(guān)于實(shí)現(xiàn)調(diào)度器的具體細(xì)節(jié)描述超出了本文范圍。 請(qǐng)參考 kube-scheduler 的實(shí)現(xiàn),規(guī)范示例代碼位于 pkg/scheduler。

在開(kāi)始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒(méi)有集群,你可以通過(guò) Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

  • Katacoda
  • 玩轉(zhuǎn) Kubernetes

要獲知版本信息,請(qǐng)輸入 ?kubectl version?。

打包調(diào)度器

將調(diào)度器可執(zhí)行文件打包到容器鏡像中。出于示例目的,可以使用默認(rèn)調(diào)度器 (kube-scheduler)作為第二個(gè)調(diào)度器。 克隆 GitHub 上 Kubernetes 源代碼, 并編譯構(gòu)建源代碼。

git clone https://github.com/kubernetes/kubernetes.git
cd kubernetes
make

創(chuàng)建一個(gè)包含 kube-scheduler 二進(jìn)制文件的容器鏡像。用于構(gòu)建鏡像的 ?Dockerfile ?內(nèi)容如下:

FROM busybox
ADD ./_output/local/bin/linux/amd64/kube-scheduler /usr/local/bin/kube-scheduler

將文件保存為 ?Dockerfile?,構(gòu)建鏡像并將其推送到鏡像倉(cāng)庫(kù)。 此示例將鏡像推送到 Google 容器鏡像倉(cāng)庫(kù)(GCR)。 有關(guān)詳細(xì)信息,請(qǐng)閱讀 GCR 文檔。

docker build -t gcr.io/my-gcp-project/my-kube-scheduler:1.0 .
gcloud docker -- push gcr.io/my-gcp-project/my-kube-scheduler:1.0

為調(diào)度器定義 Kubernetes Deployment 

現(xiàn)在將調(diào)度器放在容器鏡像中,為它創(chuàng)建一個(gè) Pod 配置,并在 Kubernetes 集群中 運(yùn)行它。但是與其在集群中直接創(chuàng)建一個(gè) Pod,不如使用 Deployment。 Deployment 管理一個(gè) ReplicaSet, ReplicaSet 再管理 Pod,從而使調(diào)度器能夠免受一些故障的影響。 以下是 Deployment 配置,將其保存為 ?my-scheduler.yaml?:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-scheduler
  namespace: kube-system
---
apiVersion: rbac.authorization.K8S.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-scheduler-as-kube-scheduler
subjects:
- kind: ServiceAccount
  name: my-scheduler
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: system:kube-scheduler
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-scheduler-config
  namespace: kube-system
data:
  my-scheduler-config.yaml: |
    apiVersion: kubescheduler.config.k8s.io/v1beta2
    kind: KubeSchedulerConfiguration
    profiles:
      - schedulerName: my-scheduler
    leaderElection:
      leaderElect: false    
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: my-scheduler-as-volume-scheduler
subjects:
- kind: ServiceAccount
  name: my-scheduler
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: system:volume-scheduler
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    component: scheduler
    tier: control-plane
  name: my-scheduler
  namespace: kube-system
spec:
  selector:
    matchLabels:
      component: scheduler
      tier: control-plane
  replicas: 1
  template:
    metadata:
      labels:
        component: scheduler
        tier: control-plane
        version: second
    spec:
      serviceAccountName: my-scheduler
      containers:
      - command:
        - /usr/local/bin/kube-scheduler
        - --config=/etc/kubernetes/my-scheduler/my-scheduler-config.yaml
        image: gcr.io/my-gcp-project/my-kube-scheduler:1.0
        livenessProbe:
          httpGet:
            path: /healthz
            port: 10259
            scheme: HTTPS
          initialDelaySeconds: 15
        name: kube-second-scheduler
        readinessProbe:
          httpGet:
            path: /healthz
            port: 10259
            scheme: HTTPS
        resources:
          requests:
            cpu: '0.1'
        securityContext:
          privileged: false
        volumeMounts:
          - name: config-volume
            mountPath: /etc/kubernetes/my-scheduler
      hostNetwork: false
      hostPID: false
      volumes:
        - name: config-volume
          configMap:
            name: my-scheduler-config

在以上的清單中,你使用 ?KubeSchedulerConfiguration ?來(lái)自定義調(diào)度器實(shí)現(xiàn)的行為。當(dāng)使用 ?--config? 選項(xiàng)進(jìn)行初始化時(shí),該配置被傳遞到 ?kube-scheduler?。 ?my-scheduler-config? ConfigMap 存儲(chǔ)配置數(shù)據(jù)。 ?my-scheduler? Deployment 的 Pod 將 ?my-scheduler-config? ConfigMap 掛載為一個(gè)卷。

在前面提到的調(diào)度器配置中,你的調(diào)度器通過(guò) ?KubeSchedulerProfile ?進(jìn)行實(shí)現(xiàn)。

說(shuō)明: 要確定一個(gè)調(diào)度器是否可以調(diào)度特定的 Pod,PodTemplate 或 Pod 清單中的 ?spec.schedulerName? 字段必須匹配 ?KubeSchedulerProfile? 中的 ?schedulerName ?字段。 所有運(yùn)行在集群中的調(diào)度器必須擁有唯一的名稱。

還要注意,我們創(chuàng)建了一個(gè)專用服務(wù)賬號(hào) ?my-scheduler? 并將集群角色 ?system:kube-scheduler? 綁定到它,以便它可以獲得與 ?kube-scheduler? 相同的權(quán)限。

在集群中運(yùn)行第二個(gè)調(diào)度器

為了在 Kubernetes 集群中運(yùn)行我們的第二個(gè)調(diào)度器,在 Kubernetes 集群中創(chuàng)建上面配置中指定的 Deployment:

kubectl create -f my-scheduler.yaml

驗(yàn)證調(diào)度器 Pod 正在運(yùn)行:

kubectl get pods --namespace=kube-system

輸出類(lèi)似于:

NAME                                           READY     STATUS    RESTARTS   AGE
....
my-scheduler-lnf4s-4744f                       1/1       Running   0          2m
...

此列表中,除了默認(rèn)的 ?kube-scheduler? Pod 之外,你應(yīng)該還能看到處于 “Running” 狀態(tài)的 ?my-scheduler? Pod。

啟用領(lǐng)導(dǎo)者選舉

要在啟用了 leader 選舉的情況下運(yùn)行多調(diào)度器,你必須執(zhí)行以下操作:

更新你的 YAML 文件中的 ?my-scheduler-config? ConfigMap 里的 KubeSchedulerConfiguration 相關(guān)字段如下:

  • ?leaderElection.leaderElect? to ?true?
  • ?leaderElection.resourceNamespace? to ??
  • ?leaderElection.resourceName? to ??

說(shuō)明:

控制平面會(huì)為你創(chuàng)建鎖對(duì)象,但是命名空間必須已經(jīng)存在。 你可以使用 ?
kube-system? 命名空間。

如果在集群上啟用了 RBAC,則必須更新 ?system:kube-scheduler? 集群角色。 將調(diào)度器名稱添加到應(yīng)用了 ?endpoints ?和 ?leases ?資源的規(guī)則的 resourceNames 中,如以下示例所示:

kubectl edit clusterrole system:kube-scheduler
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:kube-scheduler
rules:
  - apiGroups:
      - coordination.k8s.io
    resources:
      - leases
    verbs:
      - create
  - apiGroups:
      - coordination.k8s.io
    resourceNames:
      - kube-scheduler
      - my-scheduler
    resources:
      - leases
    verbs:
      - get
      - update
  - apiGroups:
      - ""
    resourceNames:
      - kube-scheduler
      - my-scheduler
    resources:
      - endpoints
    verbs:
      - delete
      - get
      - patch
      - update

為 Pod 指定調(diào)度器

現(xiàn)在第二個(gè)調(diào)度器正在運(yùn)行,創(chuàng)建一些 Pod,并指定它們由默認(rèn)調(diào)度器或部署的調(diào)度器進(jìn)行調(diào)度。 為了使用特定的調(diào)度器調(diào)度給定的 Pod,在那個(gè) Pod 的 spec 中指定調(diào)度器的名稱。讓我們看看三個(gè)例子。

  • Pod spec 沒(méi)有任何調(diào)度器名稱
  • apiVersion: v1
    kind: Pod
    metadata:
      name: no-annotation
      labels:
        name: multischeduler-example
    spec:
      containers:
      - name: pod-with-no-annotation-container
        image: k8s.gcr.io/pause:2.0

    如果未提供調(diào)度器名稱,則會(huì)使用 default-scheduler 自動(dòng)調(diào)度 pod。

    將此文件另存為 ?pod1.yaml?,并將其提交給 Kubernetes 集群。

    kubectl create -f pod1.yaml
    
  • Pod spec 設(shè)置為 ?default-scheduler?
  • apiVersion: v1
    kind: Pod
    metadata:
      name: annotation-default-scheduler
      labels:
        name: multischeduler-example
    spec:
      schedulerName: default-scheduler
      containers:
      - name: pod-with-default-annotation-container
        image: k8s.gcr.io/pause:2.0
    

    通過(guò)將調(diào)度器名稱作為 ?spec.schedulerName? 參數(shù)的值來(lái)指定調(diào)度器。 在這種情況下,我們提供默認(rèn)調(diào)度器的名稱,即 ?default-scheduler?。

    將此文件另存為 ?pod2.yaml?,并將其提交給 Kubernetes 集群。

    kubectl create -f pod2.yaml
    
  • Pod spec 設(shè)置為 ?my-scheduler?
  • apiVersion: v1
    kind: Pod
    metadata:
      name: annotation-second-scheduler
      labels:
        name: multischeduler-example
    spec:
      schedulerName: my-scheduler
      containers:
      - name: pod-with-second-annotation-container
        image: k8s.gcr.io/pause:2.0
    

    在這種情況下,我們指定此 Pod 使用我們部署的 ?my-scheduler? 來(lái)調(diào)度。 請(qǐng)注意,?spec.schedulerName? 參數(shù)的值應(yīng)該與調(diào)度器提供的 ?KubeSchedulerProfile ?中的 ?schedulerName ?字段相匹配。

    將此文件另存為 ?pod3.yaml?,并將其提交給 Kubernetes 集群。

    kubectl create -f pod3.yaml
    

確認(rèn)所有三個(gè) pod 都在運(yùn)行。

kubectl get pods

驗(yàn)證是否使用所需的調(diào)度器調(diào)度了 pod

為了更容易地完成這些示例,我們沒(méi)有驗(yàn)證 Pod 實(shí)際上是使用所需的調(diào)度程序調(diào)度的。 我們可以通過(guò)更改 Pod 的順序和上面的部署配置提交來(lái)驗(yàn)證這一點(diǎn)。 如果我們?cè)谔峤徽{(diào)度器部署配置之前將所有 Pod 配置提交給 Kubernetes 集群, 我們將看到注解了 ?annotation-second-scheduler? 的 Pod 始終處于 “Pending” 狀態(tài), 而其他兩個(gè) Pod 被調(diào)度。 一旦我們提交調(diào)度器部署配置并且我們的新調(diào)度器開(kāi)始運(yùn)行,注解了 ?annotation-second-scheduler? 的 pod 就能被調(diào)度。

或者,可以查看事件日志中的 “Scheduled” 條目,以驗(yàn)證是否由所需的調(diào)度器調(diào)度了 Pod。

kubectl get events

你也可以使用自定義調(diào)度器配置 或自定義容器鏡像,用于集群的主調(diào)度器,方法是在相關(guān)控制平面節(jié)點(diǎn)上修改其靜態(tài) pod 清單。


網(wǎng)頁(yè)標(biāo)題:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 配置多個(gè)調(diào)度器
文章URL:http://www.dlmjj.cn/article/cossdeg.html