k8s的内存分配

简介: k8s的内存分配

在K8s中定义Pod中运行容器有两个维度的限制:

  1. 资源需求(Requests):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。否则pod无法启动。如 Pod运行至少需要2G内存,1核CPU。(硬限制)
  2. 资源限额(Limits):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。(软限制)

通常来说:Limits >= Requests 并且requests 和 limits 通常要一起配置,若只配置了requests, 而不配置limits,则很可能导致Pod会吃掉所有资源。

在K8s的资源:

CPU:

  我们知道2核2线程的CPU,可被系统识别为4个逻辑CPU,在K8s中对CPU的分配限制是对逻辑CPU做分片限制的。也就是说分配给容器一个CPU,实际是分配一个逻辑CPU。

  而且1个逻辑CPU还可被单独划分子单位,即 1个逻辑CPU,还可被划分为1000个millicore(毫核), 简单说就是1个逻辑CPU,继续逻辑分割为1000个豪核心。

  豪核:可简单理解为将CPU的时间片做逻辑分割,每一段时间片就是一个豪核心。

  所以:500m 就是500豪核心,即0.5个逻辑CPU.

内存:

  K,M,G,T,P,E #通常这些单位是以1000为换算标准的。

  Ki, Mi, Gi, Ti, Pi, Ei #这些通常是以1024为换算标准的。

来个demo

apiVersion: v1
kind: Pod
metadata:
  name: nginx2
spec:
  containers:
  - name: nginx2
    image: nginx:test
    ports:
    - containerPort: 80
    resources:
      limits:
        cpu: 200m
        memory: 128Mi
      requests:
        cpu: 200m
        memory: 128Mi

上面这个limits: cpu: 200m memory: 128Mi 说明在k8s的master节点调度启动这个pod时,会寻找满足cpu: 200m memory: 128Mi 的node进行调度,如果没有满足的节点就会调度失败,pod起不来。

pod起来之后,主要起作用的是requests: cpu: 200m memory: 128Mi,实际占用的资源应该不能超过这个,否则这个pod就会出问题。

QoS类型:

 Guranteed:

  每个容器的CPU,RAM资源都设置了相同值的requests 和 limits属性。

  简单说: cpu.limits = cpu.requests

       memory.limits = memory.requests

  这类Pod的运行优先级最高,但凡这样配置了cpu和内存的limits和requests,它会自动被归为此类。

 Burstable:

    每个容器至少定义了CPU,RAM的requests属性,这里说每个容器是指:一个Pod中可以运行多个容器。

    那么这类容器就会被自动归为burstable,而此类就属于中等优先级。

 BestEffort:

    没有一个容器设置了requests 或 limits,则会归为此类,而此类别是最低优先级。

其实用的最多的是Guranteed,因为谁会这么问一个卖鸡蛋的,你有100斤鸡蛋吗?我要1斤!

查看

kubectl describe pod nginx2 |grep "QoS Class"
QoS Class:       Guaranteed

查看nodes使用率

kubectl top nodes

查看cpu、内存使用率

kubectl top pods nginx2
NAME                 CPU(cores)   MEMORY(bytes)   
nginx2                 1m           14Mi
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Arthas Prometheus Kubernetes
K8S pod内存告警分析
K8S pod内存告警分析
1283 0
|
Kubernetes 监控 Java
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
659 0
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
|
2月前
|
Kubernetes NoSQL Redis
容器服务ACK常见问题之修改内存限制失败如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
10月前
|
Prometheus Kubernetes 监控
Kubernetes APIServer 内存爆满分析
董江,容器技术布道者及实践者,中国移动高级系统架构专家,曾担任华为云核心网技术专家,CloudNative社区核心成员,KubeServiceStack社区发起者,Prometheus社区PMC,Knative Committer,Grafana社区Contributer。 欢迎关注:https://kubeservice.cn/
Kubernetes APIServer 内存爆满分析
|
Kubernetes Java API
【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(下)
【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(下)
452 0
【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(下)
|
Kubernetes Java vr&ar
【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)
【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)
583 0
|
Kubernetes 网络性能优化 Perl
k8s【资源管理(resources)】4--LimitRange为配置命名空间内存最小和最大约束
k8s【资源管理(resources)】4--LimitRange为配置命名空间内存最小和最大约束
|
Kubernetes 网络性能优化 容器
k8s 【资源管理】2--LimitRange为命名空间配置默认的内存请求和限制
k8s 【资源管理】2--LimitRange为命名空间配置默认的内存请求和限制
|
Kubernetes 数据可视化 API
探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存
探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存
129 0
探索使用Kubernetes扩展专用游戏服务器:第2部分-管理CPU和内存
|
存储 Kubernetes 安全
轻松快速地调整Kubernetes的CPU和内存
轻松快速地调整Kubernetes的CPU和内存
1950 0
轻松快速地调整Kubernetes的CPU和内存

推荐镜像

更多