#云平台# #云计算# #Docker# #k8s# #Kubernetes#

1.1 概述

Kubernetes是一个开源的Docker集群管理应用。主要用于管理云平台中多个主机上的Docker容器化的应用。Kubernetes的目标是让部署容器化的应用简单并且高效,并提供了应用部署,规划,更新,维护相应的工具和机制。Kubernetes着重于不间断的服务状态(比如web服务器或者缓存服务器)和原生云平台应用(Nosql)。

遵循了kubernetes的设计思想,传统系统架构中与业务无关的底层代码或功能模块(如负载均衡的选型和部署实施问题)将可以省略,同时包括完善的服务治理框架、服务监控和故障处理。使用kubernetes,我们可以节约不少于30%的开发成本,将精力更加集中于业务本身,而且由于kubernetes提供了强大的自动化机制,所以系统后期的运维难度和运维成本大幅降低。

特征:

首先,使用 Kubernetes 就是在全面拥抱微服务架构。微服务架构的核心就是将一个巨大的单体应用分解为很多小的互相连接的微服务,一个微服务背后可能有多个实例副本在支撑,副本的数量可能会随着系统的负荷变化而进行调整,内嵌的负载均衡器在 k8s 平台中有多个实例副本在支撑,副本的数量可能会随着系统的负荷变化而进行调整,内嵌的负载均衡器 k8s 平台中发挥了重要的作用。微服务架构使得每个服务都可以由专门的开发团队来开发,开发者可以自由选择开发技术,这对于大规模团队来说很有价值。另外,每个微服务独立开发、升级、扩展,使得系统具备很高的稳定性和快速迭代进化能力。

其次,Kubernetes 系统架构具备了超强的横向扩容能力。对于互联网公司来说,用户规模就等价于资产,谁拥有更多的用户,谁就能在竞争中胜出,因此超强的横向扩容能力是互联网业务系统的关键指标之一。不用修改代码,一个 Kubernetes 集群即可从只包含几个Node 的小集群平滑扩展到拥有成百上千 Noder 大规模集群,利用 Kubernetes 提供的工具,甚至可以在线完成集群的扩容。只要微服务设计的得好,结合硬件或者公有云资源的线性增加,系统就能够承受大量用户并发访问所带来的压力。

1.2 架构原理

在Kubenetes中,所有的容器均在Pod(豆荚,容器的组合)中运行,一个Pod可以承载一个或者多个相关的容器,同一个Pod中的容器会部署在同一个物理机器上并且能够共享数据、网络等资源。当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet(在定义replication controller的情况下,默认为1,不复制。设置为更大的值时才会自动复制)。集群中的组件可以定义为k-v标签(Label),进行组操作。

b0dca3c9b6d7c1c922ddd31a6fefc61b.png

Master(管理节点)

API Server:供Kubernetes API接口,主要处理 Rest操作以及更新Etcd中的对象。 所有资源增删改查的唯一入口。

Scheduler:绑定Pod到Node上,资源调度。

Controller Manager: 所有其他群集级别的功能,目前由控制器Manager执行。资源对象的 自动化控制中心。

Etcd:所有持久化的状态信息存储在Etcd中。

Node(计算节点)

Kubelet:管理Pods以及容器、镜像、Volume等,实现对集群、对节点的管理。

Kube-proxy:提供网络代理以及负载均衡,实现与Service通讯。

Docker Engine:docker,负责节点的容器的管理工作。