欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

kubernetes 命名空间和资源配额

最编程 2024-04-06 21:27:30
...

名称空间

  • 一.名称空间概念
  • 二.Namespace使用场景
  • 三.名称空间基本操作
    • 1.创建Namespace两种方式
    • 2.Namespace资源限额

一.名称空间概念

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间

命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间,例如,可以为test、devlopment、production环境分别创建各自的命名空间。

二.Namespace使用场景

命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。

三.名称空间基本操作

1.创建Namespace两种方式

第一种:通过命令行的方式创建

kubectl create ns test

第二种:通过YAML资源清单创建名称空间

vim namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: test

通过apply创建

kubectl apply -f namespace.yaml

查看名称空间

kubectl get ns
kubectl get ns test

在这里插入图片描述

2.Namespace资源限额

可以通过Resource Quota来限制Namespace中资源的使用,资源配额是一种控制机制,可以限制Namespace中资源使用量,包括CPU、内存、存储等。

资源限制可以针对Namespace中所有Pod进行限制,当然也可以针对单个Pod进行限制

vim resourcequota.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: test
---
apiVersion: v1
kind: ResourceQuota
metadata:
  name: test-quota
  namespace: test
spec:
  hard:
    requests.cpu: 1
    requests.memory: 1Gi
    limits.cpu: 2
    limits.memory: 2Gi

执行apply文件

kubectl apply -f resourcequota.yaml

查看Resourcequota信息

kubectl get resourcequota -n test

在这里插入图片描述
配额机制所支持的资源类型:

资源名称 描述
limits.cpu 所有非终止状态的 Pod,其 CPU 限额总量不能超过该值。
limits.memory 所有非终止状态的 Pod,其内存限额总量不能超过该值。
requests.cpu 所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。
requests.memory 所有非终止状态的 Pod,其内存需求总量不能超过该值。
hugepages-<size> 对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值。
cpu requests.cpu 相同。
memory requests.memory 相同。
  • Requests(请求) 是容器在启动时向 Kubernetes 集群申请的资源(一开始)。它表明容器希望得到的最小资源量。如果容器实际使用的资源低于请求的量,Kubernetes 会为容器分配足够的资源。但是,如果容器实际使用的资源高于请求的量,Kubernetes 可能对容器进行 throttling,限制其使用的资源。
  • Limits(限制) 是容器被允许使用的资源的上限(运行中)。它表明容器在运行时可以使用的资源的最大量。如果容器实际使用的资源超过了限制,Kubernetes 集群中的 QoS 机制可能会介入,可能导致容器被终止或限制其资源使用。

所以:请求是在容器启动时申请的资源量,而限制是在容器运行时允许使用的最大资源量

测试:创建一个Pod并限制资源使用如下:
注意:如果Namespace进行了资源配额了,那么在创建Pod时必须使用resources进行限制

vim pod.yaml 

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: nginx
  name: web-nginx
  namespace: test
spec:
  containers:
  - name: web-nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80 
    resources:
      limits:
        memory: "1Gi"
        cpu: "1"
      requests:
        memory: "1000Mi"
        cpu: "500m"

查看resourcequota资源限制情况:

kubectl get resourcequota -n test

在这里插入图片描述
修改Pod,超过Namespace的资源配额,查看结果

vim pod1.yaml 

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    app: nginx
  name: web-nginx1
  namespace: test
spec:
  containers:
  - name: web-nginx
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80 
    resources:
      limits:
        memory: "2Gi"
        cpu: "2"
      requests:
        memory: "2Gi"
        cpu: "2"

超过资源配额,不允许创建Pod
在这里插入图片描述