Kubernetes

1.Pod调度策略

什么是调度分配?

将Pod分配到合适的计算节点上 ,对应节点上的kubelet运行这些Pod

Scheduler是如何工作的?

Scheduler通过watch机制来发现集群中尚未被调度到节点上的Pod,再根据调度原则将Pod分配到合适的节点上运行

Scheduler调度流程(过滤和打分)
  • 过滤:筛选出满足Pod所有资源请求的节点,包含(计算资源、内存、存储、网络、端口号等)
    如果没有节点满足Pod的需求,Pod将一直处于Pending的状态,直到Scheduler找到合适的节点 运行它
  • 打分:Scheduler根据打分规则为每个调度节点打分,选出得分最高的节点来运行Pod,
    如果存在得分相同的Pod,Scheduler会随机选择一个节点
    确定了某个节点运行Pod后,Scheduler会将决定通知给apiServer,这个过程叫做绑定

2.Pod定向调度

Kubernetes动态调度 kubernetes 调度策略_Kubernetes动态调度


缺点:节点单一,没有冗余性,如果指定的节点不能运行Pod,不会迁移到其他节点,会一直等待下去

基于标签的Pod调度

标签是什么?

标签(labels)是附加在Kubernetes上的键值对

标签的用途

使用节点名称调度不够灵活,标签可以更加灵活的方式完成调度任务

标签能够以松散耦合的方式将它们的组织结构映射到系统,无需客户端存储这些映射

标签可以在创建时附加到对象,也可以在创建之后随时添加和修改

标签可以用于组织和选择对象的子集

#使用show-lables查询标签
kubelet -n kube-system get pods --show-labels
#使用-l筛选标签
kubelet -n kube-system get pods -l 标签名称
#查看标签
kubectl get 资源类型 [资源名称] --show-lables
#设置标签
kubectl label 资源类型 [资源名称] <label-key>=<lable-value>
#删除标签
kubectl label 资源类型 [资源名称] <label-key>-

Kubernetes动态调度 kubernetes 调度策略_docker_02

标签选择运算符(yaml中标签的key相同会被覆盖)

Kubernetes动态调度 kubernetes 调度策略_Kubernetes动态调度_03


Kubernetes动态调度 kubernetes 调度策略_docker_04

3.资源配额

为什么要资源配额?

当多个应用共享固定节点数目的集群时,人们会担心某些应用多度的使用资源,从而影响到其他的服务,我们需要设定一些规则,用来保证应用能获得其运行所需要的合理资源

CPU资源类型

CPU的约束请求以毫核(m)为单位。在K8S中1m是最小的调度单元,CPU的一个核心是1000m

内存资源类型

memory的约束和请求以字节为单位

内存的表示单位:E、P、T、G、M、k

也可以使用对应的2的幂数:Ei、Pi、Ti、Gi、Mi、Ki

例如:以下表达式所代表的是相同的值

1k==1000

1Ki==1024

最小资源配额

Kubernetes动态调度 kubernetes 调度策略_java_05


Kubernetes动态调度 kubernetes 调度策略_Pod_06

备注:比如一个2CPU、4GB内存的服务器,只能创建3个*1200Mi的Pod,第四个就会处于Pending的状态

2个CPU2个核心1000毫核,所以800毫核只能创建2个Pod,第三个处于Pending

最大资源配额

Kubernetes动态调度 kubernetes 调度策略_kubernetes_07

#内存超过限额服务会被强制杀死

全局资源配额

如果大量容器需要设置资源配额,为每个Pod设置资源配策略不方便且不好管理,管理员可以以名称空间为单位(namespace),限制其资源的使用及创建。在该名称空间中创建的容器都会受到规则的限制

K8S支持的全局配额方式有:

  • 对内存、CPU、存储资源进行配额:LimitRange
  • 对Pod进行配额:ResourceQuota

Kubernetes动态调度 kubernetes 调度策略_docker_08


Kubernetes动态调度 kubernetes 调度策略_Pod_09


Kubernetes动态调度 kubernetes 调度策略_kubernetes_10


Kubernetes动态调度 kubernetes 调度策略_docker_11

4.资源监控工具

K8S中的Metrics-server组件提供有关节点和Pod的资源使用情况

Metrics-server是什么?

是集群核心监控数据的聚合器,存储了各个节点和Pod的监控数据,并且提供了API以供查询和使用

通过kubelet获取node和Pod的CPU,内存等监控数据。为调度器、弹性控制器、以及Dashboard等UI组件提供数据来源

安装条件

kube-apiServer必须启用聚合服务,或使用kube-proxy代理转发

节点必须启用身份验证和授权。kubelet证书需要由集群证书颁发机构签名