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

Terraform搭配Microk8s时,apply显示‘still creating...’的等待原因?

Terraform Apply超时,服务显示"Still creating..."的排查思路

核心原因:Terraform等待的是就绪状态而非仅存活状态

Kubernetes的存活探针(livenessProbe)只负责判断容器是否需要重启,但Terraform的Kubernetes Provider默认会等待资源满足就绪条件(readinessProbe)才会标记资源创建完成。你提到的4个服务虽然存活探针正常,但可能缺少就绪探针,或者就绪探针配置不符合实际服务就绪逻辑,导致Terraform一直等待。

具体排查与解决步骤:

  • 检查是否配置了就绪探针:查看这4个服务的Terraform配置,确认是否定义了readiness_probe块。如果没有,添加对应服务的就绪探针:

    • Postgres:可检测5432端口是否开放,或执行SELECT 1查询
    • MongoDB:检测27017端口,或执行db.adminCommand('ping')
    • Nginx:检测80端口,或请求根路径返回200状态码
    • MongoExpress:检测8081端口,或请求页面返回200状态码
      示例(Postgres就绪探针):
    readiness_probe {
      tcp_socket {
        port = 5432
      }
      initial_delay_seconds = 15
      period_seconds        = 10
    }
    
  • 调整Terraform的等待超时时间:如果服务本身启动较慢,默认的超时时间(通常10分钟)可能不够。可以在资源块中添加timeouts配置延长等待时间:

    resource "kubernetes_deployment" "postgres" {
      # ... 其他配置 ...
      timeouts {
        create = "30m"
      }
    }
    
  • 验证服务实际就绪状态:用kubectl命令确认Pod的就绪状态:

    kubectl get pods -o wide
    

    查看READY列是否为1/1(单容器Pod场景),如果不是,查看Pod事件日志定位问题:

    kubectl describe pod <pod-name>
    

    重点看是否有就绪探针失败的记录,比如端口未开放、请求返回错误状态码等。

  • 临时跳过就绪状态等待(不推荐):如果只是为了测试需要快速完成apply,可以在资源块中设置wait_for_ready = false,但这会跳过服务就绪验证,可能引发后续问题:

    resource "kubernetes_deployment" "postgres" {
      # ... 其他配置 ...
      wait_for_ready = false
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:03:24