image.png

1.1 Kubernetes 系统的需求

1.1.1 从单体应用到微服务

如果单体应用的任何一个部分不能扩展, 整个应用就不能扩展.

  • 关系型数据库

将应用拆解为多个微服务

image.png

微服务的扩容

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

image.png

部署微服务

缺点:

  • 配置变得复杂
  • 调试代码和定位问题变得困难

环境需求的差异

image.png

1.1.2 为应用程序提供一个一致的环境

运维和开发对系统管理的理解程度时不同的.

1.1.3 迈向持续交付: DevOps 和无运维

1.2 介绍容器技术

容器技术分支:

  • Docker
  • rkt

1.2.1 什么是容器

用 Linux 容器技术隔离组件

一个容器里运行的进程实际上运行在宿主机的操作系统上, 就像所有其他进程一样.

比较虚拟机和容器

image.png

image.png

容器实现隔离机制介绍

实现隔离的两个机制:

  • Linux 命名空间, 每个进程只看到它自己的系统视图 (文件, 进程, 网络接口, 主机名)
    • 逻辑隔离
  • Linux 控制组 (cgroups), 限制进行能使用的资源量 (CPU, 内存, 网络带宽)
    • 物理隔离

用 Linux 命名空间隔离进程

一个进程不单单只属于某一个命名空间 (系统视图), 而属于每个类型的一个命名空间:

image.png

限制进程的可用资源

限制算法

1.2.2 Docker 容器平台介绍

image.png

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

Docker 的概念

image.png

目前的理解

  • 镜像: 被打包的普通文件
  • 容器: 被隔离的资源

构建, 分发和运行 Docker 镜像

image.png

对比虚拟机与 Docker 容器

具体比较:

image.png

容器之间如何共享资源, 或者说如何自由隔离不同资源?

镜像层

  • 减少网络传输
  • 减少存储占用

容器镜像可移植性的限制

特殊情况:

  • 容器依赖特定 Linux 内核版本
  • 在 x86 架构下编译的不能在 ARM 上

1.2.3 rkt - 一个 Docker 的替代方案

image.png

1.3 Kubernetes 介绍

1.3.1 初衷

在保守 Borg 和 Omega 秘密数十年之后, 2014年, 谷歌开放了 Kubernetes, 一个基于 Borg, Omega 及其他谷歌内部系统实践的开源系统.

1.3.2 深入浅出地了解 Kubernetes

Kubernetes 地核心功能

简单的 Kubernetes 系统图:

image.png

帮助开发者聚焦核心应用功能

Kubernetes 可以被看成一个集群的操作系统.

  • Kubernetes 提供服务发现, 扩容, 负载均衡, 自恢复, 领导者选举

帮助运维团队获取更高的资源利用率

1.3.3 Kubernetes 集群架构

在硬件级别, 有两种类型的节点:

  • 主节点, 承载着 Kubernetes 控制和管理整个集群系统的控制面板
  • 工作节点, 运行用户实际部署的应用

image.png

控制面板

包含多个组件:

image.png

工作节点

image.png
image.png

1.3.4 在 Kubernetes 中运行应用

描述信息怎样成为一个运行的容器

  1. 开发者提交镜像并编写应用描述符
  2. API 服务处理应用描述符
  3. Kubelets 告知 Docker 从镜像仓库中拉取容器镜像并运行容器

image.png

保持容器运行

Kubernetes 保证始终运行指定数量的容器.

扩展副本数量

Kubernetes 可以根据指标来决定容器副本数.

命中移动目标

Kubernetes 可以提供静态 IP 来保证应用容器在迁移时应用服务可用.

  • kube-proxy

1.3.5 使用 Kubernetes 的好处

简化应用程序部署

  • 开发人员可直接部署
  • 可以指定容器运行在具有 SSD 的节点上

更好地利用硬件

  • 应用程序资源需求描述, 每个节点可用资源
  • 应用可在集群节点中自由迁移

健康检查和自修复

  • 节点出现故障时, 自动重新调度
  • 不用在凌晨3点的时候, 人工处理故障

自动扩容

自动括, 缩容.

简化应用部署

  • 应用程序开发和生产都运行在同一个环境, 利于定位 bug
  • 开发人员不需要实现一些特性
    • 应用发现服务和对端
    • 选举
  • 自动回滚

1.4 本章小结