本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫。

Hi,大家好,欢迎大家和我一起学 K8S,这是系列第 4 篇。

任何技术的诞生,都会经历从架构设计到开发测试的过程,好的技术,往往也会有一套好的架构。架构是个好东西,它能帮助我们站在高处看清楚事物的整体结构,避免过早地进入细节而迷失方向。

上篇文章扫清了 K8S 的一些基本概念,今天这篇文章我们就来看看 K8S 的架构。

先上图:

图中包括两种类型的节点:Master 和 Node,每个节点上运行着多种 K8S 服务。

Master 节点

Master 是 K8S 集群的大脑,运行着如下 Daemon 服务:kube-apiserver、kube-controller-manager、kube-scheduler、etcd 等。

API Server

如果把 K8S 环境看作是一个公司,那 API Server 就是这个公司的基础平台部,是公司最为核心的技术能力输出出口。它对外提供 HTTP/HTTPS REST API,统称 K8S API,可以供各类客户端工具(CLI 或 WebUI)、K8S 其他组件,以及第三方的平台接入。对内提供了 K8S 各类资源(如 Pod、Deployment、Service等)的增删改查和监控等操作,是集群内各个功能模块之间数据交互和通信的中心枢纽。

Controller Manager

Controller Manager 更像是公司的人力资源部,负责统筹公司的人员分布。它管理着 K8S 各类资源的生命周期,保证资源处于预期状态,如果现有状态和预期状态不符,它会自动化执行修正。

Controller Manager 由多种 Controller 组成,包括 Replication Controller、Node Controller、ResourceQuota Controller、Namespace Controller、ServiceAccount Controller、Service Controller、Token Controller 及 Endpoint Controller 等。每种 Controller 都负责一种具体的资源管控流程,而 Controller Manager 正是这些 Controller 的核心管理者。

Scheduler

Scheduler 则像是公司各个部门的项目经理之类的角色,负责将具体的人力放到他们擅长的位置上,知人善用。具体来说,Scheduler 负责将待调度的 Pod 对象按照特定的调度策略绑定到集群中某个合适的节点上,调度策略会综合考虑集群的拓扑结构、节点的负载情况、以及应用对高可用、性能、数据亲和性的需求。

etcd

etcd 是一个高可用的分布式数据库,负责保存 K8S 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会及时告知集群中的其他组件。

kubectl

kubectl 是 K8S 的 CLI 工具,这是使用 K8S API 建立的一套命令行工具,使用它,可以非常方便地管理 K8S 集群。

Node 节点

Node 是 K8S 集群的具体执行者,也运行着多种服务,如:kubelet、kube-proxy、container runtime、Pod 网络等。Node 可以看作是 Master 的代理,负责处理 Master 下发到本节点的任务,管理 Pod 和 Pod 中的容器,定期向 Master 汇报自身资源的使用情况。

kubelet

kubelet 更像是部门中各个小组的 Leader,对外从 API Server 拿资源,对内负责小组内各种资源的管理,比如从 Master 拿到 Pod 的具体配置信息(image、Volume 等)之后,kubelet 根据这些信息创建和运行容器。

kube-proxy

kube-proxy 则像穿插在公司各个部门之间的接口人,对内和内部人员沟通,对外协调部门之间的各种事宜,展示部门风采。kube-proxy 作用于 Service,通过前面学习,我们知道 Service 是对一组 Pod 的抽象,统一对外提供某种服务,当外部访问 Service 时,实际上是需要访问 Service 所管辖的 Pod 中的容器,kube-proxy 在这里就是负责将访问 Service 的数据流转发到后端的容器,如果有多个副本,kube-proxy 会实现负载均衡。

cAdvisor

cAdvisor 对 Node 上的资源进行实时监控和性能数据采集,包括 CPU 使用情况、内存使用情况、网络吞吐量及文件系统使用情况等。cAdvisor 集成在 kubelet 中,当 kubelet 启动时会自动启动 cAdvisor,一个cAdvisor 仅对一台 Node 机器进行监控。

container runtime

container runtime 是真正运行容器的地方,为容器提供运行环境,主流的三种 container runtime 是 lxc、runc 和 rkt,K8S 都支持它们,但常用的事 runc,原因是 runc 是 Docker 默认的 runtime。在 K8S 的容器应用中,Docker 是主流。

OK,K8S 架构介绍就到此为止。

最后,还是继续送书,容器网络专家倪朋飞写的《K8S 指南》电子书,如有需要后台回复“K8S”(之前回复过就不用回复了)。如需加群学习回复“加群”。

下文我们开始对 K8S 的说明书一探究竟。


我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。

Kubernetes 笔记 04 架构是个好东西的更多相关文章

  1. JSP笔记04——架构(转)

    原始内容:https://www.tutorialspoint.com/struts_2/basic_mvc_architecture.htm Web服务器需要一个JSP引擎,即一个处理JSP页面的容 ...

  2. Kubernetes 学习笔记-- kafka往couchdb里倒东西

    首先吐槽下国内这些论坛的技术精神,不是我崇洋媚外,有些复读机烦不烦啊,别人的东西吃进去吐出来好玩么? 还有一些不懂装懂,这种最可恶,明明自己都不明白自己在写什么,还是往精华区发,简直离谱,知道自己多挣 ...

  3. Kubernetes 之上的架构应用

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

  4. JS自学笔记04

    JS自学笔记04 arguments[索引] 实参的值 1.对象 1)创建对象 ①调用系统的构造函数创建对象 var obj=new Object(); //添加属性.对象.名字=值; obj.nam ...

  5. Kubernetes笔记(二):了解k8s的基本组件与概念

    前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...

  6. Redis:学习笔记-04

    Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...

  7. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  8. Docker Kubernetes 高可用架构设计

    Docker Kubernetes 高可用架构设计 官方方案:保证master端不发生单点故障. 官方使用一台Load Balancer负载均衡代理3台master端,终端与etcd与work Nod ...

  9. 机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes)

    机器学习实战(Machine Learning in Action)学习笔记————04.朴素贝叶斯分类(bayes) 关键字:朴素贝叶斯.python.源码解析作者:米仓山下时间:2018-10-2 ...

随机推荐

  1. Redis数据结构之skiplist(续)

    本文摘抄于<Redis内部数据结构详解-skiplist> 一.skiplist的由来 skiplist,顾名思义,首先它是一个list.实际上,它是在有序链表的基础上发展起来的. 我们先 ...

  2. python第六天(元组、字典、集合)

    一.元组(tuple) 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要用来读 定义:与列表类型相比,只不过把[ ]换成() age=(11,22,33,44,55)prin ...

  3. 032 Java再次总结

    1.大纲 多线程怎么用的,线程池,事务,传播机制与隔离级别,反射,泛型,数据库引擎的区别,数据库merge,窗口函数,fastJson,JVM调优,GC钩子,Linux的awk,shell,HashM ...

  4. SQL 收缩日志

    USE [master]ALTER DATABASE RcBalance SET RECOVERY SIMPLE WITH NO_WAITALTER DATABASE RcBalance SET RE ...

  5. 微信小程序,转盘抽奖

    微信小程序大转盘 代码源码:https://github.com/yewook/Lottery-turntable

  6. 第六章 对象-javaScript权威指南第六版(三)

    6.3 删除内容 delete运算符可以删除对象的属性. delete运算符只能删除自有属性,不能删除继承属性. delete表达式删除成功或没有任何副作用时,它返回true. 6.4 检测属性 用i ...

  7. UOJ.311.[UNR#2]积劳成疾(DP)

    UOJ 序列中的每个位置是等价的.直接令\(f[i][j]\)表示,\(i\)个数的序列,最大值不超过\(j\)的所有序列每个长为\(k\)的子区间最大值的乘积的和. 由\(j-1\)转移到\(j\) ...

  8. Spring系列__01HelloWorld

    Spring作为一款成熟的Java框架,其优点和意义不用我多说,可以参考:https://m.w3cschool.cn/wkspring/pesy1icl.html 今天开始写一下Spring家族的总 ...

  9. sqlzoo:using group by and having

    For each continent show the number of countries: SELECT continent, COUNT(name) FROM world GROUP BY c ...

  10. Cocos2d-js和Android交互

    说白了,就是JavaScript和Java之间的函数互相调用. 先看一下效果 有了这个交互,为了以后接sdk做准备. 要点: javascript调用java: jsb.reflection.call ...