组成
kubectl:客户端命令行工具,作为整个系统的操作入口。
kube-apiserver:以 REST API 服务形式提供接口,作为整个系统的控制入口。
kube-controller-manager:执行整个系统的后台任务,包括节点状态状况、Pod 个数、Pods 和Service 的关联等。
kube-scheduler:负责节点资源管理,接收来自 kube-apiserver 创建 Pods 任务,并分配到某个节点。
etcd:负责节点间的服务发现和配置共享。
kube-proxy:运行在每个计算节点上,负责 Pod 网络代理。定时从 etcd 获取到 service 信息来做相应的策略。
kubelet:运行在每个计算节点上,作为 agent,接收分配该节点的 Pods 任务及管理容器,周期性获取容器状态,反馈给 kube-apiserver。
DNS:一个可选的 DNS 服务,用于为每个 Service 对象创建 DNS 记录,这样所有的 Pod 就可以通过 DNS 访问服务了。
Kubernetes 的所有管理能力构建在对象抽象的基础上,核心对象包括:
• Node:计算节点的抽象,用来描述计算节点的资源抽象、健康状态等。
• Namespace:资源隔离的基本单位,可以简单理解为文件系统中的目录结构。
• Pod:用来描述应用实例,包括镜像地址、资源需求等。 Kubernetes 中最核心 的对象,也是打通应用和基础架构的秘密武器。
• Service:服务如何将应用发布成服务,本质上是负载均衡和域名服务的声明。
Master Node:
- Api服务器(
API SERVER):这是Kubernetes控制面板中唯一带有用户可访问API以及用户可交互的组件。API服 务器会暴露一个RESTful的Kubernetes API并使用JSON格式的清单文件(manifest files)。 - 群的数据存储
Cluster Data Store:Kubernetes使用“etcd”。这是一个强大的、稳定的、高可用的键值存储,被Kubernetes用于长久储存所有的API对象。 - 控制管理器
Controller Manager:被称为“kube-controller manager”,它运行着所有处理集群日常任务的控制器。包 括了节点控制器、副本控制器、端点(endpoint)控制器以及服务账户等。 - 调度器
Scheduler:调度器会监控新建的pods(一组或一个容器)并将其分配给节点
Worker Node:
Kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理,一般运行在所有的节点,是Node节点的代理,当Scheduler确定某个node上运行pod之后,会将pod的具体信息(image,volume)等发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向master返回运行状态。(自动修复功能:如果某个节点中的容器宕机,它会尝试重启该容器,若重启无效,则会将该pod杀死,然后重新创建一个容器);Kube-proxy:Service在逻辑上代表了后端的多个pod。负责为Service提供cluster内部的服务发现和负载均衡(外界通过Service访问pod提供的服务时,Service接收到的请求后就是通过kube-proxy来转发到pod上的);container-runtime:是负责管理运行容器的软件,比如dockerPod:是k8s集群里面最小的单位。每个pod里边可以运行一个或多个container(容器),如果一个pod中有两个container,那么container的USR(用户)、MNT(挂载点)、PID(进程号)是相互隔离的,UTS(主机名和域名)、IPC(消息队列)、NET(网络栈)是相互共享的。我比较喜欢把pod来当做豌豆夹,而豌豆就是pod中的container;
Kubernetes 一条创建部署(deployment)的命令的内部流程?
Kubernetes 创建部署(Deployment)的命令会涉及到以下几个步骤:
- 用户运行创建部署(
Deployment)的命令kubectl create deployment <name> --image=<image>。kubectl命令会将用户输入的命令转换成REST API请求,发送给Kubernetes API Server。 Kubernetes API Server接收到REST API请求后,会调用相应的Admission Controller进行验证,并将请求转发给etcd存储。etcd存储会将请求存储到etcd数据库中,并将响应返回给Kubernetes API Server。Kubernetes API Server接收到响应后,会将响应发送给用户。- 同时,
Kubernetes控制器管理器(Controller Manager)会监听etcd数据库中的资源变化, 如果检测到新创建的Deployment资源,就会创建一个新的ReplicaSet资源,并将其保存到etcd数据库中。 ReplicaSet控制器会监听etcd数据库中的ReplicaSet资源变化, 如果检测到新创建的ReplicaSet资源,就会创建一个或多个Pod资源,并将其保存到etcd数据库中。Kubernetes调度器(Scheduler)会监听etcd数据库中的Pod资源变化, 如果检测到新创建的Pod资源,就会为该Pod分配一个Node,并将Pod资源的信息更新到etcd数据库中。Kubelet守护进程会监听etcd数据库中的Pod资源变化,如果检测到新创建的Pod资源,就会在分配的Node上启动该Pod。- 当
Pod启动成功后,它会向Kubernetes API Server注册自己的IP地址和端口信息,供其他Pod和Service访问。 总的来说,Kubernetes创建部署(Deployment)的命令会涉及到用户输入命令、Kubernetes API Server、Admission Controller、etcd存储、Kubernetes控制器管理器、ReplicaSet控制器、Kubernetes调度器、Kubelet守护进程等多个组件的协同工作, 确保最终部署的应用程序能够在Kubernetes集群中正常运行。