Appearance
一次 apply,从 HTTP 请求到可用端点
你提交镜像和副本数,HTTP 请求很快返回;过几秒才有 Pod,又过几秒网关才接流量。要定位慢在哪里,分别找出这四个时刻:声明持久化、绑定节点、容器启动、端点就绪。本章用同一个 CPU 模型追踪,不假设集群有 GPU。首次实验先按开发环境启动 Kind。
客户端提交 Deployment;API Server 建立调用者身份,做授权检查和准入,校验并持久化对象到 etcd。返回成功意味着声明被接受,不意味着容器已启动。resourceVersion 用于并发控制与 List/Watch 衔接;它是服务端版本标识,不应当作业务序号做算术。Watch 断线可以从有效版本续传,历史被压缩后必须重新 List。把 Watch 当永久可靠的消息总线会丢失业务动作。
flowchart LR; Deployment-->APIServer-->etcd; APIServer-->DeploymentController-->ReplicaSet-->Pod; Pod-->Scheduler-->Binding; Binding-->kubelet-->CRI; kubelet-->CSI; CRI-->CNI
Deployment controller 管 ReplicaSet,ReplicaSet controller 维护 Pod 数量;scheduler 给未绑定 Pod 选节点,kubelet 通过 CRI 请求容器运行时准备 sandbox/容器,网络插件按 CNI 约定配置 Pod 网络;卷插件通过 CSI 完成供应、挂载等操作。Pod 创建成功、调度成功、容器 Running 和服务 Ready 是不同观测点。删 Pod 看恢复是验证 ReplicaSet;删整个 Deployment 后被自研控制器重建才验证 ModelService。
用同一个名字沿对象关系向下走
下面的标签查询针对专用 handbook-lab;不要依赖 Pod 名称前缀判断归属。ReplicaSet 记录 revision,Pod owner 是 ReplicaSet;Pod 重建即使名字相似,UID 也会变。
sh
export KUBECONFIG="$PWD/tmp/handbook.kubeconfig"
kubectl -n modeldock-lab get msvc chart-demo -o yaml
kubectl -n modeldock-lab get deploy chart-demo -o jsonpath='{.metadata.generation} {.status.observedGeneration} {.status.availableReplicas}{"\n"}'
kubectl -n modeldock-lab get rs,pods -o wide
kubectl -n modeldock-lab get endpointslice -l kubernetes.io/service-name=chart-demo -o yaml检查三个问题:控制器读到了最新 generation 吗?可用副本达到期望了吗?EndpointSlice 中的地址和 ready 条件是否对应当前 Pod?如果没有 Service,先修声明或控制器;如果有 Service 却没有就绪端点,先看 selector 和探针。Service 本身没有一个“正在监听”的业务进程。
客户端成功并不意味着链条同步完成
客户端 apply 根据本地清单与服务端对象产生更新;使用 --server-side 时字段归属由 API Server 的 managedFields 跟踪。字段冲突意味着两个管理者都试图拥有同一字段,不能靠反复 apply 修好。API Server 完成身份、权限、准入和校验后持久化;它不等 kubelet 下载镜像。Pod 状态由 kubelet 回写,控制器观察后继续更新高层 status;这些都是新的 API 写入。
练习与追问。 “资源已经在 etcd,所以一定有可访问的 IP”错在哪里?分别构造节点过滤失败和探针失败:前者 nodeName 为空,后者已经绑定节点但不接流量。调度过滤实验和控制器测试给出可复现的分界。
用失联的组件做一道反向推理
假设 apiserver 仍接受写入,scheduler 暂时停了。Deployment 和 ReplicaSet 的控制器仍可能创建未绑定的 Pod,但不能因此断言 kubelet 已拉镜像。反过来,如果 nodeName 已有值,Pod 迟迟无容器,则至少走过了绑定这一步,下一条证据通常在节点或容器事件。两种情况用户都可能只看见“没启动”。先确定最后一个有持久记录的动作,再向前找缺失的观察,比从架构图第一格逐项猜测更快。