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

相关推荐
nuo5342023 小时前
基础 6 —— Docker 容器数据卷
docker·容器
Sinclair3 小时前
安企CMS的安装-Docker 部署
运维·docker·容器
汪汪大队u5 小时前
【无标题】
运维·docker·kubernetes·prometheus
spider_xcxc7 小时前
Docker Compose 容器通信详解:同一个 Compose 文件才能互通吗?
docker·容器·k8s·容器化·容器网络
慧一居士8 小时前
KubePi 功能和使用场景全面介绍
容器
BaiduPHP9 小时前
docker异常断电,出现docker服务,启动失败
docker·容器·eureka
ai_coder_ai9 小时前
编写自动化脚本,在自己后端服务中使用云原生Baas服务进行编码和解码相关操作
数据库·云原生·自动化
云烟成雨TD9 小时前
Kubernetes 系列【20】服务:EndpointSlice 端点分片
云原生·容器·kubernetes
寒冰碧海11 小时前
大模型部署从0到1(三):单机多卡 vLLM 部署Qwen3.6实战|Docker Compose 一键启动
docker·容器·vllm