组成
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
:是负责管理运行容器的软件,比如docker
Pod
:是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
集群中正常运行。