本文基于kubernetes 1.5.2版本编写
概念
默认情况下,kubernetes不会限制pod等资源对象使用系统资源,单个pod或者容器可以无限制使用系统资源。
kubernetes的资源管理分为资源请求(request)和资源限制(limit),资源请求能够保证Pod有足够的资源来运行,而资源限制则是防止某个Pod无限制地使用资源,导致其他Pod崩溃。kubernetes1.5之前的版本只支持CPU和内存这两种资源类型。
三种方式
kubernetes的资源管理有3种方式,分别是单个资源对象的资源管理(以下简称resource)、limitranges、resourcequotas。resource和limitranges可以单独使用,也可以同时使用,而resourcequotas必须配合resource或者limitranges使用。limitranges和resourcequotas是针对于namespace的。
单个资源对象的资源管理
resource是针对资源对象中单个容器进行资源管理,在创建/变更资源对象时指定的。
详情请见http://blog.csdn.net/liyingke112/article/details/76155428
limitranges
LimitRange(简称limits)基于namespace的资源管理,包括pod和container的最小、最大和default、defaultrequests等。一旦创建limits,以后创建资源时,K8S将该limits资源限制条件默认&强制给pod,创建后发现不符合规则,将暂停创建pod。
详情请见http://blog.csdn.net/liyingke112/article/details/77198045
resourcequotas
Resource Quotas(资源配额,简称quota)是为了namespace进行资源配额,限制资源使用的一种策略。对于资源管理来说,quota是管理该namespace下所有资源对象的CPU、内存的limits和request的总量,如果超过该限制,资源对象无法创建。
详情请见http://blog.csdn.net/liyingke112/article/details/77369427
配置规则
1、每个namespace有且只有一个limits和quota
2、limits的同种类型(CPU或者memory)配置规则:
每容器(type: container):max>=default>=defaultRequest>min
每pod(type: pod):max>=min
pod和容器对应关系:容器max*容器数<=pod max;容器min*容器数<=pod min
3、在同一个namespace下,limits和单个资源对象的资源管理(resource)同时使用,同种类型(CPU或者memory)配置规则:resource的单个资源配置范围不能超过limit的容器范围,总和不能超过limit的pod范围。
具体如下:
resource的request的总和(如有多个容器,所有的)>= limits的容器的defaultrequets*容器数 >= limits的pod的min
resource的limit的总和(如有多个容器,所有的)<= limits的容器的requets*容器数 <= limits的pod的max
配置正确,kubernetes将按照resource进行资源管理,如果配置错误,无法创建对象。
4、quota需要配合limits或者resource,如果没有配置limits时,每次创建对象时,必须配置resource,否则无法创建对象
5、该namespace下,所有pod/容器的CPU或者memory的limit、request的任意一种总量大于quota相对应的值后,无法分配更多的系统资源,无法创建新的资源对象,无法扩容RC、RS等。
使用心得
1、资源管理对象单一性
尽量使用limits针对容器(更好)或者pod的资源管理,尽量不同时针对容器和pod,在一pod多容器情况下,即使有充足系统资源,创建资源对象失败几率高。
在limits使用的namespace下,最好不要在创建资源时使用resource。
2、资源管理类型单一性
使用资源限制(limit或者max)或者资源请求(request或者min)
同时使用时,最好保持“1、资源管理对象单一性”
3、服务部署单一性
由于limits会针对该namespace下的所有pod或者容器,所以在该namespace下尽量部署资源需求相同的服务
4、合理配置
分享到:
相关推荐
3. **kube-scheduler**:调度器根据资源需求、策略和其他因素将未调度的Pod(Kubernetes的基本运行单元)分配到合适的节点上。 4. **kube-controller-manager**:控制器管理器是一个包含了多个“控制器”的进程,如...
至此,你的CentOS节点已经成功加入了Kubernetes集群,可以运行Pods和其他Kubernetes资源了。 总结,"kubernetes-node-linux-amd64.tar.gz"是Kubernetes为Linux AMD64架构准备的节点安装包,通过下载、解压、配置和...
Kubernetes(简称k8s)是Google开源的一款容器编排系统,它为容器化的应用提供了自动化部署、扩展和管理的解决方案。本篇文章将聚焦于“kubernetes-server-linux-amd64.tar”这一文件,深入解析其在Linux平台上的...
Kubernetes客户端Linux AMD64资源包,`kubernetes-client-linux-amd64.tar.gz`,是专为基于Linux的AMD64(也称为x86_64)架构设计的Kubernetes命令行接口(CLI)工具集。这个压缩包包含了一系列用于与Kubernetes集群...
Kubernetes是由Google开源的容器管理系统,它能够自动化容器的部署、扩展和管理,提供了一套强大的集群管理框架。Kubernetes支持多种容器运行时,如Docker,rkt等,旨在让应用部署在云环境或者数据中心变得更加简单...
Kubernetes,通常缩写为k8s,是一种流行的开源容器编排系统,用于自动化容器化应用程序的部署、扩展和管理。这个“kubernetes-server-linux-amd64-v1.15.4.tar.gz”文件是针对Linux 64位系统的Kubernetes服务器端...
Kubernetes Dashboard 是 Kubernetes 集群的一个重要组件,它提供了一个图形化的用户界面,使得集群管理员和开发者能够方便地管理和监控 Kubernetes 集群中的各种资源。`kubernetes-dashboard-v1.8.3` 是 Dashboard ...
Kubernetes(简称k8s)是Google开源的一款容器编排系统,它能够自动化容器化应用的部署、扩展和管理,为微服务架构提供了强大的支持。在本文中,我们将深入探讨Kubernetes v1.16.2版本,这是一个稳定且广泛使用的...
Kubernetes是当今最流行的容器编排系统,用于管理分布式应用程序的部署、扩展和运行。这个压缩包文件"**kubernetes-node-linux-amd64.tar.gz**"是Kubernetes针对Linux平台,AMD64(也称为x86_64)架构的节点(Node)...
Kubernetes客户端是用于与Kubernetes集群交互的工具,它允许用户执行各种操作,如部署应用、管理资源、查看集群状态等。"kubernetes-client-darwin-amd64.tar.gz" 是一个针对苹果 macOS 操作系统(Darwin)的AMD64...
Kubernetes Dashboard 是一个基于 Web 的图形用户界面(GUI),用于管理和监控 Kubernetes 集群。它提供了对集群资源的直观视图,包括节点、Pods、服务、部署、 ReplicaSets 和 DaemonSets,使得集群操作和故障排查...
- 支持API资源的版本管理和升级,确保与不同版本的Kubernetes集群兼容。 - 提供了丰富的命令行选项,使用户能够灵活定制操作行为。 - 引入了对动态配置的支持,使得客户端可以实时获取集群配置信息,无需频繁手动...
Kubernetes客户端是Kubernetes生态系统的重要组成部分,它允许用户与Kubernetes集群进行交互,执行各种管理和操作任务。`kubernetes-client-darwin-amd64.tar.gz-v1.14.1`是一个针对苹果 macOS 操作系统(Darwin)的...
在这个场景中,我们关注的是一个名为“kubernetes-3.0.0a1-py2.py3-none-any.whl”的文件,这是在PyPI官网上发布的资源,用于与Kubernetes相关的Python编程。 **Kubernetes**,又称为K8s,是一个开源的容器编排系统...
Kubernetes,简称K8s,是Google开源的一种容器编排系统,用于自动化容器化的应用程序部署、扩展和管理。这个“K8S安装包之kubernetes-client-linux-amd64”是针对Linux AMD64架构的Kubernetes客户端工具,它使得用户...
Kubernetes客户端是用于管理和操作Kubernetes集群的重要工具,尤其在Linux环境下,`kubernetes-client-linux-amd64.zip` 提供了适用于AMD64架构的命令行接口(CLI),即kubectl,使得开发者和管理员能够轻松地从终端...