答复要点

- 是否先拉镜像再挂载卷?

  • kubelet 会先准备并挂载卷(ConfigMap/Secret/emptyDir 等),再拉取镜像并创建容器。也就是“先卷后镜像后容器”。你之前把镜像拉取放在卷之前,这一点需要调整。

- 什么时候把 Pod 注册到注册中心?

  • 由应用的注册 SDK 决定(如 Spring Cloud Alibaba Nacos)。默认不会等 K8s Readiness 成功才注册;通常在“嵌入式 Web 服务器端口已就绪”后立即注册(因为要拿到端口),这往往早于 K8s 将 Pod 标记为 Ready。
  • 最佳实践分两种:
    • 集群内走 K8s Service 访问:可以允许“先注册后变 Ready”,因为 K8s 只会把 Ready 的 Pod 加入 Endpoints;未 Ready 不会被 kube-proxy 转发。
    • 客户端绕过 K8s、直接用注册中心发现并直连:建议“延迟注册”(等应用内部就绪或 K8s Readiness 成功后再注册),否则可能被过早调用。
  • “后面注册中心那一块逻辑是否正确?”
    • 两点需要修正:
      1. “拉取远端配置”应来自“配置中心(Nacos Config)”,而不是“注册中心(Nacos Naming)”;而且发生在应用启动早期(bootstrap/config import 阶段),在注册之前。
      2. 注册默认发生在 Web 服务器端口就绪之后,不强依赖 K8s Readiness;若你要强约束,可显式延迟注册。
  • “拉取远端配置(通过注册中心)”在做什么?顺序对吗?
    • 这是从“配置中心”获取应用配置(如数据库、特性开关等)。顺序应当是:应用启动 → 读取本地配置/挂载文件 → 向“配置中心”拉取远端配置 → 构建应用上下文并启动 Web 服务器 → 注册到“注册中心”。
  • “暴露健康端点(/actuator/health → 50101)”是什么意思?
    • 这是 Spring Boot Actuator 提供的健康检查 HTTP 接口。K8s 的 liveness/readinessProbe 一般就用它。推荐使用 Boot 2.3+ 的专用端点:/actuator/health/liveness 和 /actuator/health/readiness;探针用 HTTP GET 指向正确端口(若 management.server.port 与业务端口不同,要对应配置探针端口)。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐