Kubernetes 修仙录

炼气境—第2层: 理解K8S 的组件和架构设计

2019-10-09  本文已影响0人  一笑醉红颜zh

天下武功,为快不破。 我是Go 写的!


K8S 的架构设计

basic.jpg

那么,Worker 是怎么向Master 通信及报告状态,Master实时怎么管理Worker的工作情况,怎么规划资源调度的呢?

K8S 基础组件的说明

重点

组件化,各个部门各司其职,分为master 组件和节点(Node)组件。不过还有个公用的都需要的组件,那就是网络组件,用来node 之间通信的。

master 组件

Master 组件既认为是k8s 的大脑,是控制核心组件,主要对于整个集群做决策,调度,检测,事件控制。
一般情况,我们至少有3个master 节点作高可用的k8s 集群。master 节点不做工作任务,只负责集群的控制。

k8s 是有http api接口的,一般,我们操作集群会安装一个kubeClient 客户端,其实,这个客户端发出的命令既是调用了apiServer, 主要是方便用户通信。

etcd 负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。 比如pod 的状态,deploy 的状态等。

etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性

运行控制器,它们是处理集群中常规任务的后台线程。逻辑上,每个控制器是一个单独的进程,但为了降低复杂性,它们都被编译成独立的可执行文件,并在单个进程中运行。
这些控制器包括:

cloud-controller-manager 是用于与底层云提供商交互的控制器。云控制器管理器可执行组件是 Kubernetes v1.6 版本中引入的 Alpha 功能。像阿里云和华为云,其实都有一个pod 作为基础其他服务的控制。说白了,既是给其他云服务商提供的一个功能组件,结合他们的服务使用的。

以下控制器具有云提供商依赖关系:
节点控制器: 用于检查云提供商以确定节点是否在云中停止响应后被删除
路由控制器: 用于在底层云基础架构中设置路由
服务控制器: 用于创建,更新和删除云提供商负载平衡器
数据卷控制器: 用于创建,附加和装载卷,并与云提供商进行交互以协调卷

kube-scheduler 监视新创建没有分配到NodePod,为Pod选择一个Node。

插件(addon)是实现集群pod和Services功能的 。Pod由Deployments,ReplicationController等进行管理。Namespace 插件对象是在kube-system Namespace中创建。

虽然其他插件并不是必需的,但所有 Kubernetes 集群都应该具有Cluster DNS,许多示例依赖于它。

Cluster DNS 是一个 DNS 服务器,和您部署环境中的其他 DNS 服务器一起工作,为 Kubernetes 服务提供DNS记录。

Kubernetes 启动的容器自动将 DNS 服务器包含在 DNS 搜索中。这里插一嘴,目前一般集群用的是CoreDns 组件。

node 组件

kubelet是主要的节点代理,它监测已分配给其节点的 Pod(通过 apiserver 或通过本地配置文件),提供如下功能:


kube-proxy通过维护主机上的网络规则并执行连接转发,实现了Kubernetes服务抽象。

就是前面一章说的service 概念的抽象基础。

支持 rkt 运行容器作为 Docker 的试验性替代方案 。 不常见。

supervisord 是一个轻量级的进程监控系统,可以用来保证 kubelet 和 docker 运行。

fluentd 是一个守护进程,它有助于提供集群层面日志 集群层面的日志。

网络组件

官方集群网络说明
如何安装网络插件看这里

网络组件解决的是各种通信的问题,如容器到容器,容器到service,容器到外部,外部到容器的问题。

各个厂家的选择不一样,我们一般使用Flannel 或者Weave 作为网络组件。后面我们以Flannel 为例,因为他是最简单的~。 OK , 下一层我们主要说明网络,学习好了网络知识才能更好的掌握k8s 。

上一篇 下一篇

猜你喜欢

热点阅读