Introducing Kubernetes
- Kubernetes 是一种软件系统,用于自动部署和管理由容器中运行的计算机进程组成的复杂、大规模应用程序系统。
- Kubernetes 为用户和应用程序提供了底层硬件上的抽象层。
- Kubernetes 使用声明式模型来定义应用程序。描述构成应用程序的组件,Kubernetes 将此描述转换为正在运行的应用程序。
- Kubernetes 提供了微服务的自动化部署。
- Kubernetes 将分布式应用程序的组件调度到底层计算机集群中的单个计算机上,并充当应用程序和集群之间的接口。
机制
- 服务发现。允许应用程序查找其他应用程序并使用它们提供的服务的机制。
- 水平扩展。允许应用程序自动扩展,以适应负载。
- 负载均衡。在所有应用程序副本之间分配负载。
- 自我修复。过自动重启失败的应用程序并在节点发生故障后将其移动到正常的节点来保持系统正常。
- 领导者选举。用于决定应用程序的哪个实例应处于活动状态,而其他实例应保持空闲状态,但在活动实例失败时准备接管。
好处
- 应用程序的自助部署。Kubernetes 会根据应用程序的资源需求和每个节点上的可用资源来选择运行应用程序的最佳节点。
- 通过提高基础架构利用率降低成本。通过在同一台机器上组合不同的应用程序,Kubernetes 提高了硬件基础设施的利用率。
- 自动调整以适应不断变化的负载。可以监控每个应用程序消耗的资源和其他指标,并调整每个应用程序的运行实例数量,以应对增加的负载或资源使用。
- 保持应用程序平稳运行。应用程序崩溃,Kubernetes 将自动重新启动。
- 简化应用程序开发。
集群架构
- 一组主节点,用于托管控制平面组件,这些组件是系统的大脑,因为它们控制整个集群。
- Kubernetes API Server 公开了 RESTful Kubernetes API。
- etcd 分布式数据存储会保留您通过 API 创建的对象。
- Scheduler 调度程序决定每个应用程序实例应运行哪个工作节点。
- Controller 控制器。
- 一组工作器节点,构成工作负载平面,这是运行工作负载(或应用程序)的位置。
- Kubelet,一个与 API 服务器通信并管理在其节点上运行的应用程序的代理。它通过 API 报告这些应用程序和节点的状态。
- Container Runtime,容器运行时,可以是 Docker 或任何其他与 Kubernetes 兼容的运行时。它按照 Kubelet 的指示在容器中运行您的应用程序。
- Kubernetes Service Proxy (Kube Proxy) 对应用程序之间的网络流量进行负载均衡。
运行程序的机制
- 定义应用程序
- Kubernetes 中的所有内容都由一个对象表示。
- 应用程序由这些对象中的几种类型组成
- 一种类型表示整个应用程序部署。
- 另一种类型表示应用程序的运行实例。
- 另一种表示一组这些实例提供的服务,并允许通过单个 IP 地址访问它们,还有许多其他类型。
- 过程
- 将应用程序清单提交到 Kubernetes API。API 服务器将清单中定义的对象写入 etcd。
- 控制器注意到新创建的对象并创建多个新对象 - 每个应用程序实例一个。
- 调度器为每个实例分配一个节点。
- Kubelet 注意到一个实例被分配给 Kubelet 的节点。它通过容器运行时运行应用程序实例。
- Kube 代理注意到应用程序实例已准备好接受来自客户端的连接,并为它们配置负载均衡器。
- Kubelet 和控制器监控系统并保持应用程序运行。
