381 字
1 分钟
Kubernetes 核心架构与组件
一、整体架构
1.1 架构图
graph TB
subgraph "Control Plane (Master)"
A["kube-apiserver"]
B["etcd"]
C["kube-scheduler"]
D["kube-controller-manager"]
E["cloud-controller-manager"]
end
subgraph "Node 1"
F1["kubelet"]
G1["kube-proxy"]
H1["Container Runtime"]
I1["Pod 1"]
J1["Pod 2"]
end
subgraph "Node 2"
F2["kubelet"]
G2["kube-proxy"]
H2["Container Runtime"]
I2["Pod 3"]
end
A --> B
A --> C
A --> D
A --> E
A -.-> F1
A -.-> F2
1.2 组件职责
| 组件 | 类型 | 职责 |
|---|---|---|
| kube-apiserver | Control Plane | 集群 API 网关,所有操作的入口 |
| etcd | Control Plane | 分布式键值存储,保存集群状态 |
| kube-scheduler | Control Plane | 调度 Pod 到合适的 Node |
| kube-controller-manager | Control Plane | 运行各种控制器 |
| cloud-controller-manager | Control Plane | 与云服务商交互 |
| kubelet | Node | 管理 Pod 生命周期 |
| kube-proxy | Node | 网络代理,维护网络规则 |
| Container Runtime | Node | 容器运行时(containerd) |
二、Control Plane 组件
2.1 kube-apiserver
# API Server 是集群的统一入口# 所有组件都通过它交互
apiVersion: v1kind: Podmetadata: name: nginxspec: containers: - name: nginx image: nginx:1.25# API Server 特性# 1. 认证鉴权kubectl get pods --token=<token>
# 2. 准入控制# - LimitRanger# - ResourceQuota# - MutatingWebhook
# 3. 存储缓存# watch 机制通知变更2.2 etcd
# etcd 是一致性键值存储# 存储 Kubernetes 所有状态数据
# 重要数据# - Pod 状态# - Service 端点# - ConfigMap/Secret# - 调度信息
# 备份命令ETCDCTL_API=3 etcdctl snapshot save backup.db \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key2.3 kube-scheduler
# Scheduler 负责选择最佳 Node 运行 Pod
apiVersion: v1kind: Podmetadata: name: nginxspec: # 调度策略 nodeSelector: disktype: ssd affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: memory operator: GreaterThan values: - "8Gi" tolerations: - key: "node.kubernetes.io/not-ready" operator: "Exists" effect: "NoSchedule"2.4 kube-controller-manager
# 运行所有 Kubernetes 控制器
# 控制器列表# - ReplicaSet Controller# - Deployment Controller# - DaemonSet Controller# - StatefulSet Controller# - Job Controller# - CronJob Controller# - Service Controller# - Endpoint Controller# - Namespace Controller# - Node Controller三、Node 组件
3.1 kubelet
# kubelet 是 Node 上的主要代理# 1. 向 API Server 注册 Node# 2. 创建/销毁 Pod# 3. 监控容器健康# 4. 报告资源使用
# kubelet 不会管理非 Kubernetes 创建的容器3.2 kube-proxy
# kube-proxy 维护网络规则# 实现 Service 的负载均衡
# 模式# 1. iptables (默认) - 规则匹配# 2. IPVS - 适合大规模集群# 3. Userspace - 旧模式,不推荐
# 查看 iptables 规则iptables -L -t nat | grep KUBE-SERVICES3.3 Container Runtime
# 支持的容器运行时# 1. containerd (推荐)# 2. CRI-O# 3. Docker (deprecated)
# CRI: Container Runtime Interface# kubelet 通过 CRI 与容器运行时通信四、Pod 生命周期
4.1 Pod 状态
| 状态 | 说明 |
|---|---|
| Pending | Pod 已被 Kubernetes 接受,等待调度 |
| Running | Pod 已绑定到 Node,容器正在运行 |
| Succeeded | 所有容器正常退出 |
| Failed | 容器异常退出 |
| Unknown | 无法获取 Pod 状态 |
4.2 Pod 详细配置
apiVersion: v1kind: Podmetadata: name: nginx-podspec: # 容器配置 containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80 protocol: TCP
# 资源请求和限制 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
# 环境变量 env: - name: DB_HOST value: "db-service" - name: DB_PASSWORD valueFrom: secretKeyRef: name: db-secrets key: password
# 探针配置 livenessProbe: httpGet: path: /healthz port: 80 initialDelaySeconds: 10 periodSeconds: 5
readinessProbe: httpGet: path: /ready port: 80 initialDelaySeconds: 5 periodSeconds: 3
startupProbe: httpGet: path: /healthz port: 80 failureThreshold: 30 periodSeconds: 104.3 探针类型
| 探针 | 用途 | 失败动作 |
|---|---|---|
| livenessProbe | 判断容器是否存活 | 重启容器 |
| readinessProbe | 判断容器是否就绪 | 停止发送流量 |
| startupProbe | 判断容器是否启动完成 | 超时则重启 |
# 探针配置示例livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 10 # 启动后多久开始 periodSeconds: 5 # 检查间隔 timeoutSeconds: 3 # 超时时间 successThreshold: 1 # 连续成功次数 failureThreshold: 3 # 连续失败次数
# TCP 检查readinessProbe: tcpSocket: port: 5432
# 执行命令startupProbe: exec: command: - cat - /tmp/healthy五、Deployment 管理
5.1 基本配置
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: replicas: 3
# 选择器 selector: matchLabels: app: nginx
# 更新策略 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 # 最多超出副本数 maxUnavailable: 0 # 最少可用副本数
# Pod 模板 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 805.2 常用操作
# 更新镜像kubectl set image deployment/nginx-deployment nginx=nginx:1.26
# 查看滚动更新状态kubectl rollout status deployment/nginx-deployment
# 回滚kubectl rollout undo deployment/nginx-deploymentkubectl rollout undo deployment/nginx-deployment --to-revision=2
# 暂停/恢复kubectl rollout pause deployment/nginx-deploymentkubectl rollout resume deployment/nginx-deployment
# 查看历史版本kubectl rollout history deployment/nginx-deployment5.3 HPA 水平自动伸缩
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: nginx-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deployment minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 80# 手动伸缩kubectl scale deployment/nginx-deployment --replicas=5
# 查看 HPAkubectl get hpakubectl describe hpa nginx-hpa六、Workload 类型对比
| 类型 | 用途 | 特点 |
|---|---|---|
| Deployment | 无状态应用 | 滚动更新,回滚 |
| ReplicaSet | Deployment 的底层 | 很少直接使用 |
| StatefulSet | 有状态应用 | 稳定的网络标识,持久存储 |
| DaemonSet | 守护进程 | 每个 Node 运行一个 |
| Job | 一次性任务 | 并行执行 |
| CronJob | 定时任务 | 定时调度 |
支持与分享
如果这篇文章对你有帮助,欢迎支持作者或分享给更多人
Kubernetes 核心架构与组件
https://blog.souloss.com/posts/interview/kubernetes-core-architecture/ 部分信息可能已经过时
相关文章 智能推荐
1
Kubernetes 网络与存储
面试 Kubernetes 网络模型、Service 类型、Ingress、NetworkPolicy、存储卷与持久化存储。
2
Kubernetes 调度与资源管理
面试 Kubernetes 调度机制——节点选择、亲和性、反亲和性、污点与容忍、资源配额、LimitRange。
3
面试题库
面试 系统整理的面试题库,涵盖计算机基础、编程语言(Go/Python)、数据库(MySQL/Redis)、云原生(Kubernetes/容器)、系统设计与云安全等核心知识点。
4
系统设计面试题
面试 面试中常见的系统设计题目——短 URL 设计、Feed 流设计、延迟任务队列、秒杀系统等高频题型的分析与解答。
5
容器化面试题
面试 面试中常见的容器化技术题目——Docker 命名空间、cgroup 隔离、Kubernetes 调度机制等知识点整理。






