☸️ K8s 核心概念
关于本文档
Kubernetes 核心概念速查手册。本文档是 使用 kubeadm 创建集群 和 kubeadm 参数全解 的概念配套。
#k8s#kubernetes#core-concepts#reference
🏗️ 集群架构
控制平面(Control Plane)
集群的”大脑”,负责管理和协调整个集群。
| 组件 | 作用 | 面试价值 |
|---|---|---|
| kube-apiserver | 所有组件通信的入口,提供 REST API | ⭐⭐⭐⭐⭐ |
| kube-controller-manager | 运行控制器(Deployment、Node 等) | ⭐⭐⭐⭐ |
| kube-scheduler | 将 Pod 调度到合适的 Node | ⭐⭐⭐⭐ |
| etcd | 分布式键值存储,保存集群所有状态 | ⭐⭐⭐⭐⭐ |
面试题:API Server 是状态ful还是stateless? stateless。API Server 自身不存储状态,所有数据持久化到 etcd 中。这使得 API Server 可以水平扩展。
工作节点(Worker Node)
运行实际工作负载的机器。
| 组件 | 作用 |
|---|---|
| kubelet | 节点代理,负责管理 Pod 和容器 |
| kube-proxy | 网络代理,维护节点上的网络规则 |
| 容器运行时 | 如 containerd、CRI-O |
深化阅读 如需深入了解每个组件的原理、工作流程及面试考点,请参阅 K8s 组件详解。
📦 核心工作负载
Pod
Kubernetes 中最小的部署单元,封装一个或多个容器。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
核心要点
- Pod 中的容器共享网络命名空间(同一 IP 和端口空间)
- Pod 是”逻辑主机”,容器是”进程”
- Pod 是临时的,重建后 IP 会变化
Deployment
声明式地管理 Pod 的副本数量、滚动更新和回滚。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
面试题:Deployment 的滚动更新策略?
rollingUpdate.maxSurge:更新期间可以超出期望副本数的最大数量(默认 25%)rollingUpdate.maxUnavailable:更新期间允许不可用的最大数量(默认 25%)
StatefulSet
用于管理有状态应用(数据库、消息队列等),保证 Pod 的身份和启动顺序。
| 特性 | Deployment | StatefulSet |
|---|---|---|
| Pod 名称 | 随机后缀(如 nginx-7d8b9) | 有序编号(如 mysql-0) |
| 存储 | 共享卷 | 每个 Pod 独立 PVC |
| 启动顺序 | 并行 | 顺序(0, 1, 2…) |
| 网络标识 | 随机 IP | 稳定的 DNS 名称 |
DaemonSet
在每个节点上运行一个 Pod 副本(或指定节点),通常用于日志采集、监控、网络插件。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
containers:
- name: fluentd
image: fluentd:latest
🌐 网络与通信
Service
为一组 Pod 提供稳定的网络访问入口。
| 类型 | 作用 | 访问范围 |
|---|---|---|
| ClusterIP | 集群内部虚拟 IP | 仅集群内可访问 |
| NodePort | 节点端口映射(30000-32767) | 集群外可通过节点 IP:端口访问 |
| LoadBalancer | 云厂商 LB 集成 | 对外暴露服务 |
| ExternalName | DNS CNAME 映射 | 将 Service 映射到外部 DNS |
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
深化阅读
- ../service/K8s Service 核心原理 — Service 底层原理、veth pair、iptables DNAT 全流程
- ../service/K8s Service DNS 实现原理 — CoreDNS 解析流程与工作原理
- ../network/kube-proxy 流量转发与代理模式详解 — kube-proxy 三种模式与数据包流转
Ingress
HTTP/HTTPS 七层路由,将外部流量分发到不同的 Service。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
网络策略(NetworkPolicy)
Pod 级别的防火墙,控制 Pod 之间的网络通信。
默认:Pod 之间可以互相通信(全通)。NetworkPolicy 实现”白名单”机制。