组成

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 服 务器会暴露一个 RESTfulKubernetes API 并使用 JSON 格式的清单文件(manifest files)。
  • 群的数据存储 Cluster Data StoreKubernetes 使用“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:是负责管理运行容器的软件,比如docker
  • Pod:是k8s集群里面最小的单位。每个pod里边可以运行一个或多个container(容器),如果一个pod中有两个container,那么container的USR(用户)、MNT(挂载点)、PID(进程号)是相互隔离的,UTS(主机名和域名)、IPC(消息队列)、NET(网络栈)是相互共享的。我比较喜欢把pod来当做豌豆夹,而豌豆就是pod中的container;

Kubernetes 一条创建部署(deployment)的命令的内部流程?

Kubernetes 创建部署(Deployment)的命令会涉及到以下几个步骤:

  1. 用户运行创建部署(Deployment)的命令 kubectl create deployment <name> --image=<image>kubectl 命令会将用户输入的命令转换成 REST API 请求,发送给 Kubernetes API Server
  2. Kubernetes API Server 接收到 REST API 请求后,会调用相应的 Admission Controller 进行验证,并将请求转发给 etcd 存储。
  3. etcd 存储会将请求存储到 etcd 数据库中,并将响应返回给 Kubernetes API Server
  4. Kubernetes API Server 接收到响应后,会将响应发送给用户。
  5. 同时,Kubernetes 控制器管理器(Controller Manager)会监听 etcd 数据库中的资源变化, 如果检测到新创建的 Deployment 资源,就会创建一个新的 ReplicaSet 资源,并将其保存到 etcd 数据库中。
  6. ReplicaSet 控制器会监听 etcd 数据库中的 ReplicaSet 资源变化, 如果检测到新创建的 ReplicaSet 资源,就会创建一个或多个 Pod 资源,并将其保存到 etcd 数据库中。
  7. Kubernetes 调度器(Scheduler)会监听 etcd 数据库中的 Pod 资源变化, 如果检测到新创建的 Pod 资源,就会为该 Pod 分配一个 Node,并将 Pod 资源的信息更新到 etcd 数据库中。
  8. Kubelet 守护进程会监听 etcd 数据库中的 Pod 资源变化,如果检测到新创建的 Pod 资源,就会在分配的 Node 上启动该 Pod
  9. Pod 启动成功后,它会向 Kubernetes API Server 注册自己的 IP 地址和端口信息,供其他 PodService 访问。 总的来说,Kubernetes 创建部署(Deployment)的命令会涉及到用户输入命令、Kubernetes API Server、Admission Controlleretcd 存储、Kubernetes 控制器管理器、ReplicaSet 控制器、Kubernetes 调度器、Kubelet 守护进程等多个组件的协同工作, 确保最终部署的应用程序能够在 Kubernetes 集群中正常运行。