3.k8s是如何工作的

发布于:2025-04-21 ⋅ 阅读:(114) ⋅ 点赞:(0)

Kubernetes 是一个复杂的分布式系统,其核心设计理念是 声明式管理自动化控制。以下是 Kubernetes 的工作机制详解,从用户提交应用到容器运行的全流程:


1. 核心架构:控制平面(Control Plane)与工作节点(Worker Nodes)

Kubernetes 集群由两类角色组成:
控制平面:负责全局决策和协调(如调度、扩缩容)。
工作节点:运行用户应用的实际容器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


2. 控制平面(Control Plane)的组件

(1) API Server(kube-apiserver)

作用:集群的“前门”,所有操作(包括 kubectl 命令)通过 REST API 与其交互。
关键行为
• 验证请求的合法性(认证、鉴权)。
• 将资源状态写入 etcd 数据库。
• 通知其他组件(如调度器、控制器)处理请求。

(2) etcd

作用:分布式键值数据库,存储集群所有资源的状态(如 Pod、Service 配置)。
重要性:是集群的“唯一真实数据源”(Single Source of Truth)。

(3) 调度器(kube-scheduler)

作用:为新创建的 Pod 选择合适的工作节点。
调度逻辑

  1. 过滤不满足条件的节点(如资源不足、标签不匹配)。
  2. 对剩余节点打分(如资源利用率、亲和性策略)。
  3. 选择得分最高的节点绑定 Pod。
(4) 控制器管理器(kube-controller-manager)

作用:运行一系列 控制器(Controllers),持续监控资源状态,确保其与期望状态一致。
常见控制器
Deployment Controller:确保 Pod 副本数与 replicas 定义一致。
Node Controller:监控节点状态,处理节点故障。
Service Controller:管理负载均衡器和 DNS 记录。

(5) Cloud Controller Manager(可选)

作用:与云厂商(如 AWS、Azure)交互,管理云资源(如负载均衡器、磁盘卷)。


3. 工作节点(Worker Node)的组件

(1) kubelet

作用:节点上的“代理”,负责管理本节点的 Pod 和容器。
关键行为
• 从 API Server 接收 Pod 定义。
• 调用容器运行时(如 Docker、containerd)启动/停止容器。
• 定期向 API Server 报告 Pod 状态。

(2) kube-proxy

作用:维护节点网络规则,实现 Service 的负载均衡和流量转发。
实现方式:基于 iptables 或 IPVS。

(3) 容器运行时(Container Runtime)

常见实现:Docker、containerd、CRI-O。
作用:真正运行容器的底层引擎,负责镜像下载、容器启停等。


4. Kubernetes 的工作流程(以部署一个 Pod 为例)

步骤 1:用户提交资源定义

用户通过 kubectl apply -f pod.yaml 提交一个 Pod 的 YAML 定义:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.23
步骤 2:API Server 处理请求

• API Server 验证请求合法性,将 Pod 定义写入 etcd。
• 返回响应给用户(如 “pod/nginx created”)。

步骤 3:调度器分配节点

• 调度器发现 etcd 中有一个未调度的 Pod(spec.nodeName 为空)。
• 根据资源需求、亲和性规则等选择合适节点。
• 更新 Pod 的 spec.nodeName 字段并写入 etcd。

步骤 4:kubelet 创建容器

• 目标节点上的 kubelet 通过 Watch 机制发现分配给自己的 Pod。
• 调用容器运行时下载镜像并启动容器。
• 更新 Pod 状态为 Running 并写入 etcd。

步骤 5:持续状态同步

• 控制器(如 Deployment Controller)持续检查 Pod 状态。
• 如果 Pod 崩溃,控制器会重新创建新的 Pod。


5. 核心工作原理:控制循环(Control Loop)

Kubernetes 的核心逻辑基于 “观察-比较-执行”(Observe-Diff-Act) 循环:

  1. Observe:从 etcd 读取当前资源状态。
  2. Diff:比较当前状态与用户声明的期望状态。
  3. Act:执行操作使当前状态逼近期望状态(如扩缩副本、重启容器)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


6. 网络与存储的实现机制

(1) 网络模型

Pod 网络:每个 Pod 拥有唯一 IP,跨节点可直接通信(需 CNI 插件如 Calico、Flannel)。
Service 网络:通过虚拟 IP(ClusterIP)和 iptables/IPVS 规则实现负载均衡。

(2) 存储管理

PV/PVC:管理员创建持久卷(PV),用户通过 PVC 申请存储。
动态卷供应:StorageClass 允许按需自动创建云存储卷(如 AWS EBS)。


7. 自我修复(Self-Healing)场景示例

  1. 节点宕机
    • Node Controller 检测到节点状态为 NotReady
    • 标记该节点上所有 Pod 为 Terminating
    • 调度器在其他节点重新创建这些 Pod。

  2. 容器崩溃
    • kubelet 检测到容器退出,自动重启容器。
    • 若重启次数超过阈值,标记 Pod 为 Failed,由控制器重新创建 Pod。


8. 扩展机制:CRD 与 Operator

Custom Resource Definition (CRD):允许用户定义新的资源类型(如 MySQLCluster)。
Operator:通过自定义控制器管理 CRD,实现复杂应用的自动化运维(如数据库备份、升级)。


总结

核心思想:通过声明式 API 描述应用状态,由控制平面持续驱动集群达到期望状态。
组件协同
• API Server 作为中枢,连接所有组件。
• etcd 存储全局状态。
• 控制器和调度器实现自动化决策。
关键能力:调度、自愈、服务发现、滚动更新、扩缩容。


网站公告

今日签到

点亮在社区的每一天
去签到