Kubernetes中Pod资源管理与自动伸缩
立即解锁
发布时间: 2025-08-21 00:51:35 阅读量: 4 订阅数: 11 


Kubernetes实战:从入门到精通
### Kubernetes 中 Pod 资源管理与自动伸缩
#### 1. 命名空间资源配额限制
在 Kubernetes 中,可以对命名空间内的总资源进行限制。之前创建的配额适用于所有 Pod,而现在可以将配额限制在特定的范围。目前有四种范围:BestEffort、NotBestEffort、Terminating 和 NotTerminating。
- **BestEffort 和 NotBestEffort**:BestEffort 范围的配额适用于具有 BestEffort QoS 类别的 Pod,而 NotBestEffort 则适用于 Burstable 和 Guaranteed 类别的 Pod。
- **Terminating 和 NotTerminating**:这两个范围与 Pod 是否处于关闭过程无关。可以通过设置 `activeDeadlineSeconds` 字段来指定 Pod 允许运行的最长时间,超过该时间 Pod 将被标记为 Failed 并终止。Terminating 范围适用于设置了 `activeDeadlineSeconds` 的 Pod,NotTerminating 则适用于未设置的 Pod。
创建 `ResourceQuota` 时,可以指定其适用的范围。Pod 必须匹配所有指定的范围,配额才会对其生效。不同范围的配额可限制的内容也不同,BestEffort 范围只能限制 Pod 的数量,而其他三个范围可以限制 Pod 数量、CPU/内存请求和 CPU/内存限制。
例如,要将配额仅应用于 BestEffort、NotTerminating 的 Pod,可以创建以下 `ResourceQuota` 对象:
```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: besteffort-notterminating-pods
spec:
scopes:
- BestEffort
- NotTerminating
hard:
pods: 4
```
此配额确保最多有四个具有 BestEffort QoS 类别且没有活动截止时间的 Pod 存在。如果配额针对的是 NotBestEffort Pod,则还可以指定 `requests.cpu`、`requests.memory`、`limits.cpu` 和 `limits.memory`。
#### 2. 监控 Pod 资源使用情况
正确设置资源请求和限制对于充分利用 Kubernetes 集群至关重要。如果请求设置过高,集群节点将未充分利用,造成资源浪费;如果设置过低,应用程序可能会出现 CPU 饥饿甚至被 OOM Killer 杀死。可以通过监控容器在预期负载水平下的实际资源使用情况来找到合适的请求和限制值。应用程序公开后,应持续监控并根据需要调整资源请求和限制。
##### 2.1 收集和检索实际资源使用情况
Kubernetes 中的 Kubelet 包含一个名为 cAdvisor 的代理,用于收集节点上单个容器和整个节点的资源消耗数据。要集中收集整个集群的统计信息,需要运行一个名为 Heapster 的附加组件。
- **Heapster 工作原理**:Heapster 作为一个 Pod 在其中一个节点上运行,并通过常规的 Kubernetes Service 暴露,可通过稳定的 IP 地址访问。它从集群中的所有 cAdvisor 收集数据,并将其集中展示。
- **启用 Heapster**:
- 在 Google Kubernetes Engine 中,Heapster 默认启用。
- 在 Minikube 中,可以使用以下命令启用:
```bash
$ minikube addons enable heapster
heapster was successfully enabled
```
- 对于其他类型的 Kubernetes 集群,可以参考 [https://github.com/kubernetes/heapster](https://github.com/kubernetes/heapster) 中的说明手动运行 Heapster。启用 Heapster 后,需要等待几分钟让它收集指标,才能查看集群的资源使用统计信息。
- **显示集群节点的 CPU 和内存使用情况**:运行 Heapster 后,可以使用 `kubectl top` 命令获取节点和单个 Pod 的资源使用情况。例如,查看节点的 CPU 和内存使用情况:
```bash
$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
minikube 170m 8% 556Mi 27%
```
此命令显示了节点上所有 Pod 的实际当前 CPU 和内存使用情况,与 `kubectl describe node` 命令显示的 CPU 和内存请求及限制不同。
- **显示单个 Pod 的 CPU 和内存使用情况**:使用 `kubectl top pod` 命令查看单个 Pod 的资源使用情况:
```bash
$ kubectl top pod --all-namespaces
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system influxdb-grafana-2r2w9 1m 32Mi
kube-system heapster-40j6d 0m 18Mi
default kubia-3773182134-63bmb 0m 9Mi
kube-system kube-dns-v20-z0hq6 1m 11Mi
kube-sys
```
0
0
复制全文
相关推荐










