暂挂状态Pod,但启用了自动缩放功能,为什么不起作用?

时间:2019-09-16 10:54:50

标签: kubernetes google-kubernetes-engine autoscaling

您以前是否发现过这种行为?

我有一个包含5个节点的GKE集群,并且启用了自动缩放功能,如下所示

    autoscaling:
  enabled: true
  maxNodeCount: 9
  minNodeCount: 1
config:
  diskSizeGb: 100
  diskType: pd-standard
  imageType: COS
  machineType: n1-standard-1
  oauthScopes:
  - https://www.googleapis.com/auth/devstorage.read_only
  - https://www.googleapis.com/auth/logging.write
  - https://www.googleapis.com/auth/monitoring
  - https://www.googleapis.com/auth/servicecontrol
  - https://www.googleapis.com/auth/service.management.readonly
  - https://www.googleapis.com/auth/trace.append
  serviceAccount: default
initialNodeCount: 1
instanceGroupUrls:
- xxx
management:
  autoRepair: true
  autoUpgrade: true
name: default-pool
podIpv4CidrSize: 24
selfLink: xxxx
status: RUNNING
version: 1.13.7-gke.8

但是,当我尝试部署一项服务时,会收到此错误

 Warning  FailedScheduling   106s                default-scheduler   0/5 nodes are available: 3 Insufficient cpu, 4 node(s) didn't match node selector.
  Warning  FailedScheduling   30s (x3 over 106s)  default-scheduler   0/5 nodes are available: 4 node(s) didn't match node selector, 5 Insufficient cpu.
  Normal   NotTriggerScaleUp  0s (x11 over 104s)  cluster-autoscaler  pod didn't trigger scale-up (it wouldn't fit if a new node is added): 1 node(s) didn't match node selector

如果我看到自己的资源统计信息,就看不到CPU问题,对吗?

kubectl top node
NAME                                                 CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
gke-pre-cluster-1-default-pool-17d2178b-4g9f   106m         11%    1871Mi          70%       
gke-pre-cluster-1-default-pool-17d2178b-g8l1   209m         22%    3042Mi          115%      
gke-pre-cluster-1-default-pool-17d2178b-grvg   167m         17%    2661Mi          100%      
gke-pre-cluster-1-default-pool-17d2178b-l9gt   122m         12%    2564Mi          97%       
gke-pre-cluster-1-default-pool-17d2178b-ppfw   159m         16%    2830Mi          107%   

所以...如果问题似乎不是CPU出现此消息?

另一件事是...为什么资源出现问题时无法自动扩展?

请任何人找到这个之前可以解释我?我不明白。

非常感谢您

2 个答案:

答案 0 :(得分:0)

GKE 的自动扩缩功能基于 Compute Engine instance groups。因此,它只关注实际的动态资源使用情况(CPU、内存等),而不关注 Kubernetes pod 模板中的 requests 部分。

如果在这些 Pod 中运行的软件实际上并未使用这些资源,则自动缩放器会将其 100% 的资源分配(因此无法调度更多 Pod)的 GKE 节点视为空闲。如果在这些 Pod 中运行的软件正在等待“待处理”Pod 启动,那么您的工作负载就会陷入僵局。

不幸的是,我知道没有解决此问题的方法。如果您控制用于启动 pod 的 pod 模板,您可以尝试要求比作业实际需要更少的内存/CPU。但这可能会导致 Pod 被驱逐。

GKE 的自动扩缩器并不是特别智能。

答案 1 :(得分:-1)

您能检查一下StackDriver日志中是否有此项“ ZONE_RESOURCE_POOL_EXHAUSTED ”吗?

您与kubernetes集群一起使用的区域可能存在问题。

致谢。