Kubernetes简介
此文旨在以简明清晰的方式简要介绍Kubernetes的缘由、原理和架构。读者需要对容器技术有所了解。
Kubernetes缘由
在传统的 PaaS上,用户必须为不同语言、不同框架区分不同的打包方式,这个打包过程是非常具有灾难性的。而现实往往更糟糕,当在本地跑的好好的应用,由于和远端环境的不一致,在打包后却需要在云端各种调试,最终才能让应用“平稳”运行。
Docker的出现改变了这一切,它凭借容器技术解决了这个问题,大大方便了交付、测试和部署应用。
然而,在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。
于是,Kubernetes(K8S)就出现了。
Kubernetes是Google开源的容器集群管理系统,能提供一个以“容器为中心的基础架构”。Kubernetes的目标是让部署容器化的应用简单并且高效。它支持自动化部署、大规模可伸缩、应用容器化管理。
简要原理
Kubernetes将资源高度抽象化,允许将容器化的应用程序部署到集群中。在新的部署模型中,应用程序被直接安装到特定的机器上,Kubernetes以更高效的方式在集群中实现容器的分发和调度运行。
所以说,Kubernetes 就像是容器层面的操作系统。集中控制容器的部署、扩展、负载均衡、日志、监控等。这使得系统更加易用、强大、弹性和可扩展。
整体架构
Kubernetes将底层的计算资源连接在一起对外体现为一个高可用的计算机集群,形成一个K8S系统,通常称为K8S集群(Cluster)。每一个 Kubernetes 集群都由两个部分组成:
- Master节点(主节点)
- Node节点(计算节点)
总的来说,Master节点负责发号施令,Node节点负责执行。
Master 是 Kubernetes 集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有 Etcd 存储服务,运行 API Server 进程,Controller Manager 服务进程及 Scheduler 服务进程,关联工作节点 Node。
API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。Scheduler负责对集群内部的资源进行调度,相当于“调度室”。Controller manager负责管理控制器,相当于“大总管”。
Node 是 Kubernetes 集群架构中运行 Pod 的服务节点。Node 是 Kubernetes 集群操作的单元,用来承载被分配 Pod 的运行,是 Pod 运行的宿主机。关联 Master 管理节点,拥有名称和 IP、系统资源信息。运行 Docker Runtime、kubelet 和 kube-proxy。
Pod是Kubernetes中的最小单位,由一个或多个容器组合在一起得共享资源。这些资源包括:
- 共享存储,如 Volumes 卷
- 网络,唯一的集群IP地址
- 每个容器运行的信息,例如:容器镜像版本
下面这张图是从宏观上看 Kubernetes 的整体架构。