写点什么

Kubernetes 监控实践(1):K8s 的工作原理与监控实践

  • 2020-02-07
  • 本文字数:2832 字

    阅读完需:约 9 分钟

Kubernetes监控实践(1):K8s的工作原理与监控实践

一、Kubernetes 介绍

Kubernetes(K8s)是一个开源平台,能够有效简化应用管理、应用部署和应用扩展环节的手动操作流程,让用户更加灵活地部署管理云端应用。


作为可扩展的容错平台,K8s 几乎能够部署在所有基础设施中,与 Google Cloud、MS Azure 及 AWS 等公有云、私有云、混合云、服务器集群、数据中心等完美兼容。Kubernetes 最大的亮点在于支持容器自动部署和自动复制。这也是大量云端微服务基础设施部署在 K8s 上的原因。

二、K8s 由来

K8s 最初是由 Google 工程师设计开发的,于 2014 年上线并开源,目前由来自微软、红帽、IBM 及 Docker 等软件巨头的社区贡献者维护升级。


Google 不仅开源了公司整个基础设施在容器中的运行方式,还积极开发 Linux 容器技术,支撑 Google 所有云服务。K8s 是基于云平台 15 年的生产工作负载运行经验设计出来的,用于处理成千上万个容器。Google 每周部署 20 多亿个容器。在 K8s 上线前,Google 主要通过内部开发平台 Borg 进行容器部署。Borg 是大型内部集群管理系统,运行了无数应用和集群任务,多年的开发经验奠定了 K8s 技术的基础。

三、K8s 工作原理

K8s 本质上是分部在不同机器上的容器化应用的协调系统,目的是帮助开发人员通过 K8s 的可预测性、可扩展性和高可用性管理容器化应用和服务的整个生命周期,通过更高水平的抽象,将多个机器统一成一个机器。这对于大型环境的运行来说至关重要。


K8s 不仅能够优化 Docker 的镜像运行能力和容器管理能力,还能兼容 rkt 和 CoreOS 等容器引擎。


1569550381586071835.jpeg


上方架构图展示了 K8s 工作原理。图中包含一组 Master 组件,其中包括很多 pod。Pod 针对特定应用的“逻辑主机”进行建模。每个 Pod 均包含一个或多个应用容器、存储资源、唯一的网络 IP 及容器运行细节。Pod 是容器的最小原子单元。理论上,Pod 中包含一个或多个高度耦合的应用。理想情况下,每个 Pod 中包含一个容器。


每个进程包含一个 API server、一个 scheduler 和多个 controller。


API server 负责暴露 K8s API、处理 REST 操作及后续更新。Scheduler 负责将未部署的 Pod 匹配到合适虚拟机或物理机上。如果没有合适的机器,则 Pod 将处于未分配状态,直至出现合适的节点。Master 运行集群级别的其他功能,通过嵌入式 controller 完成创建端点、发现节点、复制控制等操作。由于 controller 设计灵活且可扩展,Kube 管理员可自行创建 controller。Kube 通过 API server 监控 K8s 集群的共享状态,并对集群状态进行调整,确保当前状态与理想状态一致。


K8s 提供支持容器化应用统一自动化、控制和升级的各项功能,包括企业级容器部署、内置服务发现、自动扩展、持久化存储、高可用、集群互通和资源装箱等。


依赖这些功能,K8s 实现了对单体应用、批处理应用及高度分布式微服务应用等不同应用架构的支持。

四、K8s 监控实践中的挑战

2014 年上线以来,K8s 一直在变革容器技术,已经成为快速批量启动应用的关键工具。与此同时,挑战也随之而来,容器编排极其复杂。


K8s 虽然已经极大地简化了容器实现和管理过程中从调度、配置到状态自动维护等一系列任务的操作难度,但监控方面依然存在挑战:


  • 相互通信的应用分布在不同的云服务平台上。K8s 本质上是一个通用平台,用户可在平台上自由部署应用。企业一般会采用多云端解决方案,不仅能够减少对单一云服务平台的依赖,还能缩短故障停机时间,避免数据丢失。但这种部署方式也给实时数据抓取和应用状态监控带来了挑战。

  • 在动态基础设施上不断迁移应用。由于应用处于频繁迁移状态,因此很难做到所有平台和协议之间的完全可见,这就会隐藏系统的瓶颈问题。很多公司的基础设施上都运行着多个应用,因此这种问题是不可避免的。如果没有稳健的监控系统,用户便无法发现应用的潜在问题。

  • 监控对象数量繁多且极为复杂:K8s 由很多组件构成,非常复杂,因此要监控 K8s,就必须监控下列所有对象:

  • 集群容量和资源利用情况:(a)Node:确保 K8s 所有节点的状态,监控 CPU、内存和硬盘的使用情况;(b)Pod:确保所有已实现 Pod 状态正常;(c)Container:根据配置的消耗上限监控 CPU 和内存的消耗情况。 应用:根据请求率、吞吐量、错误率监控集群中应用的性能和可用性。

  • 终端用户体验:监控移动应用和浏览器性能,优化加载时间和可用性,提高客户满意度。

  • 配套基础设施:前文提到,K8s 的运行平台也非常重要。

  • 操作细节:K8s 的所有核心组件(即 kubelet、Kube controller manager 和 Kube scheduler)都有很多标记。这些标记决定了集群的操作和运行方式,其初始默认值一般较小,适用于规模较小的集群。随着集群规模的扩大,用户需要及时对集群进行调整,并监控 K8s 的标签和注释等细节。


但监控工具从 K8s 抓取大量数据时会影响集群性能甚至导致集群故障,因此需要确定监控基线。需要诊断故障时,可适当调高基线值。


调高基线值的同时要部署更多 master 和 node,提高可用性。涉及大规模部署时,可单独部署专门存储 K8s 数据的集群,这样能够保证在创建监控事件、检索监控数据时,主要实例的性能不受影响。

五、从源头上监控 K8s

和很多容器编排平台一样,K8s 具备基本的服务器监控工具。用户可对这些工具进行适当调整,以便更好地监控 K8s 的运行情况。主要工具如下:


  • K8s 仪表盘:插件工具,展示每个 K8s 集群上的资源利用情况,也是实现资源和环境管理与交互的主要工具。

  • 容器探针:容器健康状态诊断工具。

  • Kubelet:每个 Node 上都运行着 Kubelet,监控容器的运行情况。Kubelet 也是 Master 与各个 Node 通信的渠道。Kubelet 能够直接暴露 cAdvisor 中与容器使用相关的个性化指标数据。

  • cAdvisor:开源的单节点 agent,负责监控容器资源使用情况与性能,采集机器上所有容器的内存、网络使用情况、文件系统和 CPU 等数据。

  • cAdvisor 简单易用,但也存在不足:一是仅能监控基础资源利用情况,无法分析应用的实际性能;二是不具备长期存储和趋势分析能力。

  • Kube-state-metrics:轮询 Kubernetes API,并将 Kubernetes 的结构化信息转换为 metrics。

  • Metrics server:Metrics server 定时从 Kubelet 的 Summary API 采集指标数据,并以 metric-api 的形式暴露出去。


整体监控流程如下:


  • cAdvisor 默认安装在所有集群节点上,采集容器和节点的指标数据。

  • Kubelet 通过 kubelet API 将指标数据暴露出去。

  • Metrics 判断所有可用节点,请求 kubelet API 上送容器和节点使用情况数据,然后通过 Kubernetes 聚合 API 将指标数据暴露出去。


上述基础性工具虽然不能提供详细的应用监控数据,但能够帮助用户了解底层主机和 K8s 节点的情况。


一般来说,K8s 集群管理员主要关注全局监控,而应用开发人员则主要关注应用层面的监控情况。但两者的共同诉求都是在控制投入成本的前提下尽可能全面地监控系统、采集数据。下周文章中,我们将介绍两个可行的监控方案:Prometheus 和 Sensu。两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪 K8s 关键组件的性能、定位故障、接收预警。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/304


2020-02-07 20:451536

评论

发布
暂无评论
发现更多内容

北京哪家web前端开发机构比较好?

小谷哥

2021最强网易Java岗面试题,(实战篇)进大厂必备~不看后悔

钟奕礼

Java 程序员 java面试 java编程

跬智信息(Kyligence)荣登「甲子20」中国数据智能领域最具商业潜力科技企业榜

Kyligence

大数据 数据分析 数据智能 指标中台

openEuler 倡议建立 eBPF 软件发布标准

openEuler

开源 云原生 操作系统 内核 ebpf

互联网时代,云计算的 6 大特征

Finovy Cloud

云计算 云渲染

mysql转国产数据库Gbase 8s 常见函数脚本

@下一站

数据库 12月日更 12月月更 Gbase8s 国产软件

学习大数据该怎么选择培训机构?

小谷哥

chatGPT的爆火,是计算机行业这次真的“饱和”了?

千锋IT教育

通过WSL2运行GUI程序

吴脑的键客

WSL2 GUI

第五届“强网”拟态防御国际精英挑战赛在南京举行

科技热闻

瓴羊Quick BI 填报组件让数据分析和可视化呈现轻而易举

对不起该用户已成仙‖

java软件培训班毕业后找工作吗

小谷哥

从vivo的创新方法论中,读懂高端突破的“因果”

脑极体

低代码实现探索(五十四)低代码的描述文本

零道云-混合式低代码平台

2022-12-15:寻找用户推荐人。写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都 不是 2。 对于示例数据,结果为: +------+ | name | +------+ | Wil

福大大架构师每日一题

数据库· 福大大

行业分析| 智慧头盔在快对讲上的应用与实践

anyRTC开发者

音视频 智能设备 视频通话 快对讲 智慧头盔

漏洞挖掘之命令注入漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

当打造一款极速湖分析产品时,我们在想些什么

StarRocks

数据湖 湖仓一体

专科非科班怎么选择培训机构

小谷哥

可视化:数据可视化发展史

Data 探险实验室

数据分析 可视化 数据可视化

AH协议

穿过生命散发芬芳

12月月更 AH协议

聊聊产品中的状态机设计

产品海豚湾

产品经理 产品设计 产品开发 需求分析 主业务流程梳理

零代码平台在政府智慧城市领域的应用

明道云

ToB业务迎来连续增长,腾讯云的华丽转身

ToB行业头条

极光笔记 | 以静制动:行为触发营销助力用户转化

极光JIGUANG

营销 运营 消息推送 用户运营

零基础学web前端,哪些培训机构比较好

小谷哥

KCL 与其他 Kubernetes 配置管理工具的异同 - Kustomize 篇 [一个自研编程语言能做什么?(系列 2)]

Peefy

开发者 工具 编程语言 Kubernetes Serverless #DevOps

架构实战 - 模块3作业

mm

学生管理系统架构 #架构实战营

明道云联合契约锁共建人事场景电子签约解决方案

明道云

socket是并发安全的吗

C++后台开发

网络编程 socket 多线程 TCP/IP Linux服务器开发

5分钟带你彻底掌握async底层实现原理!

千锋IT教育

Kubernetes监控实践(1):K8s的工作原理与监控实践_文化 & 方法_译文_InfoQ精选文章