Cluster

Cluster是计算、存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用

Master

Master是kubernetes cluster的大脑,只要的职责是负责调度,决定Pod在哪个Node上运行。Master运行在虚拟机或物理机上,可以理解它是服务器上运行的一个应用,专门管理和调度Pod等资源。一般为了kubernetes cluster的高可用,是要运行多个Master,kubernetes官网上建议运行3个及以上。

Node

运行容器应用的地方(服务器:虚拟机或物理机),加入了Cluster的Node由Master来管理。Node负责监控并汇报容器应用的状态,同时根据Master的要求管理容器的生命周期。

Pod

Pod是kubernetes上的最小工作单元,我们操作的高级资源最终都是一个或多个的Pod组成。Pod里面包含一个或多个容器。例如:我们可以把一个Nginx+SpringBoot应用放到一个Pod里面,这样这个Pod就运行了两个容器(一个运行着Nginx的容器和一个运行SpringBoot应用的容器)。

kubernetes以Pod为最小单位进行调度、扩缩容、滚动升降级、共享资源和管理其生命周期。

Pod里面的所有容器可以共享同一个网络,并且Pod里面的容器相互之间可以使用localhost来进行通讯,挂载到Pod的文件/文件夹,里面的所有容器都能够访问。

因为kubernetes直接管理的是Pod,是kubernetes里的概念。所以与底层使用什么容器引擎并不关心。只要符合OCI Runtime 规范即可。

OCI标准:OCI规范了容器的配置、执行环境和生命周期管理。容器的配置信息由config.json配置文件来管理。规范容器的执行环境可以保证容器内运行的应用在生命周期内拥有一致的运行环境。总的来说OCI希望通过规范容器的配置、执行环境和生命周期管理,进而达到Docker所提出的“Build, Ship, and Run any app, anwhere”愿景。

Controller

通常我们操作kubernetes不是直接去创建Pod,而是通过一些Controller去操作Pod。

  • Deployment:最常用的Controller,通过Deployment可以管理Pod的副本数量,并让Pod按照预期的状态运行。
  • ReplicaSet:Pod多副本管理Controller。使用Deployment来创建Pod的时候管理多副本的Pod使用的就是ReplicaSet,只是我们一般不会直接使用ReplicaSet,而是使用Deployment
  • DaemonSet:适用于每个Node最多运行一个Pod副本的场景。
  • StatefulSet:保证Pod的每一个副本在整个生命周期内名称是不变的。同时保证副本按照固定顺序启动、更新和删除。
  • Job:运行结束后就会删除的应用,其他的Controller中的Pod通常都是长期持续运行的。

Service

我们通过Controller创建的Pod会发生更新删除、动态扩缩容的情况。这时候这些Pod的Cluster IP就会发生改变了,所以访问这些Pod里面的容器不能直接使用Pod的IP。这时候就用到了Service了。Service有自己的IP和端口,可以为属于这个Service的Pod提供负载均衡。总的来说,Controller是用来管理Pod,Service是用来访问Pod或者说是把Pod暴露出去。

Namespace

Namespace是用来做资源隔离的,使用Namespace将Kubernetes Cluster划分成多个虚拟的Cluster,每个Cluster就是一个Namespace,每个Namespace里的资源是完全隔离的。Kubernetes默认创建了两个Namespace:default、kube-system。在创建资源时不指定Namespace,会被分到default中;kubernetes自己创建的系统资源会被放到kube-system中。