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

相关推荐
江华森1 小时前
《网络架构实战:从单机到云原生的全栈思考》博客系列
网络·云原生·架构
小肥君10 小时前
docker无法连接GPU资源解决方案
docker·容器·eureka
liux352811 小时前
K8s存储卷全解析:PV/PVC/StorageClass 关系
kubernetes
江华森13 小时前
从零搭建 Kubernetes 集群并部署 Kuboard v3 管理面板 —— 国内环境完整实战教程
容器·kubernetes
友莘居士14 小时前
KingbaseES Docker速查表
运维·docker·容器
小肥君16 小时前
docker镜像配置
运维·docker·容器
某林21217 小时前
Isaac Lab (v2.3.2) Docker 本地化部署与底层排障全解析
运维·docker·容器·架构·iassc
iDao技术魔方19 小时前
WSL 配 GPU 用 Docker 的折腾指南(2026 年版)
运维·docker·容器