
1.1 Kubernetes 系统的需求
1.1.1 从单体应用到微服务
如果单体应用的任何一个部分不能扩展, 整个应用就不能扩展.
- 关系型数据库
将应用拆解为多个微服务

微服务的扩容
当单体应用因为其中一部分无法扩容而整体被限制扩容时, 可以把应用拆分成多个微服务, 将那些能进行扩容的组件进行水平扩展 (增加实例), 不能进行扩容的组件进行垂直扩展 (增加机器配置).

部署微服务
缺点:
- 配置变得复杂
- 调试代码和定位问题变得困难
环境需求的差异

1.1.2 为应用程序提供一个一致的环境
运维和开发对系统管理的理解程度时不同的.
1.1.3 迈向持续交付: DevOps 和无运维
1.2 介绍容器技术
容器技术分支:
- Docker
- rkt
1.2.1 什么是容器
用 Linux 容器技术隔离组件
一个容器里运行的进程实际上运行在宿主机的操作系统上, 就像所有其他进程一样.
比较虚拟机和容器


容器实现隔离机制介绍
实现隔离的两个机制:
- Linux 命名空间, 每个进程只看到它自己的系统视图 (文件, 进程, 网络接口, 主机名)
- 逻辑隔离
- Linux 控制组 (cgroups), 限制进行能使用的资源量 (CPU, 内存, 网络带宽)
- 物理隔离
用 Linux 命名空间隔离进程
一个进程不单单只属于某一个命名空间 (系统视图), 而属于每个类型的一个命名空间:

限制进程的可用资源
限制算法
1.2.2 Docker 容器平台介绍

Linux 内核提供了隔离功能, Docker 容器实现了可移植.
Docker 的概念

目前的理解
- 镜像: 被打包的普通文件
- 容器: 被隔离的资源
构建, 分发和运行 Docker 镜像

对比虚拟机与 Docker 容器
具体比较:

容器之间如何共享资源, 或者说如何自由隔离不同资源?
镜像层
- 减少网络传输
- 减少存储占用
容器镜像可移植性的限制
特殊情况:
- 容器依赖特定 Linux 内核版本
- 在 x86 架构下编译的不能在 ARM 上
1.2.3 rkt - 一个 Docker 的替代方案

1.3 Kubernetes 介绍
1.3.1 初衷
在保守 Borg 和 Omega 秘密数十年之后, 2014年, 谷歌开放了 Kubernetes, 一个基于 Borg, Omega 及其他谷歌内部系统实践的开源系统.
1.3.2 深入浅出地了解 Kubernetes
Kubernetes 地核心功能
简单的 Kubernetes 系统图:

帮助开发者聚焦核心应用功能
Kubernetes 可以被看成一个集群的操作系统.
- Kubernetes 提供服务发现, 扩容, 负载均衡, 自恢复, 领导者选举
帮助运维团队获取更高的资源利用率
1.3.3 Kubernetes 集群架构
在硬件级别, 有两种类型的节点:
- 主节点, 承载着 Kubernetes 控制和管理整个集群系统的控制面板
- 工作节点, 运行用户实际部署的应用

控制面板
包含多个组件:

工作节点


1.3.4 在 Kubernetes 中运行应用
描述信息怎样成为一个运行的容器
- 开发者提交镜像并编写应用描述符
- API 服务处理应用描述符
- Kubelets 告知 Docker 从镜像仓库中拉取容器镜像并运行容器

保持容器运行
Kubernetes 保证始终运行指定数量的容器.
扩展副本数量
Kubernetes 可以根据指标来决定容器副本数.
命中移动目标
Kubernetes 可以提供静态 IP 来保证应用容器在迁移时应用服务可用.
- kube-proxy
1.3.5 使用 Kubernetes 的好处
简化应用程序部署
- 开发人员可直接部署
- 可以指定容器运行在具有 SSD 的节点上
更好地利用硬件
- 应用程序资源需求描述, 每个节点可用资源
- 应用可在集群节点中自由迁移
健康检查和自修复
- 节点出现故障时, 自动重新调度
- 不用在凌晨3点的时候, 人工处理故障
自动扩容
自动括, 缩容.
简化应用部署
- 应用程序开发和生产都运行在同一个环境, 利于定位 bug
- 开发人员不需要实现一些特性
- 应用发现服务和对端
- 选举
- 自动回滚
