背景:
当用多个团队或者用户共用同一个集群的时候难免会有资源竞争的情况发生,这时候就需要对不同团队或用户的资源使用配额做出限制。
方案:
目前有两种资源分配管理相关的控制策略插件 ResourceQuota 和 LimitRange
两种控制策略的作用范围都是对于某一 namespace,ResourceQuota 用来限制 namespace 中所有的 Pod 占用的总的资源 request 和 limit,而 LimitRange 是用来设置 namespace 中 Pod 的默认的资源 request 和 limit 值。
资源配额分为三种类型:
计算资源配额
存储资源配额
对象数量配额
ResourceQuota:
计算资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: dev
spec:
hard:
pods: "20"
requests.cpu: "20"
requests.memory: 100Gi
limits.cpu: "40"
limits.memory: 200Gi
数量资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
namespace: dev
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"
部署
kubectl apply -f <yaml> -n dev
查看部署结果
kubectl get ResourceQuota -n dev
查看资源使用情况
kubectl describe ResourceQuota -n dev
LimitRange
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range
spec:
limits:
- default:
memory: 2Gi
cpu: 1
defaultRequest:
memory: 1Gi
cpu: 1
type: Container
default 即 limit 的值
defaultRequest 即 request 的值
部署
kubectl apply -f <yaml> -n dev
查看部署结果
kubectl get LimitRange -n dev
测试
创建一个pod试试,发现规则已经生效
参考文档:
https://k8smeetup.github.io/docs/tasks/administer-cluster/cpu-default-namespace/
https://k8smeetup.github.io/docs/concepts/policy/resource-quotas/
https://kubernetes.io/zh/docs/concepts/policy/resource-quotas/