设置资源请求和限制
实验目标:
学习如何为 Pod 设置资源请求和限制,以优化集群资源分配。
实验步骤:
- 创建一个 Deployment,并设置 CPU 和内存的资源请求和限制。
- 使用 kubectl describe 命令查看资源分配情况。
- 观察资源限制对 Pod 行为的影响。
今天继续我们k8s未做完的实验:设置资源请求和限制
因为我们之前的容器都是未用yaml文件而是直接拉取镜像启动的,今天我们使用配置文件跑nginx,并设置资源请求和限制。
创建
1、创建namespace
kubectl create namespace nginx-test
2、编写yaml文件。
yaml要求:设置资源限制和请求,并指定镜像版本为1.18,
# /kubeapi/data/project4/nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test
namespace: nginx-test
spec:
replicas: 1 #设置1个副本运行
selector:
matchLabels:
app: nginx-test
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: nginx-test
image: nginx:1.18
resources:
requests: #容器所需的最少资源
memory: "4Mi" #请求4MiB内存
cpu: "2m" #请求250m CPU(0.0002个CPU核)
limits: #容器可以使用的最大资源
memory: "8Mi" #限制为8MiB内存
cpu: "4m" #限制为500m CPU(0.0004个CPU核)
ports:
- containerPort: 80 #容器端口映射,暴露80端口
pod启动并运行成功
3、验证
测试资源限制
由于nginx的性能过于强悍。目前又并未安装 Prometheus
监控,单纯采用脚本去模拟并发连接,对于设置的资源限制一直控制不好量。模拟并未有明显的结果。还在寻求其他办法。 后续有等装了监控后看效果图会更加明显一点
扩展
除了在容器创建时的yaml文件中指定资源限制,在namespace
中也可以这么做。这样的话每个运行在此namespace中的容器将自动限制资源使用
1、ResourceQuota
ResourceQuota
允许限制命名空间中可用的资源总量,如CPU、内存、存储以及Pod的数量等。通过设置ResourceQuota,可以确保一个命名空间不会超出分配的资源配额。
apiVersion: v1
kind: ResourceQuota
metadata:
name: qt-quota
namespace: qt-name
spec:
hard:
pods: "10"
requests.cpu: "2"
requests.memory: "2Gi"
limits.cpu: "4"
limits.memory: "4Gi"
2、LimitRange
LimitRange
允许为命名空间中的Pod和容器设置默认的资源请求和限制。可以确保新创建的Pod和容器具有合理的资源限制。
apiVersion: v1
kind: LimitRange
metadata:
name: qt-limits
namespace: qt-name
spec:
limits:
- default:
cpu: "500m"
memory: "256Mi"
defaultRequest:
cpu: "250m"
memory: "128Mi"
type: Container
3、示例
创建命名空间
kubectl create namespace qt-name
应用 ResourceQuota
kubectl apply -f resource-quota.yaml
应用 LimitRange
kubectl apply -f limit-range.yaml
创建实列验证
kubectl create deployment qt-nginx -n qt-name --image nginx:alpine --replicas=3
查看命名空间中的 ResourceQuota
和 LimitRange
配置
kubectl get resourcequota -n qt-name
这和我们上述限制的,资源要求是一致的
查看容器内的资源限制情况
上述实验可知通过设置 ResourceQuota
和 LimitRange
,可以有效地管理和控制命名空间中的资源使用情况,确保资源的合理分配和使用。