zoukankan      html  css  js  c++  java
  • 8-2 Resources-----多维度集群资源管理

    Resources

    初始:       CPU   内存    GPU   持久化存储

    应该先知每个资源的大小,可配置适应资源大小的 应用

    核心设计

    Requests   容器希望被分配到的,可以完成保证的资源量 ,提供给调度器,调度器根据这个值设置策略,从而找到最优的节点。

    Limits         容器使用的一个资源的上限,整个节点资源不足参考的上限,把那个节点杀掉

    项目地址    https://gitee.com/dy-k8s/deep-in-kubernetes.git

    web-dev.yaml  单位换算。

    1核cpu=1000m

    kubectl apply -f web-dev.yaml 
    kubectl get pods -A -o wide    # 查看部署位置
    kubectl describe node w2      # 查看看节点部署后的资源

    在部署机器w2上查看docker参数配置

    docker ps|grep web-demo  # 查看启动的容器ID
    docker inspect ba5bd45ba22c    # 查看参数设置, 查看已启动的

     describe说明

    CpuShares:102, 
    Memory: "524288000"      #  值  除1024除1024=值M
    CpuPeriod:" 100000"   # docker默认值,到位纳秒  100000纳秒=100毫秒
    CpuQuata: " 20000"      # 200m=0.2核。 0.2* 10000=20000; 100毫秒内最多分配的量
    docker exec -it ba5bd45ba22c bash   #进入容器内部压测cpu
    dd if=/dev/zero of=/dev/null &     #cpu压测 

     free超了则直接杀掉进程,cpu则不会。

    Requests & Limits

    Requests == Limits    # 服务完全可靠,等级哦最高的

    不设置(不建议)

    Limits > Requests       # 比较可靠的服务,会按照优先级分配。

    1、节点内存只有4g, requests为5g,则调度失败。

    2、资源足够的,随便定义一个requests 100g,应用只用了1g,浪费资源,应用需要多少内存。

    错误的不合理配置产生

    k8S给了一种方案 limtis

    kubectl create ns test
    kubectl create -f limits-test.yaml -n test    # 可以对namespace命名空间进行做限制
    kubectl describe limits -n test

     部署应用测试。  

    kubectl apply -f web-test.yaml   #不做任何资源做限制
    kubectl get deploy -n test web-demo -o yaml   # 查看详细信息
    kubectl get pods -n test -o yaml   #resources 里面配置,则是default默认值。

    多个团队,同时使用一个集群,合理分配资源,不能让一个团队把资源占用过多

    资源配额quota限制      指定namespace,给每个namespace做限制

    kubectl apply -f  compute-resource.yaml -n test
    kubectl apply -f object-count.yaml -n test
    kubectl get quota -n test   # 查看 quota类型
    
    # 查看限制信息
    kubectl describe quota object-counts -n test
    kubectl describe quota resource-quota -n test
    
    
    # 部署修改超出限制测试

    Pod驱逐 -Eviction

    常见驱逐策略配置

    --eviction-soft=memory.available<1.5Gi         # 持续1m30S小于1.5Gi时候,进行驱逐。
    --eviction-soft-grace-period=memory.available=1m30s
    
    # 这些条件满足的时候立刻驱逐
    
    --eviction-hard=menory.available<100Mi,
    nodesfs.available<1G,nodefs.indesFree<5

    磁盘紧缺

      删除死掉的pod、容器

      删除没用的镜像

      按优先级,资源占用情况驱逐pod

    内存紧缺

      驱逐不可靠的pod

      驱逐基本可靠的pod

      删除可靠的pod

    # 测试一个吃内存的项目,访问。达到上限看效果。

     end...

  • 相关阅读:
    梯度下降法以及实现
    常见的端口号及其用途
    vue build报copy-webpack-plugin] unable to locate异常的解决方法
    vue build错误异常的解决方法
    Websocket-Sharp获取客户端IP地址和端口号
    理解SignalR
    城市经纬度 json
    FFmpeg部署及相关指令操作说明
    C#中Skip和Take的用法
    SQL Server 2008R2 :远程调用失败 的解决方法(全部方法)
  • 原文地址:https://www.cnblogs.com/edeny/p/14501109.html
Copyright © 2011-2022 走看看