对k8s命名空间限制的方法有很多种,今天来演示一下很常用的一种
用的k8s对象就是ResourceQuota
一:创建命名空间
kubectl create ns test #namespace命名空间可以简写成ns
二: 对命名空间进行限制
创建resourcequota
vim resourcequota.yaml
apiVersion: v1
kind: ResourceQuota #定义配额资源 ResourceQuota
metadata:
name: quota-test
labels:
app: quota
namespace: test #指定想要限制那个命名空间
spec:
hard: #硬限制
pods: "3" #pod最多创建3个
count/deployments.apps: "1" #deploy资源最多创建1个
cpu: 5 #cpu 下限总和5核 对比 container.resource下面的request.memory
memory: 5Gi #内存 下限总和5Gi 对比 container.resource下面的request.memory
limits.cpu: 10 #cpu 上限10核 对比 container.resource下面的limit.cpu
limits.memory: 10Gi #内存 上限10Gi 对比 container.resource下面的limit.memory
kubectl apply -f resourcequota.yaml
查看一下命名空间的详细信息
kubectl describe ns test
这是显示的就是test这个名称空间下资源限制和使用情况
test
命名空间内最多只能有 1 个 Deployment。- CPU 使用总量不超过 5 个单位。
- 内存使用总量不超过 5GiB。
- Pod 的最大数量是 3 个。
三:创建deploy资源进行测试
vim test-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: test
name: quota-deploy
spec:
selector:
matchLabels:
app: test
replicas: 2 # 副本数设置为 2
template:
metadata:
labels:
app: test
spec:
containers:
- name: pod-quota
image: 192.168.8.99/web/nginx:1.20
imagePullPolicy: IfNotPresent
resources:
requests: # 资源请求,保证容器启动所需的最小资源量
cpu: 1 # 请求 1 个 CPU 核心
memory: 1Gi # 请求 1GiB 内存
limits: # 资源限制,限制容器可以使用的最大资源量
cpu: 2 # 限制使用不超过 2 个 CPU 核心
memory: 2Gi # 限制使用不超过 2GiB 内存
ports:
- containerPort: 80
kubectl apply -f test-deploy.yaml
kubectl get pod -n test
kubectl describe ns test
可以看到pod已经创建出来了,并且查看ns的详细信息显示资源限制pod已使用两个,因为我们的deploy的副本数是两个
cpu和memory都是对应我们yaml文件中指定的resources
---
现在将deploy副本数修改为5个看看会怎么样
kubectl edit deploy quota-deploy -n test
将副本数这里的2换成5 即可
再查看pod
可以看到明明我们写的副本数是5个他却只创建出来了3个
再查看ns的详细信息
可以看到我们定义的资源限制起作用了, 显示这个命名空间下的pod使用率已经满了
----------------
ResourceQuota
的好处和作用主要包括:
- 资源管理:限制命名空间内资源的使用量,防止资源过度消耗。
- 成本控制:避免不必要的资源浪费,降低运行成本。
- 稳定性保障:防止单个应用或用户占用过多资源,影响其他应用运行。
- 安全性增强:减少因资源滥用导致的系统不稳定或安全风险