美文网首页Kubernetes 修仙录
炼气境—第2层: 理解K8S 的组件和架构设计

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

作者: 一笑醉红颜zh | 来源:发表于2019-10-09 11:18 被阅读0次

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


    K8S 的架构设计

    • C-S架构
    basic.jpg
    • 说明
      K8S 使用的是Master —Worker 这种方式,Master 节点负责调度控制,Worker负责干活,也就是说Master 是地主老财,天天只会别人干着干那,Worker 就是农民,埋头耕种即可。

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

    K8S 基础组件的说明

    重点

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

    master 组件

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

    • Kube-apiserver

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

    • ETCD

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

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

    • Kube-controller-manager

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

    • 节点控制器: 当节点移除时,负责注意和响应。
    • 副本控制器: 负责维护系统中每个副本控制器对象正确数量的 Pod。
    • 端点控制器: 填充 端点(Endpoints) 对象(即连接 Services & Pods)。
    • 服务帐户和令牌控制器: 为新的命名空间创建默认帐户和 API 访问令牌.
      说白了就是,控制pod 的个数,存活周期,秘钥,账户权限,令牌,pod 访问控制等。
    • Cloud-controller-manager

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

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

    • Kube-scheduler

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

    • 插件addons

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

    • DNS

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

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

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

    node 组件

    • Kubelet

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

    • 挂载 Pod 所需要的数据卷(Volume)。
    • 下载 Pod 的 secrets。
    • 通过 Docker 运行(或通过 rkt)运行 Pod 的容器。
    • 周期性的对容器生命周期进行探测。
    • 如果需要,通过创建 镜像 Pod(Mirror Pod) 将 Pod 的状态报告回系统的其余部分。
    • 将节点的状态报告回系统的其余部分。

    • Kube-Proxy

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

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

    • Docker
      所有的POD都是在docker 引擎中允许的。master的组件也是可以容器化运行的,不过一般的云服务上都是通过二进制安装的master,因为master 太重要了,稳定性需要是第一位的。

    • RKT

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

    • supervisord

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

    • fluentd

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

    网络组件

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

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

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/kgwfpctx.html