集群信息:
- Kubernetes 版本:1.12.8-gke.10
- 正在使用的云:GKE
- 安装方式:
gcloud
- 主机操作系统:(计算机类型(n1-标准-1
- CNI 和版本:默认
- CRI 和版本:默认
在节点扩展期间,HPA 无法获取 CPU 指标。
同时,kubectl top pod
和kubectl top node
输出为:Error from server (ServiceUnavailable): the server is currently unable to handle the request (get pods.metrics.k8s.io)
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
有关更多详细信息,我将向您展示我的问题发生的流程:
- 突然间,许多请求到达了 GKE 服务器。(使用测试工具(
- HPA 检测到当前 CPU 使用率高于目标 CPU 使用率 (50%(,因此尝试向上扩展 pod 增量。
- 创建 Pod 时出现
Insufficient CPU
警告,因此 GKE 尝试节点扩展 增量。 - 很快,HPA就无法获得指标,
kubectl top node
或kubectl top pod
没有得到回应。 - 此时找到一个或多个OutOfcpu
pod,并且多个 pod 处于ContainerCreating
状态(从Pending
状态(。 - 节点纵向扩展完成并经过一段时间(大约几分钟(后, HPA 开始成功获取 CPU 指标,并尝试根据 度量。
- 当节点缩减时也会发生相同的情况。
这会导致 Pod 缩放停止,并在响应客户端请求时引发一些失败。这正常吗?
我认为即使在节点扩展期间,HPA 也应该在正在运行的 Pod 上获取 CPU 指标(或其他指标(,以跟踪当前的最佳 Pod 大小。因此,当节点扩展完成后,HPA 会立即(而不是增量(创建必要的 Pod。
我可以让我的集群像这样工作吗?
也许您的节点耗尽了一个内存或 CPU 资源,有一些配置图描述了如何根据集群大小扩展插件。您需要在kube-system命名空间中编辑指标-服务器-配置配置映射:
kubectl edit cm/metrics-server-config -n kube-system
你应该添加
baseCPU
cpuPerNode
baseMemory
memoryPerNode
到保姆配置,在这里你可以找到大量的手册:
堆也遇到了同样的 OOM 问题:太多的 pod 无法处理分配资源中的所有指标,请相应地修改堆的配置映射:
kubectl edit cm/heapster-config -n kube-system