kubernetes高級調度簡單說明
阿新 • • 發佈:2018-03-20
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高級調度簡單說明