K8s介绍(1)

一、Kubernetes 核心组件有哪些?分别是做什么的?创建 Pod 流程是什么?

✅ 1. Control Plane(控制平面)组件

组件 作用
kube-apiserver​ K8s 的唯一入口,所有资源增删改查都通过它(认证 / 鉴权 / 准入控制)
etcd​ 分布式键值存储,保存集群所有资源状态(Pod、Service、RS 等)
kube-scheduler​ 调度 Pod,根据 CPU/内存/亲和性/污点等,选出合适的 Node
kube-controller-manager​ 运行多种控制器(Deployment / RS / Node / Namespace 等),保证期望状态一致​

Master 节点 = apiserver + etcd + scheduler + controller-manager


✅ 2. Node(工作节点)组件

组件 作用
kubelet​ 每个 Node 一个,监听 apiserver,根据 PodSpec 拉镜像、启容器、汇报状态
kube-proxy​ 维护 iptables / IPVS 规则,实现 Service → Pod 流量转发
Container Runtime​ 真正跑容器的(containerd / docker / CRI-O)

✅ 3. 创建一个 Pod 的完整流程(经典面试题)

以 kubectl create -f pod.yaml为例:

  1. kubectl

    • 校验 YAML

    • 调用 kube-apiserverREST API

  2. kube-apiserver

    • 认证(证书 / token)

    • 鉴权(RBAC)

    • 准入控制(Admission)

    • 将 Pod 对象写入 etcd(状态:Pending)

  3. kube-scheduler

    • 监听未调度的 Pod

    • 经过过滤(Filter)+ 打分(Score)

    • 选定 Node

    • 更新 Pod .spec.nodeName→ apiserver → etcd

  4. kubelet(对应 Node)

    • 监听到有 Pod 绑定到自己

    • 调用 Container Runtime 拉镜像

    • 创建容器、启动容器

    • 上报 Pod 状态(Running)→ apiserver → etcd

✅ Pod 创建完成


二、Pod 是怎么"发布出来"被访问的?(今天的话术流程)

你写的这个思路是对的,标准访问链路话术如下:

复制代码

纯文本

纯文本

复制代码
Pod
  ↓
Service(ClusterIP / NodePort / LoadBalancer)
  ↓
kube-proxy(iptables / IPVS)
  ↓
物理网卡(如 ens33)→ 转发到 Pod 的 veth

🔹 详细解释(口述版)

  1. Pod

    • 有独立 IP(CNI 插件分配,如 Calico/Flannel)

    • 只在集群内可达

  2. Service

    • 提供稳定虚拟 IP(VIP)和端口

    • 通过 LabelSelector 关联一组 Pod

    • Endpoints 记录真实 Pod IP

  3. kube-proxy

    • 监听 Service / Endpoints

    • 在 Node 上写 iptables 或 IPVS 规则

    • 把 Service IP:Port负载均衡到后端 Pod IP

  4. ens33(宿主机网卡)

    • NodePort / LB 类型时,外部流量进入 Node

    • kube-proxy 规则把流量转到 Pod(经过 cni0 / veth)

✅ 用户访问 Service → 实际访问 Pod


三、控制器管理 Pod 的逻辑(Deployment & ReplicaSet)

你写的层级完全正确:

复制代码

纯文本

纯文本

复制代码
Deployment → ReplicaSet → Pod

✅ 详细工作原理

1️⃣ Deployment
  • 声明 应用期望版本 & 副本数

  • 管理 ReplicaSet 的版本(滚动更新 / 回滚)

  • 不直接创建 Pod

复制代码

yaml

yaml

复制代码
deployment.spec.replicas = 3
deployment.spec.template = Pod模板
  • 修改镜像 → Deployment 创建 新 ReplicaSet

  • 逐步 scale 新 RS ↑ / 旧 RS ↓(RollingUpdate)


2️⃣ ReplicaSet(RS)
  • 确保 指定数量的 Pod 副本始终存在

  • 通过 LabelSelector 管理 Pod

  • 如果 Pod 挂了 → RS 新建 Pod

⚠️ RS 一般由 Deployment 创建,不建议手动写 RS


3️⃣ Pod
  • 最终被 kubelet 创建并运行

  • 无自愈能力(RS / Deployment 负责自愈)


✅ 控制器工作逻辑(核心思想)

期望状态(Spec) vs 实际状态(Status)

  • Controller 通过 List-Watch 监听 apiserver

  • 实际 Pod 数 < replicas → 创建 Pod

  • 实际 Pod 数 > replicas → 删除 Pod

  • Pod 与 RS selector 不匹配 → 不管


✅ 面试一句话总结(高分答法)

Kubernetes 由 apiserver / etcd / scheduler / controller-manager 和 node 上的 kubelet / kube-proxy / runtime 组成;

Pod 由 Deployment → ReplicaSet → Pod 管理,经 apiserver 写入 etcd,scheduler 调度,kubelet 拉起;

外部通过 Service → kube-proxy(iptables/IPVS) → Node 网卡 → Pod 访问应用。

相关推荐
时间售卖铺19 分钟前
MySQL 日志管理
运维·数据库·mysql·云原生
老郭a39 分钟前
流量一涨 Pod 扩不出来?K8s HPA 弹性伸缩配置避坑指南
云原生
程序员清风1 小时前
LibreChat 实战:用 Docker 搭建可扩展的多模型对话平台
运维·docker·容器
Web3&Basketball2 小时前
从0到1落地AI Agent沙箱隔离Docker实战:踩坑全记录
运维·docker·容器·agent·容器安全·沙箱隔离
xianyuCcCcCCCcc2 小时前
Kubernetes Service 与网络代理
网络·云原生·kubernetes
bluebonnet273 小时前
【docker】使用regctl免安装docker下载镜像
运维·docker·容器
我不会起名字3223 小时前
PV/PVC 一直 Pending:StorageClass 与绑定条件的 4 个检查点
云原生·kubernetes·pvc·排查
孔令飞17 小时前
工具分享:OneX AI 工具安装、配置及功能介绍
云原生·go·ai编程
程序猿阿越19 小时前
从 StatefulSet 到容器挂载:CSI 源码走读
后端·kubernetes·源码阅读
分布式存储与RustFS20 小时前
机器要下线,数据先线上搬家:RustFS 存储池退役实操
运维·云原生·开源·对象存储·分布式存储·s3·性能基准