k8s上如何调度pod到其他节点上?

1.驱逐节点上全部pod

驱逐节点上pod,新的pod根据调度被调度到其他节点

kubectl drain <node-name>  --delete-local-data

or(保留daemonset pod)
kubectl drain <node-name> --ignore-daemonsets --delete-local-data

2.驱逐节点上特定pod

2.1标记节点不可调度(新的pod不会被分配过来)

kubectl cordon <node-name>

2.2删除特定pod,重新调度到其他节点上

kubectl delete pod <pod-name> -n <namespace>

3.定义pod的nodeSelector及affinity调度策略

3.1 nodeSelector(pod被调度到特定标签node上)

1
2
3
4
5
6
7
8
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
nodeSelector:
disktype: ssd
...

3.2 affinity亲和性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
affinity: # 亲和性规则
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution: #调度期间必须满足的节点亲和性规则,但在执行期间可以忽略错误
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd

精确地指定 Pod 要调度到特定节点上

4.nodeName

kubectl edit pod <pod-name> -n <namespace>
    spec.nodeName  //pod重新绑定到特定node上

5.修改pod请求资源requests

kubectl set resources pod <pod-name> -n <namespace> --limits=cpu=500m,memory=512Mi --requests=cpu=300m,memory=256Mi

6.重启pod(重新调度到其他节点上)

kubectl rollout restart deployment <deployment-name> -n <namespace>