1. 程式人生 > >kubernetes高級調度簡單說明

kubernetes高級調度簡單說明

nodeaffinity podaffinity nodeselector nodename tolerations

Node label使用說明

1.查看node 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.刪除

kubectl label node $(node_name)  $key-

Node調度幾種模式

首先看一下,我測試環境node label
技術分享圖片
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


Taints and 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

kubernetes高級調度簡單說明