【Kubernetes 系列】K8s 实战 容器和 Pods资源分配(2)

容器和 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



  1. 使用 kubectl top 命令来获取该 Pod 的度量值数据,我这里的输出显示 Pod 使用的是 974 milliCPU,即略低于 Pod 配置中指定的 1 个 CPU 的限制。

文末

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊

小编将自己6年以来的面试经验和学习笔记都整理成了一个**937页的PDF,**以及我学习进阶过程中看过的一些优质视频教程。

其实看到身边很多朋友抱怨自己的工资很低,包括笔者也是一样的,其原因是在面试过程中没有给面试官一个很好的答案。所以笔者会持续更新面试过程中遇到的问题,也希望大家和笔者一起进步,一起学习。

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

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

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

以来的面试经验和学习笔记都整理成了一个**937页的PDF,**以及我学习进阶过程中看过的一些优质视频教程。

[外链图片转存中…(img-ziVoOyZQ-1714536565602)]

其实看到身边很多朋友抱怨自己的工资很低,包括笔者也是一样的,其原因是在面试过程中没有给面试官一个很好的答案。所以笔者会持续更新面试过程中遇到的问题,也希望大家和笔者一起进步,一起学习。

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值