kubernetes-notes
  • 目录
    • 序言
  • 云原生体系
    • 12-Factor
    • K8S知识体系
  • 安装与配置
    • 部署k8s集群
      • 使用kubeadm安装生产环境kubernetes
      • 使用kubespray安装kubernetes
      • 使用minikube安装kubernetes
      • 使用kind安装kubernetes
    • k8s证书及秘钥
    • k8s版本说明
  • 基本概念
    • kubernetes架构
      • Kubernetes总架构图
      • 基于Docker及Kubernetes技术构建容器云(PaaS)平台概述
    • kubernetes对象
      • 理解kubernetes对象
      • kubernetes常用对象说明
    • Pod
      • Pod介绍
      • Pod定义文件
      • Pod生命周期
      • Pod健康检查
      • Pod存储卷
      • Pod控制器
      • Pod伸缩与升级
    • 配置
      • ConfigMap
    • Workload
  • 核心原理
    • 核心组件
      • Api Server
      • Controller Manager
      • Scheduler
      • Kubelet
    • 流程图
      • Pod创建流程
      • PVC创建流程
  • 容器网络
    • Docker网络
    • K8S网络
    • 网络插件
      • Flannel介绍
    • CNI
      • CNI接口介绍
      • Macvlan介绍
  • 容器存储
    • 存储卷概念
      • Volume
      • Persistent Volume
      • Persistent Volume Claim
      • Storage Class
      • Dynamic Volume Provisioning
    • CSI
      • csi-cephfs-plugin
      • 部署csi-cephfs
      • 部署cephfs-provisioner
      • FlexVolume介绍
  • 资源隔离
    • 资源配额
    • Pod限额
    • 资源服务质量
    • Lxcfs资源视图隔离
  • 运维指南
    • kubectl工具
      • kubectl安装与配置
      • kubectl命令说明
      • kubectl命令别名
    • kubernetes集群问题排查
    • 节点调度
      • 安全迁移节点
      • 指定Node调度与隔离
    • 镜像仓库配置
      • 配置私有的镜像仓库
      • 拉取私有镜像
  • 开发指南
    • client-go的使用及源码分析
    • CSI插件开发
      • nfs-client-provisioner源码分析
      • csi-provisioner源码分析
    • operator开发
      • kubebuilder的使用
  • 问题排查
    • 节点相关问题
      • keycreate permission denied
      • Cgroup不支持pid资源
      • Cgroup子系统无法挂载
    • Pod驱逐
    • 镜像拉取失败问题
    • PVC Terminating
  • 源码分析
    • Kubernetes源码分析笔记
    • kubelet
      • NewKubeletCommand
      • NewMainKubelet
      • startKubelet
      • syncLoopIteration
      • syncPod
    • kube-controller-manager
      • NewControllerManagerCommand
      • DeploymentController
      • Informer机制
    • kube-scheduler
      • NewSchedulerCommand
      • registerAlgorithmProvider
      • scheduleOne
      • findNodesThatFit
      • PrioritizeNodes
      • preempt
    • kube-apiserver
      • NewAPIServerCommand
  • Runtime
    • Runtime
      • Runc和Containerd概述
    • Containerd
      • 安装Containerd
    • Docker
      • Docker学习笔记
    • Kata Container
      • kata容器简介
      • kata配置
    • GPU
      • nvidia-device-plugin介绍
  • Etcd
    • Etcd介绍
    • Raft算法
    • Etcd启动配置参数
    • Etcd访问控制
    • etcdctl命令工具
      • etcdctl命令工具-V3
      • etcdctl命令工具-V2
    • Etcd中的k8s数据
    • Etcd-Operator的使用
  • 多集群管理
    • k8s多集群管理的思考
    • Virtual Kubelet
      • Virtual Kubelet介绍
      • Virtual Kubelet 命令
    • Karmada
      • Karmada介绍
  • 边缘容器
    • KubeEdge介绍
    • KubeEdge源码分析
      • cloudcore
      • edgecore
    • OpenYurt部署
  • 虚拟化
    • 虚拟化相关概念
    • KubeVirt
      • KubeVirt的介绍
      • KubeVirt的使用
  • 监控体系
    • 监控体系介绍
    • cAdvisor介绍
    • Heapster介绍
    • Influxdb介绍
由 GitBook 提供支持

www.huweihuang.com

在本页
  • 资源配额(ResourceQuota)
  • 1. 启动资源配额
  • 2. 计算资源配额
  • 3. 存储资源配额
  • 4. 对象数量的配额
  • 5. 限额的作用域
  • 6. request和limit
  • 7. 查看和设置配额
  • 8. 配额和集群容量

这有帮助吗?

在GitHub上编辑
  1. 资源隔离

资源配额

上一页FlexVolume介绍下一页Pod限额

最后更新于2年前

这有帮助吗?

本文个人博客地址:http://www.huweihuang.com/article/kubernetes/kubernetes-resource/

资源配额(ResourceQuota)

ResourceQuota对象用来定义某个命名空间下所有资源的使用限额,其实包括:

  • 计算资源的配额

  • 存储资源的配额

  • 对象数量的配额

如果集群的总容量小于命名空间的配额总额,可能会产生资源竞争。这时会按照先到先得来处理。 资源竞争和配额的更新都不会影响已经创建好的资源。

1. 启动资源配额

Kubernetes 的众多发行版本默认开启了资源配额的支持。当在apiserver的--admission-control配置中添加ResourceQuota参数后,便启用了。 当一个命名空间中含有ResourceQuota对象时,资源配额将强制执行。

2. 计算资源配额

可以在给定的命名空间中限制可以请求的计算资源()的总量。

资源名称
描述

cpu

非终止态的所有pod, cpu请求总量不能超出此值。

limits.cpu

非终止态的所有pod, cpu限制总量不能超出此值。

limits.memory

非终止态的所有pod, 内存限制总量不能超出此值。

memory

非终止态的所有pod, 内存请求总量不能超出此值。

requests.cpu

非终止态的所有pod, cpu请求总量不能超出此值。

requests.memory

非终止态的所有pod, 内存请求总量不能超出此值。

3. 存储资源配额

资源名称
描述

requests.storage

所有PVC, 存储请求总量不能超出此值。

persistentvolumeclaims

.storageclass.storage.k8s.io/requests.storage

和该存储类关联的所有PVC, 存储请求总和不能超出此值。

.storageclass.storage.k8s.io/persistentvolumeclaims

4. 对象数量的配额

资源名称
描述

congfigmaps

命名空间中可以存在的配置映射的总数。

persistentvolumeclaims

命名空间中可以存在的PVC总数。

pods

命名空间中可以存在的非终止态的pod总数。如果一个pod的status.phase 是 Failed, Succeeded, 则该pod处于终止态。

replicationcontrollers

命名空间中可以存在的rc总数。

resourcequotas

services

命名空间中可以存在的服务总数量。

services.loadbalancers

命名空间中可以存在的服务的负载均衡的总数量。

services.nodeports

命名空间中可以存在的服务的主机接口的总数量。

secrets

命名空间中可以存在的secrets的总数量。

例如:可以定义pod的限额来避免某用户消耗过多的Pod IPs。

5. 限额的作用域

作用域
描述

Terminating

匹配 spec.activeDeadlineSeconds >= 0 的pod

NotTerminating

匹配 spec.activeDeadlineSeconds is nil 的pod

BestEffort

匹配具有最佳服务质量的pod

NotBestEffort

匹配具有非最佳服务质量的pod

6. request和limit

当分配计算资源时,每个容器可以为cpu或者内存指定一个请求值和一个限度值。可以配置限额值来限制它们中的任何一个值。 如果指定了requests.cpu 或者 requests.memory的限额值,那么就要求传入的每一个容器显式的指定这些资源的请求。如果指定了limits.cpu或者limits.memory,那么就要求传入的每一个容器显式的指定这些资源的限度。

7. 查看和设置配额

# 创建namespace
$ kubectl create namespace myspace

# 创建resourcequota
$ cat <<EOF > compute-resources.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    pods: "4"
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
EOF
$ kubectl create -f ./compute-resources.yaml --namespace=myspace

# 查询resourcequota
$ kubectl get quota --namespace=myspace
NAME                    AGE
compute-resources       30s

# 查询resourcequota的详细信息
$ kubectl describe quota compute-resources --namespace=myspace
Name:                  compute-resources
Namespace:             myspace
Resource               Used Hard
--------               ---- ----
limits.cpu             0    2
limits.memory          0    2Gi
pods                   0    4
requests.cpu           0    1
requests.memory        0    1Gi

8. 配额和集群容量

资源配额对象与集群容量无关,它们以绝对单位表示。即增加节点的资源并不会增加已经配置的namespace的资源。

参考文章:

  • https://kubernetes.io/docs/concepts/policy/resource-quotas/

可以在给定的命名空间中限制可以请求的存储资源()的总量。

命名空间中可以存在的PVC()总数。

和该存储类关联的所有PVC,命名空间中可以存在的PVC()总数。

命名空间中可以存在的资源配额()总数。

compute resources
storage resources
persistent volume claims
persistent volume claims
resource quotas