k8s资源调度(POD的资源调度( nodeSelector & nodeAffinity)
目录POD的资源调度(nodeSelector & nodeAffinity)nodeSelector:案例nodeAffinity案例POD的资源调度(nodeSelector & nodeAffinity)nodeSelector:用于将Pod调度到匹配Label的Node上,如果没有匹配的标签会调度失败。作用: • 约束Po...
·
目录
POD的资源调度( nodeSelector & nodeAffinity)
POD的资源调度( nodeSelector & nodeAffinity)
nodeSelector:
用于将Pod调度到匹配Label的Node上,如果没有匹配的标签会调度失败。
作用: • 约束Pod到特定的节点运行 • 完全匹配节点标签
应用场景:• 专用节点:根据业务线将Node分组管理
• 配备特殊硬件:部分Node配有SSD硬盘、GPU
案例
现在我的k8s服务器有两类服务器,一种是ssd磁盘的服务器,一种是GPU的,此时我们有一个mysql容器,默认情况下他会随机分配在其中一个节点,但我们现在想把它分配在ssd磁盘服务器上
此时,我们可以在ssd服务器上打一个标签,标签内容为disktype=ssd,在写pod的yaml的时候可以现在将pod分配到这个标签节点
示例:确保Pod分配到具有SSD硬盘的节点上
第一步:给节点添加标签
格式:kubectl label nodes <node-name> <label-key>=<label-value>
例如:
kubectl label nodes k8s-node1 disktype=ssd
验证:kubectl get nodes --show-labels
可以看到已经打上了,其他标签都是自带标签
第二步:添加nodeSelector字段到Pod配置中
例如
apiVersion: v1kind: Podmetadata:creationTimestamp: nulllabels:run: pod1name: pod1spec:nodeSelector:disktype: 'ssd'containers:- image: nginxname: web
最后,验证:
kubectl get pods -o wide
可以看到精确分配到了node1
注意:若在创建时分配了标签,但节点中不存在这个标签的话,pod会进入pending状态,无法分配。
如果两个节点打了一个标签,pod被分配到这个标签的话,pod会被随机分配到其中一个标签
nodeAffinity
nodeAffinity:节点亲和性,与nodeSelector作用一样,但相比 更灵活,满足更多条件,诸如:
• 匹配有更多的逻辑组合,不只是字符串的完全相等,支持的操作 符:In、NotIn、Exists、DoesNotExist、Gt、Lt
• 调度分为软策略和硬策略,而不是硬性要求
• 硬(required):必须满足
• 软(preferred):尝试满足,但不保证
例如
案例
硬性关联,此yaml意思是in,节点必须有这个标签才算满足
apiVersion: v1kind: Podmetadata:name: with-node-affinityspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: disktype # 键operator: In # 操作符,NotIn 分配不满足标签的节点values: # 值- ssdcontainers:- name: with-node-affinityimage: nginx
软性关联:软性关联是类似于,模糊匹配,他是尝试满足但不保证,有一个权重值
(优先满足但不保证)
apiVersion: v1kind: Podmetadata:name: with-node-affinity2spec:affinity:nodeAffinity:#requiredDuringSchedulingIgnoredDuringExecution:# nodeSelectorTerms:# - matchExpressions:# - key: disktype # 键# operator: In # 操作符,NotIn 分配不满足标签的节点# values: # 值# - ssdpreferredDuringSchedulingIgnoredDuringExecution:- weight: 1 # 权重值,1-100preference:matchExpressions:- key: gpuoperator: Invalues:- navidacontainers:- name: with-node-affinityimage: nginx
更多推荐
已为社区贡献13条内容
所有评论(0)