云原生入门:Kubernetes 核心概念图解

6 阅读4分钟

前言

云原生是后端开发的趋势,Kubernetes(K8s)是云原生的核心。

这篇文章用图解的方式,带你快速理解 K8s 的核心概念,不需要会操作,先理解原理。


一、什么是云原生?

1.1 传统部署 vs 云原生

传统部署

服务器 → 装操作系统 → 装 JDK → 部署应用 → 配置 Nginx
问题:
- 环境不一致
- 扩容困难
- 运维成本高

云原生

应用打包成容器 → 编排管理 → 自动扩缩容
特点:
- 容器化
- 微服务化
- DevOps
- 弹性伸缩

1.2 云原生技术栈

┌─────────────────────────────────────┐
│           应用层(微服务)            │
├─────────────────────────────────────┤
│           容器层(Docker)            │
├─────────────────────────────────────┤
│        编排层(Kubernetes)           │
├─────────────────────────────────────┤
│           基础设施层(云)             │
└─────────────────────────────────────┘

二、Kubernetes 核心概念

2.1 Pod(最小单元)

Pod 是什么?

Pod = 1个或多个容器 + 共享存储 + 网络命名空间

类比:
Pod ≈ 豆荚(把相关容器打包在一起)

示例:
┌─────────────────────────────────┐
│           Pod                   │
│  ┌─────────┐    ┌───────────┐   │
│  │  App    │    │ Sidecar   │   │
│  │Container│    │Container  │   │
│  └─────────┘    └───────────┘   │
│       ↓               ↓         │
│    共享网络      共享存储        │
└─────────────────────────────────┘

为什么需要 Pod

  • 紧密耦合的容器放在一起
  • 共享网络(localhost 互通)
  • 共享存储(Volume)

2.2 Deployment(部署)

Deployment 是什么?

Deployment 管理一组 Pod,保证期望的副本数。

┌─────────────────────────────────┐
        Deployment               
   replicas: 3                   
├─────────────────────────────────┤
   ┌─────┐ ┌─────┐ ┌─────┐      
    Pod   Pod   Pod       
   └─────┘ └─────┘ └─────┘      
└─────────────────────────────────┘

如果某个 Pod 挂了:
Deployment 会自动创建新的 Pod,保持 3 个副本

Deployment 的核心功能

  • 副本管理:保持指定数量的 Pod
  • 滚动更新:平滑升级应用
  • 回滚:出问题快速回退

2.3 Service(服务)

Service 是什么?

Service 为一组 Pod 提供统一的访问入口。

┌─────────────────────────────────┐
│         Service                 │
│     192.168.1.100:80            │
├─────────────────────────────────┤
│        ↓ 负载均衡 ↓              │
│   ┌─────┐ ┌─────┐ ┌─────┐      │
│   │ Pod │ │ Pod │ │ Pod │      │
│   │:8080│ │:8080│ │:8080│      │
│   └─────┘ └─────┘ └─────┘      │
└─────────────────────────────────┘

Service 的类型

类型说明使用场景
ClusterIP集群内部访问内部服务
NodePort节点 IP + 端口外部访问测试
LoadBalancer云厂商负载均衡生产环境
IngressHTTP 路由多域名路由

2.4 ConfigMap & Secret(配置管理)

ConfigMap:存储配置信息(非敏感)
Secret:存储敏感信息(密码、密钥)

┌─────────────┐    ┌─────────────┐
│ ConfigMap   │    │   Secret    │
├─────────────┤    ├─────────────┤
│ DB_HOST     │    │ DB_PASSWORD │
│ DB_PORT     │    │ API_KEY     │
│ LOG_LEVEL   │    │ TLS_CERT    │
└─────────────┘    └─────────────┘
        ↓                  ↓
      Pod              Pod
(以环境变量或         (加密存储)
 配置文件注入)

2.5 Volume(存储)

Pod 中的容器重启数据会丢失,Volume 用于持久化存储。

┌─────────────────────────────────┐
│           Pod                   │
│  ┌─────────┐  ┌───────────┐     │
│  │Container│  │  Volume   │←────┼──→ 外部存储
│  │  (App)  │  │  (数据)   │     │    (NFS/云盘)
│  └─────────┘  └───────────┘     │
└─────────────────────────────────┘

即使 Pod 重建,数据依然在 Volume 中

2.6 Namespace(命名空间)

Namespace 用于隔离不同环境/团队/项目。

┌─────────────────────────────────────────┐
│             Kubernetes 集群              │
├─────────────────────────────────────────┤
│  Namespace: dev    │  Namespace: prod   │
│  ┌──────────────┐  │  ┌──────────────┐  │
│  │ Deployment   │  │  │ Deployment   │  │
│  │ Service      │  │  │ Service      │  │
│  │ ConfigMap    │  │  │ ConfigMap    │  │
│  └──────────────┘  │  └──────────────┘  │
│                    │                    │
│  开发环境          │  生产环境           │
│  互相隔离          │  互相隔离           │
└─────────────────────────────────────────┘

三、K8s 架构图解

3.1 整体架构

┌─────────────────────────────────────────────────────────┐
│                     控制平面(Master)                    │
├─────────────────────────────────────────────────────────┤
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │ API      │  │ Scheduler│  │Controller│              │
│  │ Server   │  │          │  │ Manager  │              │
│  └────┬─────┘  └──────────┘  └──────────┘              │
│       │                                                │
│  ┌────┴─────────────────────────────────────────────┐  │
│  │                    etcd                          │  │
│  │              (集群状态存储)                       │  │
│  └──────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│                     工作节点(Node)                      │
├─────────────────────────────────────────────────────────┤
│  ┌──────────────────┐    ┌──────────────────┐          │
│  │     Node 1       │    │     Node 2       │          │
│  ├──────────────────┤    ├──────────────────┤          │
│  │ Kubelet          │    │ Kubelet          │          │
│  │ Kube-Proxy       │    │ Kube-Proxy       │          │
│  │ Container Runtime│    │ Container Runtime│          │
│  │ ┌─────────────┐  │    │ ┌─────────────┐  │          │
│  │ │ Pod 1       │  │    │ │ Pod 3       │  │          │
│  │ │ Pod 2       │  │    │ │ Pod 4       │  │          │
│  │ └─────────────┘  │    │ └─────────────┘  │          │
│  └──────────────────┘    └──────────────────┘          │
└─────────────────────────────────────────────────────────┘

3.2 组件职责

组件职责
API Server所有请求的入口,验证和转发
Scheduler为新 Pod 选择运行的节点
Controller Manager维护集群状态(副本数、节点状态等)
etcd分布式键值存储,保存集群状态
Kubelet节点代理,管理 Pod 生命周期
Kube-Proxy网络代理,实现 Service 功能

四、Pod 生命周期

创建 Pod → 调度到 Node → 拉取镜像 → 启动容器 → 运行中
                                              ↓
                                         健康检查
                                              ↓
                              失败 ← 不通过    通过 → 正常运行
                               ↓
                          重启策略
                   ┌──────────┼──────────┐
                  Always   OnFailure   Never
                   ↓          ↓          ↓
                总是重启   失败时重启   不重启

五、K8s 工作流程

部署应用的完整流程

1. 编写 YAML 配置
   deployment.yaml
   service.yaml
   configmap.yaml

2. 提交到 API Server
   kubectl apply -f deployment.yaml

3. API Server 写入 etcd

4. Controller Manager 发现变化
   - 创建 ReplicaSet
   - 创建 Pod

5. Scheduler 调度 Pod
   - 选择最合适的 Node
   - 写入 etcd

6. Kubelet 在 Node 上执行
   - 拉取镜像
   - 创建容器

7. Kube-Proxy 配置网络
   - 配置 iptables
   - 实现 Service 负载均衡

六、学习路径建议

第一阶段:理解概念(1周)

  • 理解 Pod、Deployment、Service 概念
  • 了解 K8s 架构
  • 不用会操作,先理解原理

第二阶段:本地练习(1-2周)

  • 安装 Minikube 或 Kind
  • 部署简单应用
  • 熟悉 kubectl 命令

第三阶段:生产实践(1-2月)

  • 学习 Helm 包管理
  • 了解监控(Prometheus)
  • 学习 CI/CD 集成

七、推荐资源


总结

K8s 核心概念:

Pod:最小部署单元 ✅ Deployment:管理 Pod 副本 ✅ Service:服务发现和负载均衡 ✅ ConfigMap/Secret:配置管理 ✅ Volume:持久化存储 ✅ Namespace:资源隔离

建议:先理解概念,再动手实践,最后深入原理。


💡 互动:你对 K8s 有什么疑问?评论区聊聊!