首页 > 其他分享 >pod中影响调度的主要属性

pod中影响调度的主要属性

时间:2023-03-08 18:31:56浏览次数:48  
标签:request 调度 system 0% pod kube 节点 属性

资源限制limit、request

容器资源限制:

  • resources.limits.cpu
  • resources.limit.memory

容器使用的最小资源要求,作为容器调度时资源分配的依据:

  • resources.requests.cpu
  • resources.requests.memory

k8s会根据request的值五去查找有足够资源的node来调度pod

CPU单位:可以写m也可以写浮点数,例如0.5=500m,1=1000m

apiVersion: v1
kind: pod
metadata:
name: my-pod
spec:
containers:
- name: web
image: nginx
resoures:
request:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"

limits和request的配置简单,但是设置这些值是有讲究的

  • limits的值,不能超过节点的配置
  • request的值不能超过limits的值
  • request是最小资源需求,是一种预留性质的,也就是不是写多少,就会占用宿主机多少资源
  • 如果request设置过高就会导致可用节点少,资源空闲,反之过少就会导致pod多,资源饱和
  • 当request的值在节点不能满足时,pod处于pending状态

查看一个节点的资源占用情况,会显示每个pod的request和limit以及总和

Namespace                   Name                                      CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system calico-kube-controllers-d4bfdcb9-vss4q 0 (0%) 0 (0%) 0 (0%) 0 (0%) 14d
kube-system calico-node-7pwmf 250m (8%) 0 (0%) 0 (0%) 0 (0%) 14d
kube-system coredns-6d8c4cb4d-2sqgp 100m (3%) 0 (0%) 70Mi (2%) 170Mi (5%) 14d
kube-system coredns-6d8c4cb4d-5q9ks 100m (3%) 0 (0%) 70Mi (2%) 170Mi (5%) 14d
kube-system etcd-k8s-master 100m (3%) 0 (0%) 100Mi (3%) 0 (0%) 14d
kube-system kube-apiserver-k8s-master 250m (8%) 0 (0%) 0 (0%) 0 (0%) 14d
kube-system kube-controller-manager-k8s-master 200m (6%) 0 (0%) 0 (0%) 0 (0%) 14d
kube-system kube-proxy-6m547 0 (0%) 0 (0%) 0 (0%) 0 (0%) 14d
kube-system kube-scheduler-k8s-master 100m (3%) 0 (0%) 0 (0%) 0 (0%) 14d
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 1100m (36%) 0 (0%)
memory 240Mi (7%) 340Mi (10%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
hugepages-32Mi 0 (0%) 0 (0%)
hugepages-64Ki 0 (0%) 0 (0%)

NodeSelector: 将pod和node进行绑定

用于将pod调度到匹配Label标签的节点上,如果没有匹配的标签就会调度失败

作用:

  • 约束pod到特定的节点上运行
  • 完全匹配标签,一旦匹配不到就调度失败

应用场景:

  • 专用节点:根据业务线将node分组管理(比如:A业务线的pod需要全部调度到有 test:aa的节点上去)
  • 匹配特殊的硬件:部分Node有ssd盘

这样的配置意思是这个pod永远只能在携带了disktype:ssd标签的node上运行,否则将调度失败。

NodeName,一旦pod的这个字段被赋值,k8s就会认为这个pod已经调度成功,NodeName的值就是node节点名称。这个字段一般由调度器负责设置,测试的时候也可以人为设置。

示例:确保pod分配到有ssd硬盘的节点上

1、给节点添加标签

kubectl label nodes <node_name> <label-key>=<lable-name>
kubectl label nodes k8s-node1 disktype=ssd
# kubectl get nodes --show-labels 查看节点标签

2、添加nodeSelect字段到pod中

apiVersion: v1
kind: Pod
metadata:
name: test1
spec:
nodeSelector:
disktype: "ssd"
containers:
- name: nginx
image: nginx:v1.18

3、查看pod节点分配

kubectl get pod -A -o wide
# 删除节点标签 kubectl label node k8s-node1 <lable-key>-
kubectl label nodes k8s-node1 disktype-

nodeAffinity 节点亲和

节点亲和类似于nodeSelector,也是用于根据node上的标签把pod调度到指定节点上

相比nodeSelector:

  • 有更多的匹配逻辑选择,不仅仅是完全匹配

In、NotIn、Exists、DoesNotExist、Gt、Lt

  • 调度策略分为软策略和硬策略

硬策略(required): 必须满足

软策略(preferred): 尝试满足,但不保证

apiVersion: v1
kind: Pod
metadata:
name: nginx1
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution: # 硬策略
nodeSelectorTerms:
- matchExpressions:
- key: disktype # key类型
operator: In # 策略逻辑
values: # 值
- ssd
containers:
- name: nginx
image: nginx
apiVersion: v1
kind: Pod
metadata:
name: nginx55
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution: # 软策略
- weight: 1 # 权重
preference:
matchExpressions:
- key: disktype
operator: In
values:
- ssd88
containers:
- name: nginx
image: nginx

标签:request,调度,system,0%,pod,kube,节点,属性
From: https://blog.51cto.com/landandan/6108615

相关文章

  • Qt音视频开发21-mpv内核万能属性机制
    一、前言搞过vlc内核后又顺带搞了搞mpv内核,mpv相比vlc,在文件数量、sdk开发便捷性方面绝对占优势的,单文件(可能是静态编译),不像vlc带了一堆插件,通过各种属性来set和get值,后面......
  • pod探针和重启策略
    示例:livenessProbe和HTTPGetAction:[root@localhost7C~]#catnginx-http.ymlapiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deploymentlabels:......
  • laravel之任务调度(定时任务)
      常用命令:#开启任务调度(一般在服务器添加定时任务每分钟执行一次)phpartisanschedule:run  总结:1.runInBackground在不使用runInBackground的方......
  • position的属性值
    (fixed的父元素永远是浏览器窗口,不会根据页面滚动而改变位置;absolute的父元素是可以设置的,他会永远跟随父元素的位置的改变而改变。)1、position:relative;相对定位不影......
  • python中的魔法属性吗
    楔子作为动态语言,python里面提供了很多以双下划线:__开头和结尾的属性,我们称之为魔法属性,这些属性是对象所内置的。我们可以直接通过这些魔法属性动态地查看一个对象的信......
  • pod 卡在Terminating状态无法删除
    处理方案:重启kubelet,如果没有删除执行强制删除处理方案:强制删除pod ......
  • C# 类class 字段和属性
    C#类class字段和属性C#是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个......
  • JavaScript 其他样式操作的属性
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <styletype="text/css"> #box1{ width:100px; height:100px; back......
  • 操作系统--调度算法
                        ......
  • 操作系统--调度算法评估指标
                 ......