2023-05-23Kubernetes

Kubernetes起源于Google的Borg系统。Borg是在2003年开发的一个大规模集群管理系统。它支撑Google数千个应用程序(十万个应用程序)。

运行时,Kubernetes指定了CRI,网络指定了CNI,存储指定了CSI,各种设备通过device plugin 接入。总之,它就像一个钢筋混凝土的框架,至于最终的房间的设计都是交给第三方根据自己的业务场景去实现的。

Yaml是一种数据组织格式,非常强大。与JSON通过大括号的方法分级相比,Yaml采用了缩进的方式组织数据。Yaml文件支持三种数据结构,分别是散列表、数组及复合结构。

声明式API是相对于命令式API来说的。所谓的声明式API是指只需要告诉机器最终结果,不用关心实现过程和细节,而命令式API则是一种面向过程的操作,需要告诉机器每一步应如何执行,才能达到最终目标。

声明式API是Kubernetes最重要的设计思想,通过Yaml或者json文件定义最终的资源形态,剩下的交给 Kubernetes去完成。Kubernetes获取用户提交的资源声明后,通过多个组件相互协作,最终满足用户定义的资源需求。

Kubernetes是容器管理系统,但是它并不是将单个容器当作管理单位的。容器的设计哲学是希望在一个容器里面只运行一个进程,那么针对这个进程的监控程序该如何部署,以及和这个进程强耦合的sidecar程序将如何去部署则变得复杂起来。Kubernetes创新地将多个容器组合到一起,产生一个新的资源管理单位,叫作Pod。Pod是Kubernetes调度和管理的最小单位,每个Pod都是由若干个容器组成,Pod共享网络命名空间和存储。

就是通过Pod的设计方式将多个紧密关联的容器共享网络、存储等资源,通过对Pod生命周期的管理,完成对一组容器的生命周期管理。


Service 和Endpoint

容器的地址不是固定的。如果集群内部的容器相互调用或者是被集群外部访问调用, Kubernetes提供了一种负载均衡和服务发现机制。Service是Kubernetes提供的一种负载均衡器,每个服务都有一个虚IP(headless Service除外),这个虚IP是固定不变的,实现方式可以是iptables或者ipvs,这个IP并非是绑定到某一个网卡上面,所以ping是不同的。

Kubernetes物理资源抽象

Kubernetes 将管理的物理资源抽象成指定的类型和对应的计量单位,如 CPU (millicores)、内存(B)、磁盘和GPU等。其中,CPU和内存是Kubernetes原生支持的,其他资源扩展可以通过device plugin方式加入。这些资源可以分为两种,一种是可压缩资源,譬如CPU,当Pod使用超过设置的limits值时,Pod中进程使用CPU会被限制,但不会被kill;另一种是将不可压缩资源当作资源,譬如内存。当资源不足时,先kill掉优先级低的Pod。在实际使用过程中,通过OOM分数值来实现,OOM分数值为0~1000。当然,磁盘也属于不可压缩的资源。

Kubernetes组件分析

Kubernetes 的节点包含两种角色:Master 节点和 Node 节点。Master 节点上面部署apiserver、scheduler、controllermanager(replication controller、node controller等), Node节点上面部署kubelet和proxy。当然也可以将它们部署到一起,只是生产环境通常不建议这样做。Kubernetes整体架构如图10-1所示。

Kubernetes API 接口主要分为组、版本和资源三层,接口层次如图10-2所示。对于“/apis/batch/v1/jobs”接口,batch是组,v1是版本,jobs是资源。Kubernetes的核心资源都放在“/api”接口下,扩展的接口放在“/apis”下。

Apiserver启动后会将每个版本的接口都注册到一个核心的路由分发器(Mux)中。当客户端请求到达Apiserver后,首先经过Authentication认证和Authorization授权。认证支持Basic、Token及证书认证等。授权目前默认使用的是RBAC。经过路由分发到指定的接口,为了兼容多个资源版本,请求的不同版本的资源类型会统一转化为一个内部资源类型,然后进入Admission准入控制和Validation资源校验,在准入控制采用插件机制,用户可以定义自己的注入控制器验证,并更改资源配置。资源校验主要是验证参数是否合法,必传参数是否齐备等。最后再转化到用户最初的资源版本,并保存到Etcd中。Apiserver请求处理流程图如图10-3所示。

其他容器管理平台

除了Kubernetes,还有其他一些容器管理平台,比如OpenShift、Rancher等管理平台。在之前的版本中,它们都独立开发了一套容器管理方案,但2018年后,无论是OpenShift,还是Rancher,都已经全面转向Kubernetes,把重点放到了Devops及Kubernetes集群管理等方面,容器的管理则全部交给Kubernetes。

Kubernetes的生态圈

第一个出场的就是Prometheus,结合cAdvisor和各种exporter采集器,Prometheus可以监控容器、主机及Kubernetes性能指标,并做到自动发现(不需要为每一个容器配置监控项),而且支持性能指标告警。

Prometheus 是一套开源的系统监控报警框架。它提供了多维度数据模型,每个数据指标都可以关联很多 label,这个和Kubernetes 的 label 思想一致,松耦合、高度自由定制数据维度。举例来说,每个容器的CPU指标都可以关联容器、Pod、容器所在主机、namespace等多个维度,那么在查询的时候可以根据这些 label自由关联,并且支持promsql,允许用户以类 sql 的方式查询指标。Prometheus 不仅提供了高效的本地时序数据存储,还可以支撑各种远端时序数据库,如OpenTSDB、InfluxDB等,极大地扩展了Prometheus的数据存储能力。

Prometheus采用拉取(PULL)的方式采集数据,这与采用上报(PUSH)的采集方式不同,拉取方式有以下几个特点:第一是拉取方式对于客户端没有感知,客户端只需要不断采集数据,既不用关心数据后续的处理,也不需要维护数据状态(哪些数据已经上报,哪些数据上报失败需要重试,还有哪些还未上报),可以做到更加简单。第二是增强了数据汇聚服务的可控性,数据的汇聚节点可以根据当前系统情况,调整汇聚的周期和数据量,避免大量客户端一起上报数据,压垮汇聚节点。

Filebeat

Filebeat 是一款由 Go 语言编写的具有高并发能力的日志采集插件。Filebeat 的工作原理如图11-5所示:其中,Harvester负责逐行读取文件,每个文件都对应一个Harvester,然后Harvester 将采集的数据发送到 Spooler,经过 Spooler 整合后发送到不同的后端,如Elasticsearch或者Kafka等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容