111
Master组件
- kube-apiserver:Kubernetes API,集群的统一入口,各组件协调者,以RESTfulAPI提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
- kube-controller-manager:处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManageer就是负责管理这些控制器的。例如Deployment、Service
- kuber-scheduler:根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署再同一个节点上,也可以部署再不同的节点上。
- etcd:分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。
Node组件
- kubelet:kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
- kube-proxy:在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
- 第三方容器引擎,例如docker、containerd、podman:容器引擎,运行容器。
Replication Controller
简称RC,RC时Kubernetes系统中的核心概念之一。它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩
注
在我们定义了一个RC并将其提交到Kubernetes集群中后,Master上的Controller Manager组件就会得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,过少则会再创建一些Pod。相比传统的IT环境,如果程序意外挂掉,需要手动启动,但是再k8s通过RC,就大大减少这些手工运维工作
ReplicaSet
ReplicaSet实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理Pod的多个副本,所以我们通过不需要直接使用ReplicaSet。
注
1.Replication Controller由于与Kubernetes代码中的模块Replication Controller同名,并且”Replication Controller“无法准确表达它的本意,所以在Kubernetes1.2中,升级为另外一个新概念----Replica Set,官方解释为”下一代的RC“
2.我们很少单独使用Replica Set,它主要被Deployment这个更高层的资源对象所使用。
Deployment
应用管理者,是用于部署应用的对象,Deployment内部使用了Replica Set来实现的,我们可以把Deployment看做RC的一次升级
注
创建Deployment对象后,master会根据Deployment对象的配置文件去描述应用,应用名称,使用的镜像名称,需要几个实例,多少内存,多少CPU资源
Pod
Pod是一组容器(当然也可以只有一个)容器本身就是一个小盒子了,Pod相当于在容器上又包了一层小盒子。Pod是Kubernetes的最小调度单位。
注
Pod中的容器共享数据卷volume
Pod中的容器共享IP地址和端口
Service
Service是一组逻辑pod的抽象,为一组pod提供统一入口,用户只需与service打交道,service提供DNS解析名称,负责追踪pod动态变化并更新转发表,通过负载均衡算法最终将流量转发到后端的pod。Kubernetes里的每个Service其实也可以理解为我们的微服务构架中的一个微服务。
Service对外提供多种入口:
- ClusterIP: Service在集群内的唯一ip地址,虚拟的ip,只能在Kubernetes集群里访问。通过ClusterIP,负载均衡的访问后端的Pod
- NodeIP+NodePort: Service会在集群的每个Node上都启动一个端口,通过NodeIP:NodePort访问后端的Pod
注
1.Service负责服务发现,找到每个Pod,不管Deployment的Pod有多少个,不管它是更新,销毁还是重建,Service总是能发现并维护好它的ip列表。
2.kube-proxy是Kubernetes核心组件,运行在集群中每一个节点上,负责监控集群中service、endpoint变更,维护各个节点上的转发规则,是实现service功能的核心部件。
Label
标签,一个Label是一个key=value的键值对。Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label。
Volume
Volume(存储卷)Volume是Pod中能够被多个容器共享的磁盘目录。我们知道,默认情况下Docker容器中的数据都是非持久化的,在容器消亡后数据也会消失。因此Docker提供了Volume机制以便实现数据的持久化。Kubernetes中Volume的概念与Docker中的Volume类似,但不完全相同。
Kubernetes提供了非常丰富的Volume类型:
- emptyDir:临时空间,Pod分配到Node时创建,无须指定宿主主机上对应的目录,在Kubernetes会自动分配当前Node的一个目录,当Pod被移除时,emptyDir中的数据也会永久删除。
- hostPath:为Pod挂载宿主主机上的文件或目录。用于数据永久保存。在不同的Node上具有相同配置的Pod,可能会因为宿主机上的目录和文件不同而导致Volume上的目录和文件的访问结果不一致。
- gcePersistentDisk:使用谷歌公有云提供的永久磁盘。数据永久保存。
- NFS:NFS 是 Network File System 的缩写,即网络文件系统。Kubernetes 中通过简单地配置就可以挂载 NFS 到 Pod 中,而 NFS 中的数据是可以永久保存的,同时 NFS 支持同时写操作。k8s挂载NFS
Persistent Volume:简称PV,就是网盘,网络存储,不属于任何Node,但可以在每个Node上访问。
Namespace
命名空间,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上纷纷组的不同项目,便于不同的分组共享使用整个集群的资源的同时还能被分别管理。
ConfigMap
ConfigMap顾名思义,是用于保存配置数据的键值对,可以用来保存单个属性,也可以保存配置文件。就是为了让镜像 和 配置文件解耦,以便实现镜像的可移植性和可复用性,因为一个configMap其实就是一系列配置信息的集合,将来可直接注入到Pod中的容器使用,而注入方式有两种,一种将configMap做为存储卷,一种是将configMap通过env中configMapKeyRef注入到容器中