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 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
阿里云云原生3 天前
AI 开发新常态:当 Cursor、Claude、Codex 并行,如何统一管理散落的 Skill 资产?
云原生·ai编程
探索云原生3 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭3 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美3 天前
从edge-trigger到level-trigger,谈谈 Kubernetes controller 的开发范式
云原生
阿里云云原生4 天前
深度解构:当 Append-only 的 SLS 遇上 Update/Delete,是如何实现设计权衡的?
云原生
Java之美4 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
秋播4 天前
nerdctl推送rancher本地镜像到harbor
云原生