Kubernetes的基本概念和术语

Kubernetes中的大部分概念如Node、Pod、Replication Controller、 Service等都可以被看作一种资源对象,几乎所有资源对象都可以通过 Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查 等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes 其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存 的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

Kubernetes中重要的资源对象 1.1 Master

​ Kubernetes里的Master指的是集群控制节点,在每个Kubernetes集群里都需要有一个Master来负责整个集群的管理和控制,基本上 Kubernetes的所有控制命令都发给它,它负责具体的执行过程,我们后面执行的所有命令基本都是在Master上运行的。Master通常会占据一个独立的服务器(高可用部署建议用3台服务器),主要原因是它太重要了,是整个集群的“首脑”,如果它宕机或者不可用,那么对集群内容器应用的管理都将失效。

Master上运行着以下关键进程

Kubernetes API Server(kube-apiserver):提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。

Kubernetes Controller Manager(kube-controller-manager):Kubernetes里所有资源对象的自动化控制中心,可以将其理解为资源对象的“大总管”。

Kubernetes Scheduler(kube-scheduler):负责资源调度(Pod调度)的进程,相当于公交公司的“调度室”。

1.2 Node

除了Master,Kubernetes集群中的其他机器被称为Node,在较早的 版本中也被称为Minion。与Master一样,Node可以是一台物理主机,也 可以是一台虚拟机。Node是Kubernetes集群中的工作负载节点,每个 Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机 时,其上的工作负载会被Master自动转移到其他节点上。

每个Node上都运行着以下关键进程

kubelet:负责Pod对应的容器的创建、启停等任务,同时与 Master密切协作,实现集群管理的基本功能。

kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。

Docker Engine(docker):Docker引擎,负责本机的容器创建 和管理工作。

Node可以在运行期间动态增加到Kubernetes集群中,前提是在这个 节点上已经正确安装、配置和启动了上述关键进程,在默认情况下 kubelet会向Master注册自己,这也是Kubernetes推荐的Node管理方式。 一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身 的情报,例如操作系统、Docker版本、机器的CPU和内存情况,以及当 前有哪些Pod在运行等,这样Master就可以获知每个Node的资源使用情 况,并实现高效均衡的资源调度策略。而某个Node在超过指定时间不上 报信息时,会被Master判定为“失联”,Node的状态被标记为不可用 (Not Ready),随后Master会触发“工作负载大转移”的自动流程。

从创建 deployment 开始

Kubernetes的基本概念和术语

deployment 是用于编排 pod 的一种控制器资源,我们会在后面做介绍。这里以 deployment 为例,来看看架构中的各组件在创建 deployment 资源的过程中都干了什么。

1.首先是 kubectl 发起一个创建 deployment 的请求

2.apiserver 接收到创建 deployment 请求,将相关资源写入 etcd;之后所有组件与 apiserver/etcd 的交互都是类似的

3.deployment controller list/watch 资源变化并发起创建 replicaSet 请求

4.replicaSet controller list/watch 资源变化并发起创建 pod 请求

5.scheduler 检测到未绑定的 pod 资源,通过一系列匹配以及过滤选择合适的 node 进行绑定

6.kubelet 发现自己 node 上需创建新 pod,负责 pod 的创建及后续生命周期管理

7.kube-proxy 负责初始化 service 相关的资源,包括服务发现、负载均衡等网络规则

至此,经过 kubenetes 各组件的分工协调,完成了从创建一个 deployment 请求开始到具体各 pod 正常运行的全过程。

Pod

在 kubernetes 众多的 api 资源中,pod 是最重要和基础的,是最小的部署单元。
首先我们要考虑的问题是,我们为什么需要 pod?pod 可以说是一种容器设计模式,它为那些”超亲密”关系的容器而设计,我们可以想象 servelet 容器部署 war 包、日志收集等场景,这些容器之间往往需要共享网络、共享存储、共享配置,因此我们有了 pod 这个概念。

Kubernetes的基本概念和术语

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypdgd.html