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 }- Postgres:可检测5432端口是否开放,或执行
调整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
相关产品推荐
相关产品推荐

