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 知名用户 #
| 公司 | 使用场景 |
|---|---|
| 内部大规模服务 | |
| 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