当前位置: 首页 > news >正文

3.k8s是如何工作的

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: nginximage: 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 存储全局状态。
• 控制器和调度器实现自动化决策。
关键能力:调度、自愈、服务发现、滚动更新、扩缩容。

相关文章:

  • 【Web前端技术】第一节—HTML简介
  • 【C到Java的深度跃迁:从指针到对象,从过程到生态】第二模块·语法迁移篇 —— 第四章 数据类型:从sizeof到包装类的进化
  • ocr-身份证正反面识别
  • 一个由通义千问以及FFmpeg的AVFrame、buffer引起的bug:前面几帧影响后面帧数据
  • 关于系统架构思考,如何设计实现系统的高可用?
  • FlexRay协议详解:优点、缺点及常用MCU推荐
  • 【HDFS入门】HDFS副本策略:深入浅出副本机制
  • 【Web APIs】JavaScript 操作多个元素 ④ ( 表格全选复选框案例 )
  • 脉冲编码调制(PCM)在三角形信号中的应用
  • 力扣热题100—滑动窗口(c++)
  • 团体程序设计天梯赛L2-008 最长对称子串
  • 前端基础常见的算法
  • 如何实现一个“纯净”的空对象(无原型链属性)?
  • 光谱相机的成像方式
  • 在机器视觉检测中为何选择线阵工业相机?
  • RHCE 第一次作业
  • java 洛谷题单【算法2-1】前缀和、差分与离散化
  • 美国国土安全部终止资助,CVE漏洞数据库项目面临停摆危机
  • 【现代深度学习技术】循环神经网络03:语言模型和数据集
  • 记录jdk8->jdk17 遇到的坑和解决方案
  • 阿拉丁做网站怎么做的/电子商务营销策略
  • js与asp.net做的网站/竞价推广外包托管
  • 用layui做的一个网站模板/网站推广的渠道有哪些
  • 加盟网网站建设策划书/推广app
  • 苏州住房与城乡建设部网站/双11各大电商平台销售数据
  • 电子书网站模板/sem推广竞价