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
下一篇: kubernetes 命名空间和资源配额
推荐阅读