date: 2020-07-24title: k8s之pod调度 #标题
tags: k8s #标签
categories: k8s # 分类
pod调度方式
k8s一共提供了四种方法,可以将 Pod 调度到指定的节点上,这些方法从简便到复杂的顺序如下:
- 指定节点 nodeName。
- 节点选择器 nodeSelector (推荐)
- Node isolation/restriction
- Affinity and anti-affinity
这篇博文将只记录前两种调度的配置。
指定节点 nodeName
nodeName 是四种方法中最简单的一个,但是因为它的局限性,也是使用最少的。nodeName 是 Pod.Spec当中的一个字段。如果该字段非空,调度程序直接将其指派到 nodeName 对应的节点上运行。
通过 nodeName 限定 Pod 所运行的节点有如下局限性:
- 如果 nodeName 对应的节点不存在,Pod 将不能运行;
- 如果 nodeName 对应的节点没有足够的资源,Pod 将运行失败,可能的原因有:OutOfmemory /OutOfcpu;
yaml文件中部分示例如下
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: web-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: web-nginx
spec:
containers:
- image: 'nginx:latest'
imagePullPolicy: IfNotPresent
name: web
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
nodeName: node02 # 这里指定nodeName即可
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
节点选择器 nodeSelector
nodeSelector 是 Pod.Spec 中的一个字段。指定了一组键值对。节点的 labels 中必须包含 Pod 的 nodeSelector 中所有的名值对,该节点才可以运行此 Pod。最普遍的用法中, nodeSelector 只包含一个名值对。
标签相关操作
# 查看节点所有标签
kubectl get node --show-labels
# 给node02节点添加label memory=big
kubectl label nodes node02 memory=big
# 更新label需增加 --overwrite
kubectl label nodes node02 memory=min --overwrite
# 删除标签需指定标签键名及 - 号
kubectl label nodes node02 memory-
通过标签选择器将容器调度到指定节点
# 给节点打标签
kubectl label nodes node01 name=lvjianzhao
部分yaml文件如下
spec:
progressDeadlineSeconds: 600
replicas: 6
revisionHistoryLimit: 10
selector:
matchLabels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: web-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: web-nginx
spec:
containers:
- image: 'nginx:latest'
imagePullPolicy: IfNotPresent
name: nginx
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
nodeSelector: # 添加此字段即可
name: lvjianzhao
restartPolicy: Always
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
查看调度情况如下: