kubernetes高级调度简单说明

时光怂恿深爱的人放手 提交于 2020-02-26 03:29:16

Node label使用说明

1.查看label

kubectl get nodes --show-labels=true

2.创建label

kubectl label node $(node_name)  $key=$value

3.更新label

kubectl label --overwrite node  $(node_name)  $key=$value

4.删除label

kubectl label node $(node_name)  $key-

Node调度几种模式

首先看一下,我测试环境node label
kubernetes高级调度简单说明
1.nodeName模式

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world 
spec:
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: hello-world 
    spec:
      nodeName: node1
      containers:
      - name: hello-world 
        image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest

2.nodeSelector模式

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world 
spec:
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: hello-world 
    spec:
      nodeSelector:
        kubernetes.io/hostname: node1
          containers:
      - name: hello-world 
        image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest

3.affinity模式

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: hello-world
spec:
  replicas: 4
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "kubernetes.io/hostname"
                operator: NotIn
                values: ["node2"]
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 10
            preference:
              matchExpressions:
              - key: zone 
                operator: In
                values:
                - ali

解读
上面规则说明:除node2节点外,分配到zone=ali标签的node上,反之随机调度
requiredDuringSchedulingIgnoredDuringExecution :硬要求,在调度期间要求满足亲和性或者反亲和性规则,如果不能满足规则,则POD不能被调度到对应的主机上。在之后的运行过程中,系统不会再检查这些规则是否满足。
preferredDuringSchedulingIgnoredDuringExecution:软要求,在调度期间尽量满足亲和性或者反亲和性规则,如果不能满足规则,POD也有可能被调度到对应的主机上。在之后的运行过程中,系统不会再检查这些规则是否满足。
operator四种模式: In NotIn Exists NotExists Gt Lt


Taints and Tolerations (污点和容忍)

运行下面命令,标记节点为污点进行测试,标记污点的节点不会分配POD,除非指定tolerations

kubectl taint nodes node1 node-role/node1=:NoSchedule
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: hello-world
spec:
  replicas: 4
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      tolerations:
      - key: node-role/node1
        operator: Exists
        effect: NoSchedule
      containers:
      - name: hello-world
        image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: "kubernetes.io/hostname"
                operator: In
                values: ["node1"]

Pod调度模式

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: hello-world
spec:
  replicas: 4
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: k8s-app
                operator: In
                values:
                - redis
              topologyKey: kubernetes.io/hostname 
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: k8s-app
                  operator: NotIn
                  values:
                  - nginx
              topologyKey: kubernetes.io/hostname
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!