K8S能做什么
K8S全称:kubernetes
它是一个集群容器编排工具,是基于Docker的。
k8s的职责:
- 自动化容器的部署和复制
- 随时扩展和收缩容器的规模
- 容器分组Group,并且提供荣期间的负载均衡
- 实时监控,即使故障发现,自动替换。
K8S的基本概念
首先上图是一个完整的K8S集群,集群内包含了三台宿主机(上图中每一个方块都是一个物理的宿主机),这三台服务器中又分为两种角色,分别为 master 和 node 。
k8s master:
主服务器(图中紫色的方块),整个集群的管理者,对整个集群的节点进行管理,通过主服务器向集体的节点发送 创建容器、自动部署等职能,所有来自于外侧的数据包都会由 k8s master来进行接收并分配。在一般情况下,master是一个独立的物理机。
node:
节点(图中黄色的方块),这些节点可以是独立的物理机,也可以是一个一个虚拟机。
Pod:
在每个节点中,都会涉及到一个非常重要k8s独有的概念(图中绿色方框代表的 Pod),Pod是k8s中最重要最基础的概念,它是k8s整个控制的最小单元。
pod在英文中有“豆荚(豆角)”的意思,一个外皮中包含了很多的豆子,相应的在k8s中一个Pod中可以包含多个容器,Pod相当于豆角,每个容器就像豆角中的豆子。
pod是k8s最小可部署单元,一个pod就是一个进程。
每个pod内部,每一个容器网络天然的互联互通,每个一个Pod都拥有一个虚拟IP,这个虚拟IP由k8s来统一管理。虽然每个Pod都有自己独立的虚拟IP,但是Pod和Pod之间是无法天然是无法直接交流的,如果要进行通信的话,必须要使用另外一个组件service。
service
service是服务的意思,再k8s中service的主要只能就是将多个不同主机上的pod通过service进行连通,使pod和pod之间也能够正常的通信。
pause
那么又有新问题,pod到底是什么?里面装什么?里面虽然都是容器,在项目中怎么用呢? 这个需要根据实际中的使用场景,根据项目设计的不同,分割的力度也不一样。
- 很多小公司,一个pod就是一个完整的应用,其中包含tomcat、mysql。一个pod就是一个完整的应用,多个pod部署后就是一个集群。
- 一个pod只部署一个容器,比如一个pod里面之部署一个tomcat。到底使用哪种方案是根据项目的特性和资源的多寡来决定的。
谷歌官方只给了pod的设计,至于怎么用,是非常灵活的。
再pod中有一个特殊的容器 “ pause ”, pause对pod来说是必备的,并且是最基础的一个容器,它有两个只能:
- 它提供了一个共享的网络空间,在网络层次上共享命名空间,比如一个pod内多个容器间通信访问,直接使用localhost+端口 就可以访问了。
- 对当前pod提供一个共享的volume(共享数据卷),数据被pause统一的管理,进而方便了整个k8s的集群管理
label
lacel是一个说明性的标签,在后期应用中有很重要的作用,在进行部署的在哪些pod上进行操作,都需要根据label来进行查找和筛选,label就相当于每一个pod的别名,只有给pod起了名字,k8s的主节点才能找到对应的pod来进行相应的操作。
Replication Controller
Replication Controller是复制控制器,它存在于master节点上,职责是监控pod的数量,如果应用集群的数量是三个,其中一个挂掉了,Replication Controller会把挂掉的服务剔除并且重新创建。
同时还可以方便的增加或减少pod的数量,只需要修改参数 数量 即可,这一切无需人工干预。
技术实现
所有的node中,都需要安装三个组件,docker、kubelet、kube-proxy,在K8S安装好的时候kubelet、kube-proxy就天然存在,其中kubelet用于执行相应K8S的命令。而service实现pod之间互相通信其实是kube-proxy进行实现的。