NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:451324

评论

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

“程”风破浪的开发者|学习力是这个时代的终极竞争力

石云升

学习方法 知行合一 10月月更 “程”风破浪的开发者

揭开epoll面纱:Nginx,Redis等都在用的多路复用,到底是什么?

董哥的黑板报

源码 高并发 多路复用 C语言 网络

【web 开发基础】PHP 的流程控制之多向条件分支结构 -PHP 快速入门 (14)

迷彩

10月月更 PHP基础 if条件分支 多条件分支

高效IO之零拷贝技术

乌龟哥哥

10月月更

上网冲浪总是慢?试试华为云CDN,高效加速真体验!

路过的憨憨

架构实战训练营模块 3 作业

atcgnu

ARM架构下的Docker环境,OpenJDK官方没有8版本镜像,如何完美解决?

程序员欣宸

Java Docker 10月月更

2022-10-26:以下go语言代码输出什么?A:1 3 2;B:1 2 3;C:3 1 2;D:3 2 1。 package main import “fmt“ type temp struc

福大大架构师每日一题

golang 福大大 选择题

3分钟快速了解什么是千兆以太网?

wljslmz

网络技术 以太网 10月月更 千兆以太网

Laravel-EloquentORM高级部分解析

乌龟哥哥

10月月更

技术同学如何面对裁员浪潮?

老张

职场发展 求职面试

“程”风破浪的开发者|数据包分析思路方法分享

穿过生命散发芬芳

学习方法 数据包分析 10月月更 “程”风破浪的开发者

阶段三作业

Johnny

#架构实战营

如何快速解决恶意进程导致CPU飙升问题 | Linux | 运维

Appleex

Linux centos 运维 cpu 服务器

OverOps在根本原因分析中重要性

阿泽🧸

10月月更 OverOps

华为云CDN为什么能够打通数据传输阻碍?

路过的憨憨

华为

网络畅通的“无名英雄”:华为云CDN,让数据传输又快又稳

路过的憨憨

华为

模块三作业-外包学生管理系统架构设计

Diana S

架构训练营

“程”风破浪的开发者|OpenHarmony 开发环境搭建

鸿蒙之旅

OpenHarmony 10月月更 “程”风破浪的开发者

架构实战营 - 学生管理系统架构设计

π

#架构实战营

数据湖(十二):Spark3.1.2与Iceberg0.12.1整合

Lansonli

数据湖 10月月更

使用NeuVector开展云原生安全测试

QE_LAB

云原生 安全测试

String源码分析(一)

知识浅谈

10月月更

智慧城市、数字政府、城市大脑、一网统管之间有什么关系

雨果

智慧城市 城市大脑 数字政府 一网统管

“程”风破浪的开发者|研究生学习路程回顾

Studying_swz

学习方法 “程”风破浪的开发者

速度快、时延低、更安全,华为云CDN助力企业创新发展!

路过的憨憨

华为

“程”风破浪的开发者|Web3.0去中心化预言机网络技术剖析

小明Java问道之路

架构 预言机 Web3.0 10月月更 “程”风破浪的开发者

一文带你了解 Python 中的继承知识点

宇宙之一粟

Python 面向对象 继承 10月月更

Impala基本架构

穿过生命散发芬芳

impala 10月月更

【web 开发基础】PHP 的流程控制之嵌套(巢状)条件分支结构 -PHP 快速入门 (15)

迷彩

嵌套条件表达式 10月月更 web开发基础 PHP基础

node版本管理器:nvm 和 n区别

乌龟哥哥

10月月更

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