1、master
master是集群的网关和中枢,负责诸如为用户和客户端暴露api、跟踪其他服务器的健康状态、以最优方式调度工作负载,以及编排其他组件之间的通信等服务,它是用户或客户端与集群之间的核心联络点,并负责k8s系统的大多数集中式管控逻辑,单个master节点即可完成其所有的功能,但出于冗余及负载均衡等目的,生产环境中通常需要协同部署多个此类主机。master节点类似于蜂群中的蜂王。
2、node
node是k8s集群的工作节点,负责接收来自master的工作指令,并根据指令相应地创建或销毁pod对象,以及调整网络规则以合理地路由和转发流量等。理论上讲,node可以是任何形式的计算设备,不过master会统一将其抽象为node对象进行管理。node类似蜂群中的工蜂。
3、pod
k8s并不直接运行容器,而是使用一个抽象的资源对象来封装一个或者多个容器,这个抽象即为pod,它也是k8s的最小调度单元。同一pod中的容器共享网络名称空间和存储资源,这些容器可经由本地回环接口lo直接通信,但彼此之间又在mount、user及pid等名称空间上保持了隔离。
4、label
标签是将资源进行分类的标识符,资源标签其实就是一个键值型数据。标签旨在指定对象辨识性的属性,这些属性仅对用户存在特定的意义,对k8s集群来说,并不直接表达核心系统语义。标签可以在对象创建时附加其上,并能够在创建后的任意时间进行添加和修改。一个对象可以拥有多个标签,一个标签可以附加于多个对象之上。
5、label selector
标签选择器是一种根据label来过滤符合条件的资源对象的机制。例如,将附有标签“role: backend”的所有pod对象挑选出来归为一组就是标签选择器的一种应用。用户通常使用标签对资源进行分类,而后使用标签选择器挑选出它们。
6、controller
尽管pod是k8s的最小调度单元,但用户通常并不会直接部署及管理pod对象,而是要借助于另一类抽象---控制器对其进行管理。用于工作负载的控制器是一种管理pod生命周期的资源抽象,而非单个资源对象,包括replicationcontroller、replicaset、deployment、statefulset、job、cronjob等。使用控制器之后就不再需要手动管理pod对象了,用户只需要声明应用的期望状态,控制器就会自动对其进行进程管理。
7、service
service是建立在一组pod对象之上的资源抽象,它通过标签选择器选定一组pod对象,并为这组pod对象定义一个统一的固定访问入口(通常是一个IP地址),若k8s集群存在dns附件,它就会在service创建时为其自动配置一个dns名称以便客户端进行服务发现。到达service IP的请求将被负载均衡至其后的端点(各个pod对象)之上,因此service从本质上来讲是一个四层代理服务。另外,service还可以将集群外部流量引入到集群中来。
8、volume
存储卷是独立于容器文件系统之外的存储空间,常用于扩展容器的存储空间并为它提供持久存储能力。k8s集群上的存储卷大体可分为临时卷、本地卷和网络卷。临时卷和本地卷都位于node本地,一旦pod被调度至其他node,此种类型的存储卷将无法访问到,因此临时卷和本地卷通常用于数据缓存,持久化的数据则需要放置于持久卷之上。
9、name和namespace
名称是k8s集群中资源对象的标识符,它们的作用域通常是名称空间,因此名称空间是名称的额外的限定机制。在同一名称空间中,同一类型资源对象的名称必须具有唯一性。名称空间通常用于实现租户或项目的资源隔离,从而形成逻辑分组。创建的pod和service等资源对象都属于名称空间级别,未指定时,它们都属于默认的名称空间“default”。
10、annotation
注解是另一种附加在对象之上的键值类型的数据,但它拥有更大的数据容量。annotation常用于将各种非标识性元数据附加到对象上,但它不能用于标识和选择对象,通常也不会被k8s直接使用,其主要目的是方便工具或用户的阅读及查找等。
11、ingress
k8s将pod对象和外部网络环境进行了隔离,pod和service等对象间通信都使用其内部专用地址进行,如若需要开放某些pod对象提供给外部用户访问,则需要为其请求流量打开一个通往k8s集群内部的通道,除了service之外,ingress也是这类通道的实现方式之一。