Kubernetes 编排(01):Kubernetes 核心概念——Pod、Node、Controller、API Server、etcd、kubelet
更新时间:2026-09-01。本文是
cloud/kubernetes/K8s 编排第 01 篇,在 K8s 索引下。Kubernetes 是容器编排的事实标准,管理容器的部署、扩缩容、服务发现、负载均衡。理解核心概念才能用好 K8s。
本文要回答的问题
- Kubernetes 架构:控制面和工作节点?API Server、etcd、scheduler、kubelet 分别做什么?
- Pod 是什么?为什么是 K8s 的最小调度单位?
- Controller 是什么?ReplicaSet、Deployment、StatefulSet 的区别?
- kubectl 怎么用?常用命令有哪些?
一、Kubernetes 架构
text
Kubernetes 集群:
┌─────────────────────────────────────────────────────┐
│ 控制面(Control Plane) │
│ ┌───────────────┐ ┌──────────────┐ │
│ │ API Server │ │ etcd │ │
│ │ (kube-apiserver)│ │ (分布式存储) │ │
│ └───────────────┘ └──────────────┘ │
│ ┌───────────────┐ ┌────────────────┐ │
│ │ Scheduler │ │ Controller │ │
│ │ (kube-scheduler)│ │ Manager │ │
│ └───────────────┘ └────────────────┘ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Cloud Controller Manager(云服务商接口) │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────┐
│ 工作节点(Worker Node) │
│ ┌───────────────┐ ┌──────────────┐ │
│ │ kubelet │ │ kube-proxy │ │
│ │ (节点代理) │ │ (网络代理) │ │
│ └───────────────┘ └──────────────┘ │
│ ┌────────────────────────────────────────────────┐ │
│ │ Pods(容器组) │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 容器 1 │ │ 容器 2 │ ... │ │
│ │ └──────────┘ └──────────┘ │ │
│ └────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘控制面组件:
- API Server:所有组件的入口,通过 REST API 交互,唯一直接操作 etcd 的组件
- etcd:分布式键值存储,存储集群状态和配置
- Scheduler:调度 Pod 到合适的 Node
- Controller Manager:运行各种控制器(Deployment、ReplicaSet、Node 等)
工作节点组件:
- kubelet:Pod 的生命周期管理,报告节点状态
- kube-proxy:处理服务发现和负载均衡,更新 iptables/IPVS 规则
- 容器运行时:Docker、containerd 等
二、Pod——最小调度单位
yaml
# Pod 定义
apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: my-app
spec:
containers:
- name: my-container
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"Pod 的核心概念:
- Pod 是最小调度单位,一个 Pod 包含一个或多个容器
- 同一 Pod 中的容器共享网络命名空间和存储卷
- Pod 是"逻辑主机",容器是"进程"
- Pod 是短暂的,可能被删除、重启
三、Controller——控制器
yaml
# ReplicaSet:确保 Pod 副本数
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-rs
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:1.25yaml
# Deployment:管理 ReplicaSet,支持滚动更新
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:1.25Controller 对比:
- ReplicaSet:确保 Pod 副本数,自愈
- Deployment:管理 ReplicaSet,支持滚动更新/回滚
- StatefulSet:有状态应用,Pod 有唯一标识和顺序
- DaemonSet:每个节点运行一个 Pod(日志收集、监控)
- Job/CronJob:一次性任务/定时任务
经验: 99% 的场景用 Deployment。
四、kubectl 常用命令
bash
# 查看集群
kubectl cluster-info
kubectl get nodes
# 查看 Pod
kubectl get pods
kubectl get pods -n kube-system # 指定命名空间
kubectl get pods -A # 所有命名空间
kubectl get pods -o wide # 带 IP 和节点
kubectl describe pod my-pod # 详细信息
# 创建/更新资源
kubectl apply -f deployment.yaml
kubectl delete -f deployment.yaml
kubectl delete pod my-pod
# 查看日志
kubectl logs my-pod
kubectl logs -f my-pod # 实时日志
kubectl logs -l app=my-app # 按标签过滤
# 进入 Pod
kubectl exec -it my-pod -- bash
# 转发端口
kubectl port-forward my-pod 8080:80
# 查看事件
kubectl get events --sort-by='.lastTimestamp'五、常见坑对照
| 坑 | 现象 | 对策 |
|---|---|---|
| Pod 一直 Pending | 调度不成功,没有节点满足条件 | kubectl describe pod 查看原因 |
| Pod 一直 CrashLoopBackOff | 容器启动失败,不断重启 | kubectl logs 查看日志 |
| 节点 NotReady | 节点不可用 | kubectl describe node,检查 kubelet |
| 滚动更新卡住 | 新 Pod 启动失败,旧 Pod 不关闭 | 检查 deployment 的 maxUnavailable |
相关与延伸
下一篇:Pod 调度与资源——requests/limits、QoS、亲和性、污点容忍、HPA;Docker 基础,见 Docker 基础。
一句话总结
Kubernetes 核心概念:API Server 是入口,etcd 存状态,Scheduler 调度 Pod,kubelet 管理 Pod 生命周期;Pod 是最小调度单位,共享网络和存储;Controller 管理 Pod 自愈和扩缩容,Deployment 管理滚动更新,StatefulSet 管理有状态应用;kubectl 是命令行工具,常用命令 get/describe/logs/exec/port-forward。