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 定义:

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 存储全局状态。

• 控制器和调度器实现自动化决策。

关键能力:调度、自愈、服务发现、滚动更新、扩缩容。

相关推荐
Cloud Traveler24 分钟前
Kubernetes vs. OpenShift:深入比较与架构解析
架构·kubernetes·openshift
是垚不是土2 小时前
探秘高可用负载均衡集群:企业网络架构的稳固基石
运维·服务器·网络·云原生·容器·架构·负载均衡
杰克逊的日记2 小时前
大规模k8s集群怎么规划
云原生·容器·kubernetes
luck_me52 小时前
K8S已经成为了Ai应用运行的平台工具
人工智能·容器·kubernetes
大G哥3 小时前
实战演练:用 AWS Lambda 和 API Gateway 构建你的第一个 Serverless API
云原生·serverless·云计算·gateway·aws
matrixlzp3 小时前
K8S Ingress、IngressController 快速开始
云原生·容器·kubernetes
探索云原生4 小时前
一文搞懂 GPU 共享方案: NVIDIA Time Slicing
ai·云原生·kubernetes·gpu
心动啊1216 小时前
docker使用过程中遇到概念问题
运维·docker·容器
喵叔哟7 小时前
21.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--身份认证服务拆分规划
微服务·云原生·架构
zhangxiangweide7 小时前
Docker换源
运维·docker·容器