06-容器的资源限制
容器的资源限制
kubernetes 资源控制的几种方式
k8s 可以通过以下几种方式进行资源控制
- pod.spec.containers.resources
- limitranges
- resource quotas
- storagelimits
服务质量
requests( 资源需求,最低保障 ):
limits( 资源限制,硬限制 ):
CPU: 指CPU线程,一个线程 1000m
内存
QoS Class:自动生成
-
Guranteed(优先级高)
同时设置CPU与内存的request和limits
CPU.limits=CPU.request
memory.limits=CPU.request
-
Burstable(优先级中)
至少一个容器设置了CPU或memory的request
-
BestEffort(优先级低)
没有任何一个容器被设置了request和limits
当服务器的资源不够用的时候
- 会优先杀掉 优先级低 的容器。
- 按照需求量,占用 比率高 的被杀掉。
HeapSter+InfluxDB+Grafana(适用于1.10之前的版本,已经不建议使用)
资源使用量数据采集工具
- cAdvisor:集成与kunelet,收集node上 pod级别的用量
- HeapSter: 收集汇总数据
- InfluxDB:持久化数据
- Grafana:展示数据
https://github.com/huruizhi/kubeasz/blob/master/docs/guide/heapster.md
资源指标API 与 自定义指标API
- 资源指标
- 自定义指标
新一代架构
-
核心指标流水线:kubelet metric-server 与 API Server 提供的api;监控CPU累计使用率,内存实时使用率,Pod的资源占用与node的磁盘占用率。
-
监控流水线:从系统手机各种指标数据提供给终端用户、存储系统与HPA,非核心指标不能被k8s所解析。
metric-server
资源指标
kube-aggregator 作为代理将核心指标的访问指向apiserver,将用户自定义的指标指向metric-server
prometheus + k8s-prometheus-adapter
自定义指标
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus
注意:推荐使用helm安装部署prometues
HPA 应用自动伸缩
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS
[--cpu-percent=CPU] [options]
kubectl explain hpa.spec.scaleTargetRef
limitranges
limitranges 可以对cpu、内存 进行资源限制。
limitranges 有两种type :Pod与 Container。
limitranges 的作用范围为namespace 下的资源,资源类型由type 决定。
limitranges 对资源的控制有五种方式:
- max :资源空闲时 最大的资源使用量
- min:资源空闲时 最小的资源使用量
- default:一般情况下最大使用量
- default request:一般情况下最小使用量
- maxLimitRequestRatio:最小/最大 使用量的比率。
Pod 不适用于 default 与 default request。Container 适用于所有的资源控制方式。
当namespace 中的containers 没有配置resources 资源限制,则使用limitranges的策略。
如果namespace 中的资源配置了resources 资源限制的配置,则需要满足以下规则
limitranges type 为container:
min <= resource 资源限制 <= max
limitranges type 为Pod:
min <= pod 中所有container的resource 资源限制之和 <= max
limitrange 控制策略在Pod Admission 阶段生效,对于在running 的pod不生效