MostRequested:与LeastRequested相反,尽可能将一个节点使用完
ImageLoclity:根据节点本地拥有Pod所使用的镜像大小来计算得分
# kubectl label nodes node01 disktype=ssd
# kubectl label nodes node02 disktype=harddisk
# kubectl get nodes --show-labels
# vim pod-demo-ssd.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo-ssd
namespace: default
labels:
app: myapp
tier: frontend
annotations:
dongfei.tech/created-by: "cluster admin"
spec:
containers:
- name: myapp
image: dongfeimg/myapp:v1
imagePullPolicy: IfNotPresent
nodeSelector: #节点选择器
disktype: ssd #调度到拥有disktype=ssd的标签的node上
# kubectl label nodes master zone=Beijing
# kubectl label nodes node01 zone=Shanghai
# kubectl label nodes node02 zone=Guangzhou
# cat pod-demo-nodeaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo-nodeaffinity
namespace: default
labels:
app: myapp
tier: frontend
annotations:
dongfei.tech/created-by: "cluster admin"
spec:
containers:
- name: myapp
image: dongfeimg/myapp:v1
imagePullPolicy: IfNotPresent
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution: #硬亲和
nodeSelectorTerms:
- matchExpressions: #选择zone在Beijing或Shanghai
- key: zone
operator: In
values:
- Beijing
- Shanghai
# cat pod-demo-podaffinity.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo-podaffinity-1
namespace: default
labels:
app: myapp
tier: frontend
annotations:
dongfei.tech/created-by: "cluster admin"
spec:
containers:
- name: myapp
image: dongfeimg/myapp:v1
imagePullPolicy: IfNotPresent
---
apiVersion: v1
kind: Pod
metadata:
name: pod-demo-podaffinity-2
namespace: default
labels:
app: db
tier: backend
annotations:
dongfei.tech/created-by: "cluster admin"
spec:
containers:
- name: busybox
image: busybox:latest
imagePullPolicy: IfNotPresent
command: ["sh","-c","sleep 3600"]
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- {key: app, operator: In, values: ["myapp"]}
topologyKey: kubernetes.io/hostname
# kubectl taint node node01 node-type=production:NoSchedule #打污点
# kubectl describe node node01 |grep Taints
# cat deploy-damo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp-container
image: dongfeimg/myapp:v2
ports:
- name: http
containerPort: 80
tolerations:
- key: "node-type"
operator: "Equal" #完全相同
value: "production"
effect: "NoSchedule"
原文:https://www.cnblogs.com/L-dongf/p/12327401.html