最后

考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档

喜欢的朋友可以关注、转发、点赞 感谢!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


容器和 Pods资源分配

  • 目标

  • 一、启动服务

  • 二、创建命名空间

    • 2.1、查看名字空间

    • 2.2、创建名字空间

    • 2.3、删除名字空间

  • 三、指定 CPU 请求和 CPU 限制

    • 3.1、CPU 单位

    • 3.2、设置超过节点能力的 CPU 请求

      • 3.2.1、创建 Pod

      • 3.2.2、Pod 的状态

      • 3.2.3、Pod 详情

      • 3.2.4、删除 Pod

  • 四、不限制CPU

  • 总结


目标

================================================================

本篇文章我们将学习,如何为容器设置 CPU request(请求) 和 CPU limit(限制)。 容器使用的 CPU 不能超过所配置的限制。 如果系统有空闲的 CPU 时间,则可以保证给容器分配其所请求数量的 CPU 资源。


一、启动服务

====================================================================

在前面的章节中,有讲解过 metrics-server 服务,在这里,我们再次运行以下命令,启动metrics-server :


minikube addons enable metrics-server



查看 metrics-server 资源API 是否可用,运行下面命令,则会输出将包含一个对 metrics.k8s.io 的引用。


$ kubectl get apiservices



NAME

v1beta1.metrics.k8s.io



二、创建命名空间

======================================================================

在进行资源分配之前,我们需要先创建一个命名空间,才能给这个空间分配资源。接下来我们先学习一下创建资源与集群的其余部分资源隔离。

在 Kubernetes 中,“名字空间(Namespace)”提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求。 名字空间作用域仅针对带有名字空间的对象,例如 Deployment、Service 等, 这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等。

2.1、查看名字空间


初始状态下,Kubernetes 具有三个名字空间:

  • default 无名字空间对象的默认名字空间

  • kube-system 由 Kubernetes 系统创建的对象的名字空间

  • kube-public 自动创建且被所有用户可读的名字空间(包括未经身份认证的)。此名字空间通常在某些资源在整个集群中可见且可公开读取时被集群使用。此名字空间的公共方面只是一个约定,而不是一个必要条件。

我们可以通过使用 kubectl 的命令,来查看现有的命名空间:


$ kubectl get namespaces



NAME          STATUS    AGE

default       Active    11d

kube-system   Active    11d

kube-public   Active    11d



如果想要查看某一个命名空间的详情,也可以使用 kubectl describe namespaces 命令来查看:


$ kubectl describe namespaces <name>



Name:           default

Labels:         <none>

Annotations:    <none>

Status:         Active



No resource quota.



Resource Limits

 Type       Resource    Min Max Default

 ----               --------    --- --- ---

 Container          cpu         -   -   100m



请注意,这些详情同时显示了资源配额(如果存在)以及资源限制区间。

资源配额跟踪并聚合 Namespace 中资源的使用情况,并允许集群运营者定义 Namespace 可能消耗的 Hard 资源使用限制。

限制区间定义了单个实体在一个 Namespace 中可使用的最小/最大资源量约束。

名字空间可以处于下列两个阶段中的一个:

  • Active 名字空间正在被使用中

  • Terminating 名字空间正在被删除,且不能被用于新对象。

2.2、创建名字空间


上面将的命名空间,都是当前集群自带的三个命名空间,那么我们能不能自己创建命名空间呢?答案是,肯定的,下面我们来学习两种创建方式。

  1. 新建一个名为 my-namespace.yaml 的 YAML 文件,并写入下列内容:

apiVersion: v1

kind: Namespace

metadata:

  name: <insert-namespace-name-here>



然后运行命令:


 kubectl create -f ./my-namespace.yaml



  1. 或者,你可以使用下面的命令创建名字空间:

kubectl create namespace <insert-namespace-name-here>



2.3、删除名字空间


可选字段 finalizers 允许观察者们在名字空间被删除时清除资源。 记住如果指定了一个不存在的终结器,名字空间仍会被创建, 但如果用户试图删除它,它将陷入 Terminating 状态。下面是删除命名空间的命令:


$ kubectl delete namespaces <insert-some-namespace-name>



此命令会删除当前命名空间下面的所有内容,删除是异步的,所以有一段时间你会看到名字空间处于 Terminating 状态。

三、指定 CPU 请求和 CPU 限制

=================================================================================

要为容器指定 CPU 请求,请在容器资源清单中包含 resources: requests 字段。 要指定 CPU 限制,请包含 resources:limits

在本练习中,你将创建一个具有一个容器的 Pod。容器将会请求 0.5 个 CPU,而且最多限制使用 1 个 CPU。 pods/resource/cpu-request-limit.yaml 是 Pod 的配置文件:


apiVersion: v1

kind: Pod

metadata:

  name: cpu-demo

  namespace: cpu-example

spec:

  containers:

  - name: cpu-demo-ctr

    image: vish/stress

    resources:

      limits:

        cpu: "1"

      requests:

        cpu: "0.5"

    args:

    - -cpus

    - "2"



配置文件的 args 部分提供了容器启动时的参数。 -cpus “2” 参数告诉容器尝试使用 2 个 CPU。

  1. 创建 Pod:

$ kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit.yaml --namespace=cpu-example





  1. 验证所创建的 Pod 处于 Running 状态

$ kubectl get pod cpu-demo --namespace=cpu-example



  1. 查看显示关于 Pod 的详细信息:

$ kubectl get pod cpu-demo --output=yaml --namespace=cpu-example





  1. 输出显示 Pod 中的一个容器的 CPU 请求为 500 milli CPU,并且 CPU 限制为 1 个 CPU。

resources:

  limits:

    cpu: "1"

  requests:

    cpu: 500m



最后

感谢您的阅读,在文末给大家准备一个福利。本人从事Android开发已经有十余年,算是一名资深的移动开发架构师了吧。根据我的观察发现,对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

所以在此将我十年载,从萌新小白一步步成长为Android移动开发架构师的学习笔记,从Android四大组件到手写实现一个架构设计,我都有一一的对应笔记为你讲解。

当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

最后,赠与大家一句诗,共勉!

不驰于空想,不骛于虚声。不忘初心,方得始终。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

[外链图片转存中…(img-uJdoNJWK-1715626077259)]

最后,赠与大家一句诗,共勉!

不驰于空想,不骛于虚声。不忘初心,方得始终。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐