Kubernetes是一个很容易地部署和管理容器化的应用软件系统,使用Kubernetes能够方便对容器进行调度和编排。
对应用开发者而言,可以把Kubernetes看成一个集群操作系统。Kubernetes提供服务发现、伸缩、 负载均衡 、自愈甚至选举等功能,让开发者从基础设施相关配置等解脱出来。
Kubernetes可以把大量的服务器看做一台巨大的服务器,在一台大服务器上面运行应用程序。无论Kubernetes的集群有多少台服务器,在Kubernetes上部署应用程序的方法永远一样。
图1在Kubernetes集群上运行应用程序
Kubernetes集群架构
Kubernetes集群包含master节点和node节点,应用部署在node节点上,且可以通过配置选择应用部署在某些特定的节点上。
Kubernetes集群的架构如下所示。
图2 Kubernetes集群架构
Master节点
Master节点是集群的控制节点,由API Server、Scheduler、Controller Manager和ETCD四个组件构成。
API Server:各组件互相通讯的中转站,接受外部请求,并将信息写到ETCD中。
Controller Manager:执行集群级功能,例如复制组件,跟踪Node节点,处理节点故障等等。
Scheduler:负责应用调度的组件,根据各种条件(如可用的资源、节点的亲和性等)将容器调度到Node上运行。
ETCD:一个分布式数据存储组件,负责存储集群的配置信息。
在生产环境中,为了保障集群的高可用,通常会部署多个master,如CCE集群的高可用模式就是3个master节点。
Node节点
Node节点是集群的计算节点,即运行容器化应用的节点。
kubelet:kubelet主要负责同Container Runtime打交道,并与API Server交互,管理节点上的容器。
kube-proxy:应用组件间的访问代理,解决节点上应用的访问问题。
Container Runtime:容器运行时,如Docker,最主要的功能是下载 镜像 和运行容器。