You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在EKS集群中安装Apache Superset遇部署超时及Pod调度问题

问题:EKS集群安装Superset超时失败,Pod调度异常

我已经创建并配置了带ALB的EKS集群,按照Superset官方文档步骤安装Superset,使用的my-values.yaml配置如下:

ingress:
  enabled: true
  ingressClassName: ~
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: instance
    # kubernetes.io/tls-acme: "true"
    ## Extend timeout to allow long running queries.
    # nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    # nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    # nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  path: /
  pathType: ImplementationSpecific
  hosts:
    - chart-example.local
  tls: []
  extraHostsRaw: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

执行安装命令:

helm upgrade --install --values my-values.yaml superset superset/superset --timeout 10m30s

耗时很久后返回错误:

Error: UPGRADE FAILED: post-upgrade hooks failed: 1 error occurred:
    * timed out waiting for the condition

查看Pod状态:

[ec2-user@ip-1**-**-**-*** ~]$ kubectl get pods
NAME                               READY   STATUS       RESTARTS        AGE
superset-7866fcc8b4-tcpk4          0/1     Init:0/1     8 (6m53s ago)   33m
superset-init-db-6q9dp             0/1     Init:Error   0               5m24s
superset-init-db-7hqz4             0/1     Init:Error   0               7m48s
superset-init-db-jt87x             0/1     Init:Error   0               12m
superset-init-db-rt85r             0/1     Init:Error   0               10m
superset-init-db-zptz6             0/1     Init:Error   0               2m40s
superset-postgresql-0              0/1     Pending      0               33m
superset-redis-master-0            1/1     Running      0               33m
superset-worker-748db75bf7-9kzfp   0/1     Init:0/1     8 (6m56s ago)   33m

补充说明

添加EBS CSI驱动和存储类后重新安装,Pod状态如下:

kubectl get pods
    NAME                               READY   STATUS     RESTARTS       AGE
    superset-7866fcc8b4-q59nd          0/1     Init:0/1   4 (109s ago)   13m
    superset-init-db-gq9b9             0/1     Pending    0              13m
    superset-postgresql-0              0/1     Pending    0              13m
    superset-redis-master-0            1/1     Running    0              13m
    superset-worker-748db75bf7-n7t2r   0/1     Init:0/1   5 (91s ago)    13m

查看相关Pod日志:

[ec2-user@ip-172-31-23-209 ~]$ kubectl logs superset-worker-748db75bf7-n7t2r
Defaulted container "superset" out of: superset, wait-for-postgres-redis (init)
Error from server (BadRequest): container "superset" in pod "superset-worker-748db75bf7-n7t2r" is waiting to start: PodInitializing

[ec2-user@ip-172-31-23-209 ~]$ kubectl logs superset-7866fcc8b4-q59nd
Defaulted container "superset" out of: superset, wait-for-postgres (init)
Error from server (BadRequest): container "superset" in pod "superset-7866fcc8b4-q59nd" is waiting to start: PodInitializing

描述superset-postgresql-0Pod的事件:

kubectl describe pod superset-postgresql-0
Events:
  Type     Reason            Age                  From               Message
  ----     ------            ----                 ----               -------
  Warning  FailedScheduling  4m20s (x4 over 16m)  default-scheduler  0/1 nodes are available: 1 Too many pods. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod.

我是Kubernetes新手,完全不知道该怎么解决,求帮助!


解决方案

1. 核心问题定位

从补充的kubectl describe输出可以明确:集群只有1个节点,且节点的Pod数量已达上限,导致新的Pod(比如postgresql、init-db)无法被调度。这是所有异常的根源:

  • postgresql处于Pending状态,导致所有依赖它的Init容器(wait-for-postgres)无法完成,进而业务容器(superset、worker)无法启动
  • init-db作业因为Pod无法调度或依赖的postgresql未就绪,持续失败

2. 具体修复步骤

步骤1:扩容EKS节点组

增加集群节点数量,解决Pod调度的资源瓶颈:

  • 登录AWS控制台,进入EKS集群的节点组页面
  • 选择对应的节点组,修改期望节点数(比如从1改成2或更多)
  • 等待节点扩容完成,可用kubectl get nodes查看新节点是否就绪

步骤2:(可选)调整节点的Pod数量上限

如果暂时不想扩容节点,可以临时调整节点的可调度Pod数量上限:

  1. 查看当前节点的Pod数量限制:
kubectl describe node <节点名称> | grep -A 10 "Allocatable"
  1. 编辑节点配置,修改maxPods值(需要节点支持,部分EKS AMI允许调整):
kubectl edit node <节点名称>

找到status.allocatable.pods字段,修改为更大的数值(比如从20改成30),保存退出。

步骤3:清理失败的资源并重新安装

节点就绪后,先清理之前失败的Superset资源:

helm uninstall superset
kubectl delete pods --all  # 如果用了自定义命名空间,添加-n <命名空间>参数
kubectl delete jobs --all  # 如果用了自定义命名空间,添加-n <命名空间>参数

然后重新执行安装命令:

helm upgrade --install --values my-values.yaml superset superset/superset --timeout 10m30s

步骤4:验证Init容器状态

安装过程中,查看postgresql是否成功启动:

kubectl get pods -w | grep postgresql

等postgresql的STATUS变成Running后,再看init-db和业务Pod的状态是否正常。

3. 额外优化建议

  • 配置默认存储类:确保EKS集群有默认的存储类,避免StatefulSet(比如postgresql)因为找不到存储类而Pending(你已经安装了EBS CSI驱动,只需标记某个存储类为默认即可):
kubectl patch storageclass <你的存储类名称> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
  • 调整Helm超时时间:如果集群资源不足,安装过程可能需要更长时间,可以把--timeout参数调整为15m0s或更久。

内容的提问来源于stack exchange,提问作者Rohit Anil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 02:37:03