nodeSelector:Pod 定向调度

简介

在实际情况下,有时候需要将 Pod 调度到制定的一些 Node 上,比如说CPU密集型Pod调度到CPU够大的节点上,IO密集型Pod调度到带宽够大的节点上等等。可以通过 Node 的标签和 Pod 的 nodeSelector 属性相匹配,来达到上述目的。

给 Node 上标签

kubelet labels nodes <node-name> <label-key>=<label-value>

支持打多个标签,用逗号隔开;

如果要更新标签,加上 --overwrite;如果要删除标签:

kubelet labels nodes <node-name> <label-key>-

如果是查看标签,kubectl get node --show-labels=true


标签选择

比方说我们现在给某个 node 上了一个标签 zone=sz

apiversion: v1
kind: deployment
metadate:
  name: nginx
  labels:
    name: nginx
spec:
  replicas: 1
  selector:
    name: nginx
  template:
    metadate:
      labels:
        name: nginx
    spec:
      containers:
      - name: master
        image: nginx
        ports: 
        - containerPorts: 80
      nodeSelector:
        zone: sz

如果我们给多个 node 都上了这个标签,那么 schedule 调度算法将会在这些 node 中选择一个可用的 Node 进行调度。
如果集群中没有一个 node 有这个标签,那就 pending。


kubernetes 预定义标签

在 node 上,除了我们认为设定的标签,k8s 也会根据 node 的实际情况设定一些标签:

kubernetes.io/hostname
beta.kubernetes.io/os(到 1.18 版本删除)
beta.kubernetes.io/arch(到1.18 版本删除)
kubernetes.io/arch
kubernetes.io/os

用户可以使用这些系统标签进行调度。


猜你喜欢

转载自blog.csdn.net/qq_43762191/article/details/126980063