1.3 Kubernetes核心概念
在Kubernetes中有三个核心的概念,即Pod、Controller、Service。整个过程可以理解为通过Service统一入口进行访问,由Controller去创建Pod进行部署。
1.3.1 Pod
Pod是在Kubernetes中最小的部署单元,如图
Pod的特点
- node中使用Docker部署容器,而Kubernetes中的最小部署单元不是以容器为单位而是以Pod为单位,在一个Pod里可以理解为一组容器的集合,即一个Pod中可以有很多个容器。
- Pod是一组容器的集合
- 一个Pod中的容器是共享网络的,如一个节点中的一个Pod,Pod中有三个容器,第一个容器监听了80端口,那么另外两个容器都能得到80端口。
- Pod生命周期是短暂的,它不是一直存在的,例如,如果服务器重启了,重新部署了,Pod就找不到了。
1.3.2 Controller
- 确保预期的Pod副本的数量。比如节点中预期的Pod有三个,它可以保证有三个在运行。当然这个是内置的我们一般很少做操作。而我们经常操作的是下面的内容,比如我们现在想Kubernetes中部署一个应用会有两种情况,一个叫无状态应用部署,另一个叫有状态应用部署。这是两种比较常见的应用部署方式。
- 无状态应用部署,例如有两个节点,每个节点中都有多个容器或者副本,第一个节点挂掉了,此时就会将第一个节点中的容器飘到第二个节点中去,如果二者之间没有任何的约定,只需要将容器飘过来就可以直接用,这就是无状态应用部署。
- 有状态应用部署,例如有两个节点,每个节点中都有多个容器或者副本,第一个节点挂掉了,此时就会将第一个节点中的容器飘到第二个节点中去,如果二者之间有约定,如第一个节点中的容器/副本的网络IP需要唯一或者依赖存储,这就是有状态,说的简单点无状态就是可以随便用,有状态需要有特定条件才可以使用。
- 可以确保所有的node都运行同一个Pod。这个在我们平时工作用用的并不多,但这里面有一个机制,现在有多个node,运行肯定都是同一个Pod,或者说都是同一个功能。
- 支持一次性任务和定时任务。
我们可以简单的理解Controller主要做的事情就是创建出Pod,需要Pod的数量,包括是否有状态,也就是说Kubernetes部署的最小单元就是Pod,而Controller做的事情就是创建Pod。
1.3.3 Service
Service可以理解为统一的入口。定义一组Pod的访问规则。比如约定订单访问集群中的Pod1,而购物车访问集群中的Pod2,不管是通过IP还是通过其他方式进行访问这就是Service。