Kubernetes 12 (k8s 容器资源限制)

一、k8s容器资源限制

  • Kubernetes采用request和limit两种限制类型来对资源进行分配。
    request(资源需求):即运行Pod的节点必须满足运行Pod的最基本需求才能运行Pod。
    limit(资源限额):即运行Pod期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。
  • 资源类型:
    CPU 的单位是核心数,内存的单位是字节。
    一个容器申请0.5个CPU,就相当于申请1个CPU的一半,你也可以加个后缀m 表示千分之一的概念。比如说100m的CPU,100豪的CPU和0.1个CPU都是一样的。
  • 内存单位:
    K、M、G、T、P、E #通常是以1000为换算标准的。
    Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。

1.内存限制

为了实验效果,真机将stress的tar包传给server1
请添加图片描述
请添加图片描述
server1导入stress镜像,并上传至仓库
请添加图片描述
创建一个目录limit 用来存放编辑pod.yaml文件;
设置容器内存为200,但限制其可使用的内存资源为100M
请添加图片描述
应用资源清单,可以看到pod无法创建成功,这因为使用的内存超过了上限;
如果容器超过其内存限制,则会被终止请添加图片描述
查看日志
请添加图片描述
请添加图片描述
删除pod节点,修改上限内存为300M
请添加图片描述
再次执行清单,并查看pod节点信息,成功创建
请添加图片描述
查看日志
请添加图片描述
实验完成之后,将pod.yaml清除
在这里插入图片描述

2.cpu限制

首先将server2的cpu设置为2个核心
请添加图片描述
编辑pod1.yaml文件,将容器的cpu上限设为10,下限设为5,使用2个cpu
在这里插入图片描述
执行清单pod1.yaml,pod处于pending状态,因为cpu数量不在限定范围内,虚拟机也就两个cpu;
请添加图片描述
查看详细信息,cpu限制直接影响调度,调度失败;
调度失败是因为申请的CPU资源超出集群节点所能提供的资源,但CPU 使用率过高,不会被杀死
请添加图片描述
修改pod1.yaml文件,使其满足cpu要求
在这里插入图片描述
删除原来的cpu-demo,重新应用pod1.yaml文件,pod成功运行
在这里插入图片描述

3.为namespace设置资源限制

编辑limitrange.yaml文件,设定最大最小内存和cpu限制以及默认运行参数限制;
应用资源清单
请添加图片描述
查看详细信息;
LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用,改变 LimitRange 不会对之前创建的 Pod 造成影响。
请添加图片描述
接下来注释pod.yaml文件中定义的内存限制,使用limitrange.yaml文件中的默认限制
请添加图片描述
重新应用资源清单
请添加图片描述
查看pod详细信息
请添加图片描述
可以看到pod会使用limitrange.yaml默认的内存和cpu限制
请添加图片描述
编辑pod.yaml文件,重新打开自定义限制;
应用pod.yaml文件创建pod时报错,因为容器配置文件中设定的内存50Mi限制小于limitrange文件中规定的范围(最低为100Mi)
请添加图片描述

4.为namespace设置资源配额

  • 创建的ResourceQuota对象将在default名字空间中添加以下限制:
    每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
    所有容器的内存请求总额不得超过1 GiB;
    所有容器的内存限额总额不得超过2 GiB;
    所有容器的CPU请求总额不得超过1 CPU;
    所有容器的CPU限额总额不得超过2 CPU。

编辑limitrange.yaml配置文件
请添加图片描述
执行配额清单limitrange.yaml,查看资源配额
在这里插入图片描述
注意有了配额后,创建pod必须指定内存的上限和下限,cpu的上限和下限;
如果将内存限制注释,那么执行清单pod.yaml的时候会报错如下图:
请添加图片描述
重新编辑配置文件,指定内存和cpu的上下限;
应用配置,查看配额详细信息可以看到已使用的资源量
请添加图片描述
执行配额清单
请添加图片描述
将pod.yaml中的限制再次注释,改名为memory-demo-2
请添加图片描述
查看pod详细信息
请添加图片描述
查看其cpu和内存的限制
请添加图片描述
可以看到配额大小发生了变化
请添加图片描述
请添加图片描述
再次更改pod.yaml,打开限制,改名为memory-demo-3
请添加图片描述
此时pod创建失败,因为限额规定每个容器最大cpu使用量为1,而memory-demo-3的cpu限制为2
请添加图片描述
并查看配额,因为此时请求1个cpu,但是只剩了0.8个可以使用,因此无法为pod分配资源;
修改清单文件
请添加图片描述
执行清单,并查看配额;
可以看到,它的配额是在不断累加的,直至达到最大限制为之
请添加图片描述

5. 为Namespace 配置Pod配额

查看pod信息,有3个pod正在运行
请添加图片描述
ResourceQuota也可以限制namespace中运行的Pod数,超出设定则无法建立;
编辑limitrange.yaml,将ns中的pod数量配额限制为3
请添加图片描述
请添加图片描述
执行清单limitrange.yaml,查看配额信息
请添加图片描述
实验完毕之后,删除pod节点和配额
请添加图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一种流行的容器化技术,可以将应用程序及其依赖项打包为容器,并在不同的环境中运行。而Kubernetes(简称K8s)则是一种开源的容器编排平台,可以帮助我们管理和调度大规模的容器化应用程序。 在微服务架构中,通常会将应用程序拆分为多个较小的服务,每个服务都可以独立构建、测试和部署。而使用DockerKubernetes可以更加方便地管理这些微服务。 首先,我们可以使用Docker将每个微服务打包为一个独立的容器镜像,包括应用程序以及其依赖项和配置文件。这样,我们就可以在不同的环境中的快速部署和复制这些容器化的服务。 然后,通过使用Kubernetes,我们可以将这些容器化的微服务部署到集群中。Kubernetes提供了强大的容器编排功能,可以根据应用程序的需要自动调度和管理这些容器。它可以根据服务的负载情况自动进行扩缩容,并确保服务的高可用性和稳定性。 此外,Kubernetes还提供了服务发现、负载均衡、自动伸缩等高级功能,可以帮助我们更好地管理和监控微服务的运行状态。它还支持容器的滚动更新,可以实现无需停机的应用程序版本更新。 总之,使用DockerKubernetes进行微服务的容器化实践,可以极大地简化应用程序的部署和管理工作,提高开发和运维效率,同时也能够提供更好的可扩展性和可靠性。这也是为什么DockerKubernetes在现代云原生应用开发中如此受欢迎的原因。 ### 回答2: DockerKubernetes是当前非常热门的技术,它们能够有效地解决微服务容器化的问题,让开发者能够更加高效地管理和部署应用程序。 首先,Docker是一种轻量级的容器化技术,它将应用程序和其所有的依赖打包进一个称为Docker镜像的可执行文件中。这样,开发者可以将这个镜像部署到任何支持Docker的环境中,而不用担心与其他应用程序的依赖冲突。由于Docker的镜像是轻量级的,所以可以迅速地启动和停止应用程序,方便对应用程序进行测试和部署。 接着,Kubernetes是一个开源的容器编排平台,它能够自动化地在集群中部署、扩展和管理容器化的应用程序。Kubernetes通过对容器进行分组和调度,可以确保应用程序的高可用性和横向扩展性。在Kubernetes中,开发者可以定义和管理应用程序的部署、服务发现、负载均衡、自动伸缩等方面的设置,而不用手动进行繁琐的配置。此外,Kubernetes还具备监控和日志收集等功能,方便开发者进行故障排查和性能优化。 在微服务架构中,采用DockerKubernetes进行容器化实践能够带来很多好处。首先,容器化的应用程序能够更加灵活地部署和管理,不受底层技术栈的限制。其次,通过Kubernetes的调度和扩缩容机制,可以实现应用程序的高可用性和弹性伸缩。此外,由于Docker镜像和Kubernetes配置的可移植性,开发者可以方便地在不同的环境中进行应用程序的部署和迁移。 综上所述,DockerKubernetes的微服务容器化实践能够极大地提高应用程序的部署效率和可维护性,是现代化软件开发中不可或缺的重要技术。 ### 回答3: DockerKubernetes是当前非常热门的技术,用于实现微服务的容器化和集群管理。以下是对于DockerKubernetes在微服务容器化实践方面的一些解释和应用。 Docker是一种开源的容器技术,可用于将应用程序及其依赖项打包成一个独立的、可执行的容器容器化可以提供一种更加轻量级和可移植的方式来部署和运行应用程序。Docker的特点是快速、可移植、隔离和可拆分。 而Kubernetes是一个用于容器编排和集群管理的开源平台。它可以自动化部署、扩展和操作容器化的应用程序。Kubernetes通过对容器进行分组和管理,使得微服务的部署和运维更加简单和高效。 在微服务容器化实践中,首先需要将应用程序及其依赖项打包成一个Docker镜像。然后,可以使用Kubernetes来创建一个包含多个容器的集群,每个容器都运行一个微服务。Kubernetes可以自动管理容器的启动和停止、容器之间的网络通信、负载均衡和容器的扩缩容等。 在CSND上可以找到许多与DockerKubernetes相关的教程和实践案例。这些内容可以帮助开发者了解如何使用DockerKubernetes容器化和部署自己的微服务应用。同时,还可以学习如何使用Kubernetes的一些高级特性,如自动伸缩、滚动升级和故障恢复等。 总结来说,DockerKubernetes是用于实现微服务容器化和集群管理的重要工具。它们可以帮助开发者简化应用程序的部署和运维工作,提升开发效率和系统的弹性。在CSND上有大量的资源可供参考,帮助开发者更好地理解和应用这些技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值