Kubernetes简介 #

一、什么是Kubernetes #

Kubernetes(简称K8s,因为K和s之间有8个字母)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它由Google开发,于2014年开源,并捐赠给云原生计算基金会(CNCF)管理。

1.1 Kubernetes的起源 #

Kubernetes的设计灵感来源于Google内部使用了15年的集群管理系统Borg。Google每周启动数十亿个容器,Borg系统为这些容器提供了强大的编排能力。Kubernetes将Borg的最佳实践和设计理念带到了开源社区。

text
发展时间线
    │
    ├── 2014年 ── Google开源Kubernetes
    │
    ├── 2015年 ── Kubernetes 1.0发布,捐赠给CNCF
    │
    ├── 2016年 ── 成为CNCF第一个毕业项目
    │
    ├── 2018年 ─── Kubernetes成为容器编排标准
    │
    └── 至今 ─── 全球最流行的容器编排平台

1.2 为什么需要Kubernetes #

在容器化时代,企业面临以下挑战:

挑战 说明
容器管理 大量容器需要统一管理
服务发现 容器动态变化,如何相互发现
负载均衡 如何将流量分发到多个容器
存储管理 容器销毁后数据如何持久化
滚动更新 如何实现零停机更新
故障恢复 容器崩溃后如何自动恢复
弹性伸缩 如何根据负载自动扩缩容

Kubernetes正是为解决这些问题而生。

二、Kubernetes核心功能 #

2.1 服务发现与负载均衡 #

yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

Kubernetes自动为容器分配IP地址,并提供DNS名称,使容器之间可以相互发现和通信。

2.2 自动化部署和回滚 #

yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    spec:
      containers:
      - name: my-app
        image: my-app:v2

支持声明式部署,自动执行滚动更新,出现问题时自动回滚。

2.3 自动装箱 #

Kubernetes根据资源需求和约束,自动将容器调度到合适的节点:

text
资源调度流程
    │
    ├── 1. 用户提交Pod
    │
    ├── 2. 调度器评估节点资源
    │
    ├── 3. 匹配节点标签和约束
    │
    ├── 4. 选择最优节点
    │
    └── 5. 绑定Pod到节点

2.4 自我修复 #

故障类型 自动修复行为
容器崩溃 自动重启容器
节点故障 重新调度Pod到其他节点
健康检查失败 自动替换不健康的容器
副本数不足 自动创建新的Pod

2.5 密钥与配置管理 #

yaml
apiVersion: v1
kind: Secret
metadata:
  name: db-secret
type: Opaque
data:
  username: YWRtaW4=
  password: cGFzc3dvcmQ=

安全地存储和管理敏感信息,如密码、OAuth令牌、SSH密钥等。

2.6 存储编排 #

yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: standard
  resources:
    requests:
      storage: 10Gi

自动挂载各种存储系统,如本地存储、云存储、网络存储等。

三、Kubernetes核心概念 #

3.1 控制平面(Control Plane) #

text
Kubernetes控制平面
    │
    ├── kube-apiserver ─── API入口,所有操作通过API
    │
    ├── etcd ─── 分布式键值存储,保存集群状态
    │
    ├── kube-scheduler ─── 调度Pod到合适的节点
    │
    ├── kube-controller-manager ─── 运行控制器
    │
    └── cloud-controller-manager ─── 云平台控制器

3.2 节点组件(Node Components) #

组件 功能
kubelet 与控制平面通信,管理本节点容器
kube-proxy 维护网络规则,实现Service
容器运行时 运行容器(containerd、CRI-O等)

3.3 核心资源对象 #

text
资源对象层次
    │
    ├── 工作负载
    │   ├── Pod ─── 最小部署单元
    │   ├── Deployment ─── 无状态应用
    │   ├── StatefulSet ─── 有状态应用
    │   ├── DaemonSet ─── 守护进程
    │   └── Job/CronJob ─── 批处理任务
    │
    ├── 服务发现
    │   ├── Service ─── 服务暴露
    │   └── Ingress ─── HTTP路由
    │
    ├── 配置存储
    │   ├── ConfigMap ─── 配置数据
    │   ├── Secret ─── 敏感数据
    │   ├── PV/PVC ─── 持久存储
    │   └── StorageClass ─── 存储类
    │
    └── 安全策略
        ├── ServiceAccount ─── 服务账户
        ├── RBAC ─── 权限控制
        └── NetworkPolicy ─── 网络策略

四、Kubernetes与其他工具对比 #

4.1 与Docker Swarm对比 #

特性 Kubernetes Docker Swarm
复杂度 较高 简单
学习曲线 陡峭 平缓
功能丰富度 非常丰富 基础功能
生态系统 庞大 较小
企业支持 广泛 有限
自动扩缩容 原生支持 需要额外配置
存储管理 强大 基础
适用场景 大型生产环境 小型集群

4.2 与Docker Compose对比 #

特性 Kubernetes Docker Compose
部署规模 多节点集群 单机部署
高可用性 支持 不支持
自动调度 支持 不支持
服务发现 内置DNS 链接方式
负载均衡 内置 需手动配置
滚动更新 支持 有限支持
适用场景 生产环境 开发测试

4.3 与Mesos对比 #

特性 Kubernetes Mesos
设计目标 容器编排 通用资源管理
资源类型 容器 多种工作负载
生态系统 云原生 大数据生态
社区活跃度 非常活跃 相对较低
学习曲线 中等 较陡

五、Kubernetes应用场景 #

5.1 适合的场景 #

场景 说明
微服务架构 服务发现、负载均衡、配置管理
CI/CD流水线 自动化部署、滚动更新、回滚
大数据处理 批处理任务、资源调度
机器学习 GPU调度、分布式训练
混合云部署 跨云平台统一管理
边缘计算 轻量级K3s部署

5.2 知名用户 #

公司 使用场景
Google 内部大规模服务
GitHub 代码托管平台
Spotify 音乐流媒体
Airbnb 房屋租赁平台
Uber 打车服务
Pokemon Go 游戏服务

六、Kubernetes版本与发布 #

6.1 版本命名规则 #

Kubernetes使用语义化版本号:主版本.次版本.补丁版本

text
版本示例:1.28.3
    │     │  │
    │     │  └── 补丁版本(Bug修复)
    │     └───── 次版本(新功能)
    └─────────── 主版本(重大变更)

6.2 发布周期 #

阶段 周期
新版本发布 约每3个月
次版本维护 约1年
补丁发布 根据需要

6.3 版本支持策略 #

text
版本生命周期
    │
    ├── 开发版本 ─── 持续开发中
    │
    ├── 稳定版本 ─── 推荐生产使用
    │
    └── 维护版本 ─── 仅安全更新

七、云原生生态 #

7.1 CNCF项目 #

Kubernetes是CNCF的核心项目,CNCF还管理众多云原生项目:

类别 项目
容器运行时 containerd、CRI-O
服务网格 Istio、Linkerd、Envoy
监控 Prometheus、Grafana
日志 Fluentd、Loki
存储 Rook、Ceph
CI/CD Argo、Tekton
安全 Falco、OPA

7.2 云原生技术栈 #

text
云原生技术栈
    │
    ├── 应用层
    │   └── 微服务、Serverless
    │
    ├── 编排层
    │   └── Kubernetes
    │
    ├── 容器层
    │   └── Docker、containerd
    │
    ├── 基础设施层
    │   └── 云平台、物理机
    │
    └── 工具链
        └── Helm、Istio、Prometheus

八、学习路线建议 #

8.1 初级阶段 #

  • 理解容器和Docker基础
  • 学习Kubernetes核心概念
  • 掌握kubectl命令行工具
  • 部署第一个应用

8.2 中级阶段 #

  • 深入理解Pod、Deployment
  • 掌握Service和Ingress
  • 学习存储和配置管理
  • 了解网络和安全策略

8.3 高级阶段 #

  • 学习Helm包管理
  • 理解Operator模式
  • 掌握集群运维
  • 参与社区贡献

九、总结 #

9.1 核心要点 #

要点 说明
定义 开源容器编排平台
起源 Google Borg系统
核心功能 自动化部署、扩展、管理容器
适用场景 微服务、云原生应用
生态系统 CNCF核心项目

9.2 下一步 #

现在你已经了解了Kubernetes的基本概念,接下来让我们学习 环境搭建,开始你的Kubernetes实践之旅!

最后更新:2026-03-28