zoukankan      html  css  js  c++  java
  • kubernets之带有limit的资源

    一  pod中容器的limits属性的作用

      1.1  创建一个带有资源limits的pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: limited-pod
    spec:
      containers:
      - image: busybox
        command: ["dd","if=/dev/zero","of=/dev/null"]
        name: main
        resources:
          limits:
            cpu: 1
            memory: 20Mi
    • 限制了cpu使用的时间,可以使用cpu的所有运行时间
    • 限制了内存只能有20Mi
    • 与requests资源不同limits资源可以超卖,即节点上面所有的pod的limits属性之和相加起来可以大于等于100

          1.2  当容器内的应用超过这个使用配额的时候会发生什么?

        当容器运行的应用超过这个配额的时候,kubernetes会将这个pod杀掉,并且当这个pod的重启策略是always的时候,第一次重启之后,接下来他还会继续重启,而且第二次重启的时间比第一次时间间隔要长,然后一直这样循环往复下去,直达达到300点这个临界值,之后会一直以这个时间进行重复启动,而且pod也会一直处于CrashLoopBackOff状态查询日志或者通过时间可以知道详细的原因

      

    • 这个例子中,容器因为内存不足而被杀死了

      

      1.3 容器中的应用是如何看待limits

        在容器中查看内存的时候,显示的是容器所在节点上面的数量,而容器无法感知这个限制,任何利用这个信息来决定使用多少应用来说都具有非常不利的影响,在java应用程序中很有可能会出现OOMkill

        容器内同样可以看到所有的所有节点的cpu内核,与内存完全一致,当在容器的limits上面限制了1,容器里面查看的时候也会是64,而且应用能够占用的cpu时间也只能1/64.并且它还不会只在一个cpu上面进行运行,而是会跑满所有的cpu,这对实际生产简直是灾难,它会占用大量的内存

        综上所示,不能够依赖应用程序从系统里面或者cpu的数量,而是应该通过downwardAPI的形式将CPU限额传递到容器并使用这个值,或者也可以通过cgroup系统直接获取配置的CPU限制,查看下面所示文件

    • /sys/fs/cgroup/cpu/cpu.cfs_quota_us
    • /sys/fs/cgroup/cpu/cpu.cfs_period_us

      

      

  • 相关阅读:
    UVa 1364
    一个无向图博弈游戏
    poj 2777 Count Color (线段树)
    UVA 1660
    JS中的caller属性
    “给在读研究生+未来要读研同学们的一封受益匪浅的信”(摘录+整合)
    用cmd重命名.htaccess
    java Scoket的c\s结构聊天室
    log4j详解
    检查文本文件编码的Java程序
  • 原文地址:https://www.cnblogs.com/wxm-pythoncoder/p/14300278.html
Copyright © 2011-2022 走看看