K8s将集群中的机器划分为一个主节点和一群工作节点,在主节点上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager 和 kube-scheduler,这些进程实现了整个集群的资源管理、pod 调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是全自动完成的。集群中的工作节点运行真正的应用程序,各自又通过若干组件的组合来实现。在节点上,K8s管理的最小运行单元是pod。负载均衡模式需要通过kubelet、kube-proxy等这些服务进程实现,下图是K8s的整体架构:

主节点即中央控制节点是K8s 集群的管理节点,管理集群当中数据的接口、状态监测和回滚、状态更新、调度等功能,kubectl是K8s的命令行工具集,用于通过命令行与API server进行交互,而对K8s进行操作,实现在集群中进行各种资源的管理控制等操作,通过节点控制器来与工作节点交互。主节点内部架构如下图所示:

上图可以看出主节点的核心组件以及内部的交互流程,主节点提供的核心组件如下。

(1) etcd 是集群的状态, K8s 默认使用分布式的etcd集群整体存储用来实现发现服务和共享配置集群的所有状态都存储在etcd 实例中,并具有监控的能力,因此当etcd中的信息发生变化时,能够快速地通知集群中相关的组件。

(2) API server提供了集群网关,API server在客户端对集群进行访问, 客户端需要通过认证, 并使用API server作为访问节点和 pod (以及服务)的堡垒和代理/通道。

(3) Scheduler主要功能是资源调度,讲pod调度到对应的主机上。依据请求资源的可用性、服务请求的质量等约束条件,K8s也支持用户自己提供的调度器。

(4)controller负责维护集群的状态,比如故障检测、内存垃圾回收、滚动更新等,也执行API业务逻辑;K8s默认提供replication controller、controller、daemonset controller等控制器。

(5)kube-ui为可选组件,自带的一套用来查看集群状态的Web界面。

(6)kube-dns 为可选组件,记录启动的pod和服务地址,提供域名到地址的转换映射。

(7)其他组件包括容器资源使用监控、日志记录等。这些管理组件可以任意部署在相同或者不同的机器上,只要可以通过标准的HTTP接口相互访问即可。这意味着K8s的管理组件进行扩展将变得十分简单。在创建K8s集群过程中,都要预装一些必要的软件来响应主节点的管理,另外还有负责网络和负载均衡的接入代理。节点具体负责真正的容器的启停、状态监测、执行结果上报等工作。工作节点内部组件如下图所示:

工作节点主要由以下核心组件组成:

(1)本地的容器运行时环境,负责镜像管理以及pod和容器的真正运行。K8s本身并不提供容器运行时环境,但提供了接口,可以插入所选择的容器运行时环境,目前支持Docker和rkt。

(2)kubelet是节点上最主要的工作代理,用于汇报节点状态并负责维护pod的生命周期,也负责volume(CVI)和网络(CNI)的管理。kubelet是pod和节点API的主要实现者,负责驱动容器执行层。作为基本的执行单元,pod可以拥有多个容器和存储卷,能够方便地在每个容器中打包一个单一的应用,从而解耦了应用构建时和部署时所关心的事项,方便在物理机或虚拟机之间进行迁移。

(3)kube-proxy代理对抽象的应用地址的访问,服务提供了一种访问一群pod的途径, kube-proxy负责为服务提供集群内部的服务发现和应用的负载均衡(通常利用iptables规则),实现服务到pod的路由和转发。此方式通过创建一个虚拟的IP来实现,客户端能够访问此IP,并能够将服务透明地代理至pod。

(4)辅助组件,可选,Supervisord用来保持kubelet和Docker进程运行,Fluentd用来转发日志等。节点的重要属性有地址信息、状态、资源容量、节点信息。这些属性用来标识节点的运行状态,并可以被外部组件访问识别。

基本上这4类服务就能涵盖所有的在线交易类业务场景。

Kubernetes的整体架构的更多相关文章

  1. 【k8s连载系列】2. k8s整体架构

    # 一.Kubernetes的整体架构 学习k8s,最终目的是为了部署应用,部署一个完整的k8s, 就要知道k8s的组成.k8s主要包含两大部分: 中间包含三个绿色包的是master服务器. 下面是n ...

  2. Kubernetes 之上的架构应用

    规划并运转一个兼顾可扩展性.可移植性和健壮性的运用是一件很有应战的事情,尤其是当体系杂乱度在不断增长时.运用或体系 本身的架构极大的影响着其运转办法.对环境的依靠性,以及与相关组件的耦合强弱.当运用在 ...

  3. Spring技术内幕:设计理念和整体架构概述(转)

    程序员都很崇拜技术大神,很大一部分是因为他们发现和解决问题的能力,特别是线上出现紧急问题时,总是能够快速定位和解决. 一方面,他们有深厚的技术基础,对应用的技术知其所以然,另一方面,在采坑的过程中不断 ...

  4. TiDB 整体架构 结合yarn zookeeper分析架构

    TiDB 简介与整体架构| PingCAP https://www.pingcap.com/docs-cn/overview/ 真正金融级高可用 相比于传统主从 (M-S) 复制方案,基于 Raft ...

  5. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

  6. Underscore 整体架构浅析

    前言 终于,楼主的「Underscore 源码解读系列」underscore-analysis 即将进入尾声,关注下 timeline 会发现楼主最近加快了解读速度.十一月,多事之秋,最近好多事情搞的 ...

  7. jQuery 2.0.3 源码分析core - 整体架构

    拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...

  8. [转]Android App整体架构设计的思考

    1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...

  9. jQuery整体架构源码解析(转载)

    jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...

随机推荐

  1. CSAPP 之 ShellLab 详解

    前言 本篇博客将会详细介绍 CSAPP 之 ShellLab 的完成过程,实现一个简易(lou)的 shell.tsh 拥有以下功能: 可以执行外部程序 支持四个内建命令,名称和功能为: quit:退 ...

  2. README.exe 是的,你看错是EXE

    SmartIDE让你的README变成可执行文档,再也不用编写无用的文档,再也不必操心环境问题.   作为开发者,拿到一个新的代码库的时候一般都会先去看README文件,通过这个文件可以知道这套代码所 ...

  3. django框架4

    内容概要 编辑删除功能编写 虚拟环境 django路由层版本区别 视图函数的返回值 JsonResponse对象 form表单上传文件 request其他方法 FBV与CBV(基于函数的视图.基于类的 ...

  4. CNN Training Loop Refactoring Simultaneous Hyperameter Testing

    上例中, 尝试两个不同的值 为此: alt+shift可以有多个光标,再jupyter notebook中. alt+d,alt+shift,ctrl+鼠标左键多点几个,都可以同时选择多个目标,并进行 ...

  5. C#中的枚举器

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年6月28日. 一.先从可枚举类型讲起 1.1 什么是可枚举类型? 可枚举类型,可以简单的理解为: 有一个类,类中有挺多的数据,用一种统 ...

  6. .Net CLR GC动态获取函数头地址,C++的骚操作(慎入)

    前言: 太懒了,从没有在这里正儿八经的写过文章.看到一些人的高产,真是惭愧.决定稍微变得不那么懒.如有疏漏,请指正. .net的GC都谈的很多了,本篇主要是剑走偏锋,聊聊一些个人认为较为核心的细节方面 ...

  7. 【RocketMQ】MQ消息发送

    消息发送 首先来看一个RcoketMQ发送消息的例子: @Service public class MQService { @Autowired DefaultMQProducer defaultMQ ...

  8. 用Typescript 的方式封装Vue3的表单绑定,支持防抖等功能。

    Vue3 的父子组件传值.绑定表单数据.UI库的二次封装.防抖等,想来大家都很熟悉了,本篇介绍一种使用 Typescript 的方式进行统一的封装的方法. 基础使用方法 Vue3对于表单的绑定提供了一 ...

  9. gulp入门第一课你需要注意的

    安装 1.首先确保你已经正确安装了nodejs环境.然后以全局方式安装gulp. npm install -g gulp 2.初始化项目. npm init 3.如果想在安装的时候把gulp写进项目p ...

  10. Java中StringBuffer 简单学习,LeetCode中1323题运用

    StringBuffer 学习 StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符. deleteCharAt(int index) 删除char在这个指定序列inde ...