← 博客

Kubernetes 基础

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

Node 与 Pod

Node、Pod 与容器的关系

Node 是集群中的工作节点,可以是物理机或虚拟机。Pod 是 Kubernetes 中最小的可部署单元,一个 Node 可以运行多个 Pod。

一个 Pod 可以包含一个或多个共享网络和存储资源的容器。常见做法是让一个 Pod 运行主应用容器,并按需加入日志收集、监控等 Sidecar 容器。数据库等独立服务通常运行在单独的 Pod 中。

Service

Service 为一组 Pod 提供稳定访问入口

Pod 会被创建、销毁和重新调度,其 IP 地址并不稳定。Service 根据标签选择一组 Pod,为它们提供稳定的访问地址和负载均衡。

例如,应用不需要记录每个数据库 Pod 的 IP,只需要访问数据库 Service;Service 会把请求转发到健康的后端 Pod。

Ingress

Ingress 将外部流量路由到集群内的 Service

数据库、缓存和消息队列等内部服务通常不直接暴露给集群外部。对于需要对外提供的 HTTP 或 HTTPS 服务,可以使用 Ingress 配置基于域名和路径的路由规则。

Ingress 规则需要由 Ingress Controller 实现。Controller 根据规则把外部请求转发到对应的 Service,并可提供 TLS 终止和负载均衡等能力。

Deployment

Deployment 管理跨 Node 分布的 Pod 副本

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

Worker Node 的主要组件

  • kubelet:节点代理,监视分配到本节点的 Pod,并通过容器运行时确保其中的容器正常运行。
  • kube-proxy:维护节点上的网络转发规则,实现 Service 到后端 Pod 的流量转发。
  • 容器运行时:负责拉取镜像并运行容器,例如 containerd 或 CRI-O。

kubectl apply 之后发生了什么

假设提交了一个要求运行 3 个副本的 Deployment:

  1. kubectl 把请求发送给 API Server,API Server 完成校验后将期望状态写入 etcd。
  2. Deployment Controller 创建或更新 ReplicaSet,ReplicaSet Controller 再创建所需的 Pod 对象。
  3. Scheduler 为尚未调度的 Pod 选择 Worker Node,并记录绑定结果。
  4. 对应 Node 上的 kubelet 发现新 Pod,通过容器运行时拉取镜像并启动容器。
  5. 控制器持续比较实际状态与期望状态;如果 Pod 或 Node 故障,就创建替代 Pod。