Kubernetes 基础
Kubernetes(K8s)用于编排容器化应用。一个集群由 Control Plane 和多个 Worker Node 组成:Control Plane 维护集群的期望状态,Worker Node 负责运行实际工作负载。
Node 与 Pod

Node 是集群中的工作节点,可以是物理机或虚拟机。Pod 是 Kubernetes 中最小的可部署单元,一个 Node 可以运行多个 Pod。
一个 Pod 可以包含一个或多个共享网络和存储资源的容器。常见做法是让一个 Pod 运行主应用容器,并按需加入日志收集、监控等 Sidecar 容器。数据库等独立服务通常运行在单独的 Pod 中。
Service

Pod 会被创建、销毁和重新调度,其 IP 地址并不稳定。Service 根据标签选择一组 Pod,为它们提供稳定的访问地址和负载均衡。
例如,应用不需要记录每个数据库 Pod 的 IP,只需要访问数据库 Service;Service 会把请求转发到健康的后端 Pod。
Ingress

数据库、缓存和消息队列等内部服务通常不直接暴露给集群外部。对于需要对外提供的 HTTP 或 HTTPS 服务,可以使用 Ingress 配置基于域名和路径的路由规则。
Ingress 规则需要由 Ingress Controller 实现。Controller 根据规则把外部请求转发到对应的 Service,并可提供 TLS 终止和负载均衡等能力。
Deployment

Deployment 用声明式配置定义应用的副本数量和更新策略,并通过 ReplicaSet 管理 Pod。它支持滚动更新和回滚。
当 Node 发生故障时,控制器会在可用节点上创建替代 Pod,使实际副本数恢复到期望值;Service 会根据健康端点更新转发目标。
Control Plane
kube-apiserver:集群 API 的统一入口,负责认证、鉴权和准入控制,也是直接读写 etcd 的控制平面组件。etcd:分布式键值存储,持久化 Kubernetes API 对象和集群状态。kube-controller-manager:运行 Deployment、ReplicaSet、Node 等控制器,通过控制循环让实际状态不断逼近期望状态。kube-scheduler:监听尚未分配节点的 Pod,根据资源需求、调度约束和节点状态选择合适的 Node。
Worker Node

kubelet:节点代理,监视分配到本节点的 Pod,并通过容器运行时确保其中的容器正常运行。kube-proxy:维护节点上的网络转发规则,实现 Service 到后端 Pod 的流量转发。- 容器运行时:负责拉取镜像并运行容器,例如 containerd 或 CRI-O。
kubectl apply 之后发生了什么
假设提交了一个要求运行 3 个副本的 Deployment:
kubectl把请求发送给 API Server,API Server 完成校验后将期望状态写入 etcd。- Deployment Controller 创建或更新 ReplicaSet,ReplicaSet Controller 再创建所需的 Pod 对象。
- Scheduler 为尚未调度的 Pod 选择 Worker Node,并记录绑定结果。
- 对应 Node 上的 kubelet 发现新 Pod,通过容器运行时拉取镜像并启动容器。
- 控制器持续比较实际状态与期望状态;如果 Pod 或 Node 故障,就创建替代 Pod。