上文中讲了K8s的全生命周期,本篇介绍K8S的核心模块 K8s的核心模块主要有Cluster 、Master 、Node 、Pod 、Service等等
k8s的核心技术概念:
Cluster
Cluster 是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用。
Master
Kubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,用于接收Kubernetes的绝大多数控制命令,master负责具体的执行过程。高可用部署建议用3台服务器,推荐选举。一旦master宕机或者不可用,那么对集群内容器应用的管理都将失效。
Master Node 由 API Server、Scheduler、ClusterState Store(ETCD 数据库)和 Controller MangerServer 所组成。
- Kubernetes API Server(kube-apiserver)
Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服务,Kubernetes里所有资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。 - Kubernetes Controller Manager(kube-controller-manager)
Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的大总管 - kube-scheduler
负责资源调度(Pod调度)的进程
Node
Node是集群工作节点 由 Master 管理,运行用户业务应用容器,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他Node节点上。Node 还负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。
Worker Node 包含 kubelet、kube proxy 和 ContainerRuntime:
- kubelet
kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,负责Pod对应容器的创建、启停等任务。同时与Master密切协作,实现集群管理的基本功能,获取Node节点上Pod的运行状态等。
kubelet是主要的节点代理,它会监视已分配给节点的pod,具体功能: 安装Pod所需的volume。 下载Pod的Secrets。 Pod中运行的 docker(或experimentally,rkt)容器。 定期执行容器健康检查。 通过创建一个 Pod(如果需要的话),向系统的其余部分报告 Pod 的状态。 向系统的其他部分报告节点的状态。
-
kube-proxy 在Node节点上实现Pod网络代理,实现Kubernetes Service的通信和负载均衡机制的重要组件。kube-proxy通过在主机上维护网络规则并执行连接转发来实现Kubernetes服务抽象。 -
docker Docker引擎,负责本机的容器的创建和管理工作
Pod
Pod 是 Kubernetes 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个 Node 上运行,一个Pod里的所有容器共用一个namespaces
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。
Replication Controller
管理Pod的工具,kubernetes通过它来管理集群中的Pod。RC是Kubernetes系统中的核心概念之一。它能够保证Pod持续运行,并且在任何时候都有指定数量的Pod副本,在此基础上提供一些高级特性,比如滚动升级和弹性伸缩。
ReplicaSet
ReplicaSet 实现了 Pod 的多副本管理。使用 Deployment 时会自动创建 ReplicaSet,也就是说 Deployment 是通过 ReplicaSet 来管理 Pod 的多个副本,所以我们通常不需要直接使用 ReplicaSet。
Deployment
应用管理者,是用于部署应用的对象,Deployment内部使用了Replica Set来实现的,我们可以把Deployment看做RC的一次升级。
Namespace
命名空间,Namespace在很多情况下用于实现多租户的资源隔离。Namespace通过集群内部的资源对象"分配"到不同的Namespace中,形成逻辑上纷纷组的不同项目,便于不同的分组共享使用整个集群的资源的同时还能被分别管理。
Job
Job 用于运行结束就删除的应用。而其他 Controller 中的 Pod 通常是长期持续运行。
|