大部分概念Kubernetes官网都有详细介绍,Kubernetes中文官网 https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/ 前端
官网还提供一个比较好的功能是能在线互动,见互动教程,相似实操命令初步感觉。node
Kubernetes 提供了不少的功能,它能够简化应用程序的工做流,加快开发速度。使用Kubernetes只需一个部署文件,使用一条命令就能够部署多层容器(前端,后台等)的完整集群。docker
Kubernetes 主要由如下几个核心组件组成:编程
典型的Kubernetes架构图后端
上图能够看到以下组件,使用特别的图标表示Service和Label:api
Pod在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可使用localhost互相通讯。Pod是短暂的,不是持续性实体。若是Pod是短暂的,那么我怎么才能持久化容器数据使其可以跨重启而存在呢? Kubernetes支持卷的概念,所以可使用持久化的卷类型。若是Pod是短暂的,那么重启时IP地址可能会改变,那么怎么才能从前端容器正确可靠地指向后台容器呢?这时可使用Service。服务器
一些Pod有Label。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。好比,你可能建立了一个"tier"和“app”标签,经过Label(tier=frontend, app=myapp)来标记前端Pod容器,使用Label(tier=backend, app=myapp)标记后台Pod。而后可使用Selectors选择带有特定Label的Pod,而且将Service或者Replication Controller应用到上面。网络
Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。若是为某个Pod建立了Replication Controller而且指定3个副本,它会建立3个Pod,而且持续监控它们。若是某个Pod不响应,那么Replication Controller会替换它,保持总数为3.以下面的动画所示:架构
若是以前不响应的Pod恢复了,如今就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。若是在运行中将副本总数改成5,Replication Controller会马上启动2个新Pod,保证总数为5。还能够按照这样的方式缩小Pod,这个特性在执行滚动升级时颇有用。
当建立Replication Controller时,须要指定两个东西:app
如今已经建立了Pod的一些副本,那么在这些副本上如何均衡负载呢?咱们须要的是Service。
Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service经过Label找到Pod组。由于Service是抽象的,因此在图表里一般看不到它们的存在,这也就让这一律念更难以理解。
假定有2个后台Pod,而且定义后台Service的名称为‘backend-service’,lable选择器为(tier=backend, app=myapp)。backend-service 的Service会完成以下两件重要的事情:
若是不进入网络配置,那么达到透明的负载均衡目标所涉及的底层网络和路由相对先进。
有一个特别类型的Kubernetes Service,称为'LoadBalancer',做为外部负载均衡器使用,在必定数量的Pod之间均衡流量。好比,对于负载均衡Web流量颇有用。
每一个Pod都提供了一个独立的Endpoint(Pod IP+ContainerPort)以被客户端访问,多个Pod副本组成了一个集群来提供服务,通常的作法是部署一个负载均衡器来访问它们,为这组Pod开启一个对外的服务端口如8000,而且将这些Pod的Endpoint列表加入8000端口的转发列表中,客户端能够经过负载均衡器的对外IP地址+服务端口来访问此服务。运行在Node上的kube-proxy其实就是一个智能的软件负载均衡器,它负责把对Service的请求转发到后端的某个Pod实例上,而且在内部实现服务的负载均衡与会话保持机制。Service不是共用一个负载均衡器的IP地址,而是每一个Servcie分配一个全局惟一的虚拟IP地址,这个虚拟IP被称为Cluster IP。
Node节点的IP地址,是Kubernetes集群中每一个节点的物理网卡的IP地址,是真是存在的物理网络,全部属于这个网络的服务器之间都能经过这个网络直接通讯;
Pod的IP地址,是Docker Engine根据docker0网桥的IP地址段进行分配的,一般是一个虚拟的二层网络,位于不一样Node上的Pod可以彼此通讯,须要经过Pod IP所在的虚拟二层网络进行通讯,而真实的TCP流量则是经过Node IP所在的物理网卡流出的;
Service的IP地址。特性以下:
仅仅做用于Kubernetes Servcie这个对象,并由Kubernetes管理和分配IP地址;
没法被Ping,由于没有一个“实体网络对象”来响应;
只能结合Service Port组成一个具体的通讯端口;
Node IP网、Pod IP网域Cluster IP网之间的通讯,采用的是Kubernetes本身设计的一种编程方式的特殊的路由规则,与IP路由有很大的不一样;
节点(上图橘色方框)是物理或者虚拟机器,做为Kubernetes worker,一般称为Minion。每一个节点都运行以下Kubernetes关键组件:
集群拥有一个Kubernetes Master。Kubernetes Master提供集群的独特视角,而且拥有一系列组件,好比Kubernetes API Server。API Server提供能够用来和集群交互的REST端点。master节点包括用来建立和复制Pod的Replication Controller。
应用程序更新到一个新版本时,部署功能可以帮您对容器进行滚动更新,如有异常可自动回滚。
接入容器数超过两万,接入的业务也有两百多款,包括手游、端游、页游。
相比于在物理机上部署,在Kubernetes集群上部署Spark集群,具备如下优点:
微服务组成: Gateway api 网关 > 消费端 > 服务端 和 一个注册中心,共 4 个 Spring Boot 项目
Kubernetes实际要用起来问题还有不少,须要躺不少坑,搭建起一套Kubernetes环境就可能会让你从入门到放弃,再接再励。
资料来源:
http://www.dockone.io/article/932