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...

原文地址:https://www.cnblogs.com/edeny/p/14501109.html