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 访问应用。

相关推荐
分布式存储与RustFS1 小时前
Terraform 状态文件老在本地丢、并发还撞锁:把 state 锁进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
csdn_aspnet1 小时前
macOS 10 、Docker 玩轉 MySQL
运维·mysql·macos·docker·容器·mac
对象存储与RustFS3 小时前
Jenkins 的构建产物别堆在控制器磁盘:用 RustFS 当它的 S3 工件仓库
后端·docker·云原生
罗小爬EX19 小时前
Helm 从概念到实战:以一个普通 Web 应用为例
云原生·helm
java_logo19 小时前
Docker 部署 DeepSeek Harness(moelin):轻松搭建带登录的本地 AI Agent 平台
运维·docker·容器·ai agent·deepseek·harness·轩辕镜像
xbzb20 小时前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
打工仔折腾 AI1 天前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
fengkai45451 天前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
分布式存储与RustFS1 天前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
分布式存储与RustFS1 天前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准