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为例:
kubectl
校验 YAML
调用
kube-apiserverREST API
kube-apiserver
认证(证书 / token)
鉴权(RBAC)
准入控制(Admission)
将 Pod 对象写入etcd(状态:Pending)
kube-scheduler
监听未调度的 Pod
经过过滤(Filter)+ 打分(Score)
选定 Node
更新 Pod
.spec.nodeName→ apiserver → etcd
kubelet(对应 Node)
监听到有 Pod 绑定到自己
调用 Container Runtime 拉镜像
创建容器、启动容器
上报 Pod 状态(Running)→ apiserver → etcd
✅Pod 创建完成
二、Pod 是怎么“发布出来”被访问的?(今天的话术流程)
你写的这个思路是对的,标准访问链路话术如下:
纯文本
纯文本
Pod ↓ Service(ClusterIP / NodePort / LoadBalancer) ↓ kube-proxy(iptables / IPVS) ↓ 物理网卡(如 ens33)→ 转发到 Pod 的 veth🔹 详细解释(口述版)
Pod
有独立 IP(CNI 插件分配,如 Calico/Flannel)
只在集群内可达
Service
提供稳定虚拟 IP(VIP)和端口
通过 LabelSelector 关联一组 Pod
Endpoints 记录真实 Pod IP
kube-proxy
监听 Service / Endpoints
在 Node 上写iptables 或 IPVS 规则
把
Service IP:Port负载均衡到后端 Pod IP
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 访问应用。
