Kubernetes架构完全解析:核心概念与组件详解
Kubernetes架构完全解析
前言
Kubernetes(简称K8s)是Google开源的容器编排平台,已成为容器编排的事实标准。本教程将带你从零开始,系统掌握Kubernetes的核心概念和实战技能。
Kubernetes是什么?
Kubernetes是一个用于自动部署、扩缩和管理容器化应用程序的开源系统。它提供了:
- 服务发现与负载均衡:自动分配IP地址和DNS名称
- 自动装箱:根据资源需求自动调度容器
- 存储编排:自动挂载存储系统
- 自动恢复:重启失败的容器
- 水平扩缩:根据CPU使用率自动调整Pod数量
- 密钥与配置管理:安全存储敏感信息
Kubernetes架构核心组件
控制平面(Control Plane)
负责整个集群的管理决策和调度:
┌─────────────────────────────────────────────────────────────┐
│ Control Plane │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐│
│ │ API Server│ │ Scheduler │ │ Controller Manager ││
│ │ (6443) │ │ (10259) │ │ (10252) ││
│ └─────────────┘ └─────────────┘ └─────────────────────────┘│
│ ┌─────────────────────────────────────────────────────────┐│
│ │ etcd (2379-2380) ││
│ │ 集群状态存储、高可用 ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
核心组件详解:
| 组件 | 端口 | 作用 |
|---|---|---|
| API Server | 6443 | RESTful API入口,集群大脑 |
| Scheduler | 10259 | 资源调度,选择最优节点 |
| Controller Manager | 10252 | 维护集群状态,处理控制器逻辑 |
| etcd | 2379-2380 | 分布式键值存储,保存所有集群数据 |
工作节点(Worker Node)
运行实际工作负载的计算资源:
┌─────────────────────────────────────────────────────────────┐
│ Worker Node │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Kubelet (10250) ││
│ │ 负责与API Server通信,管理节点上的Pod ││
│ └─────────────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Kube-Proxy (10249) ││
│ │ 维护网络规则,实现服务发现和负载均衡 ││
│ └─────────────────────────────────────────────────────────┘│
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Container Runtime (Docker/Containerd) ││
│ │ 负责运行容器 ││
│ └─────────────────────────────────────────────────────────┘│
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ││
│ │ Pod1 │ │ Pod2 │ │ Pod3 │ │ Pod4 │ │ Pod5 │ ││
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ ││
└─────────────────────────────────────────────────────────────┘
核心概念图解
┌─────────────────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Node 1 │ │ Node 2 │ │ Node 3 │ │
│ │ ┌─────────┐ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │
│ │ │ Pod │ │ │ │ Pod │ │ │ │ Pod │ │ │
│ │ │ ─────── │ │ │ │ ─────── │ │ │ │ ─────── │ │ │
│ │ │ nginx │◄─┼─────┼─►│ nginx │◄─┼─────┼─►│ nginx │ │ │
│ │ │ │ │ │ │ │ │ │ │ │ │ │
│ │ │ app:v1 │ │ │ │ app:v1 │ │ │ │ app:v1 │ │ │
│ │ └─────────┘ │ │ └─────────┘ │ │ └─────────┘ │ │
│ └───────────────┘ └───────────────┘ └───────────────┘ │
│ │ │ │ │
│ └───────────────────┼────────────────────┘ │
│ │ │
│ ┌─────────┴─────────┐ │
│ │ Service │ │
│ │ (Load Balancer) │ │
│ │ 10.96.0.1:80 │ │
│ └───────────────────┘ │
│ │ │
└──────────────────────────────┼──────────────────────────────────┘
│
┌──────────┴──────────┐
│ Ingress │
│ /app/* -> SVC │
└─────────────────────┘
│
┌──────────┴──────────┐
│ User │
└────────────────────┘
核心概念详解
Pod
Pod是Kubernetes中最小的可部署计算单元,通常包含:
- 一个或多个容器:共享网络和存储
- 共享网络命名空间:同一Pod内容器通过localhost通信
- 共享存储卷:容器间数据共享
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
tier: frontend
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
Deployment
Deployment用于管理无状态应用的部署和更新:
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
ports:
- containerPort: 80
Service
Service为一组Pod提供稳定的网络访问:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: ClusterIP # ClusterIP, NodePort, LoadBalancer, ExternalName
ports:
- port: 80
targetPort: 80
protocol: TCP
ConfigMap与Secret
用于管理配置和敏感信息:
# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_URL: mysql://db:3306
LOG_LEVEL: info
---
# Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
# base64编码
DB_PASSWORD: cGFzc3dvcmQxMjM= # echo -n "password123" | base64
总结
理解Kubernetes架构和核心概念是掌握容器编排的基础。下一章我们将学习如何安装和配置Kubernetes集群。
核心要点:
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







