简介
Kubernetes 凭借其强大的功能,已成为部署和管理容器化工作负载的“容器编排平台”。然而,其架构的复杂性和动态特性给监控已部署工作负载和平台本身带来了重大挑战。对于使用者,保证 Kubernetes 的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控 Kubernetes 集群,保证集群有一个良好的可观测性。接下来将为大家介绍 Kubernetes 的可观测方案。
Kubernetes 可观测方案
面对 Kubernetes 监控的挑战,如技术栈复杂、学习成本高、监控指标不准确和缺乏合适的监控界面等问题,观测云提供了一个全面的解决方案。观测云是一款适用于全技术栈的监控和观测一体化产品,能够实现对云原生、中间件和应用的实时监控。
针对 Kubernetes,观测云提供了一套完整的监控解决方案,有效解决了 Kubernetes 监控中的多个痛点。观测云的数据采集依赖于 DataKit,无需额外的 agent,即可一站式采集以下数据:
- 节点基础指标:包括 CPU、内存、网络和磁盘 IO 等关键性能指标。
- Kubernetes 核心指标:涵盖运行中的 Deployment、StatefulSet、DaemonSet、Pod 和容器等指标数据。
- 控制平面监控:监控 Kubernetes 的内部组件,如 APIServer、ETCD、Kubelet 和 Scheduler 等。
- Kubernetes 事件:报告集群内的事件,包括资源状态变化、错误信息以及其他需要系统广播的消息。
通过观测云,用户可以简化 Kubernetes 监控的复杂性,降低学习成本,并确保监控数据的准确性,同时提供一个直观的监控界面,帮助用户更好地管理和优化 Kubernetes 集群。
部署 DataKit
登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml ,拷贝第 3 步中的 token 。
编辑 datakit.yaml ,把 token 粘贴到 ENV_DATAWAY 环境变量值中“token=”后面,设置环境变量 ENV_CLUSTER_NAME_K8S 的值并增加环境变量 ENV_NAMESPACE,这两个环境变量的值一般和集群名称对应,一个工作空间集群名称要唯一。
- name: ENV_NAMESPACE
value: xxxx
把 datakit.yaml 上传到可以连接到 Kubernetes 集群的主机上,执行如下命令。
kubectl apply -f datakit.yaml
kubectl get pod -n datakit
当看到状态是“Running”后表示安装 DataKit 成功。
开通采集器
DataKit 的 Container 采集器,支持采集 Kubernetes 的指标、事件、stdout 日志,不依赖 metrics-server、node-exporter、kube-state-metrics。DataKit 默认开通了容器采集器,为了采集 Pod 指标,需要增加环境变量。
- name: ENV_INPUT_CONTAINER_ENABLE_POD_METRIC
value: "true"
组件指标采集,需要使用 DataKit 的 KubernetesPrometheus 采集器,它根据自定义配置实现自动发现集群中暴露的 metrics 并进行采集。下面列出了各组件的 metrics 接口,使用方式请移步到对应的最佳实践。
组件 | metrics 接口 |
---|---|
Etcd | https://PodIP:2379/metrics |
API Server | https://NodeIP:6443/metrics |
Controller Manager | https://NodeIP:10257/metrics |
Kubelet | https://NodeIP:10250/metrics |
Scheduler | https://NodeIP:10259/metrics |
指标
点击「指标」 -「指标管理」,输入“kube”,就能查询采集到的指标。
事件
点击「日志」 -「指标管理」,数据来源选择“kubernets_events”。
监控视图
点击「基础设施」 -「容器」-「分析看板」-「Kubernetes」,查看 Kubernetes 集群看板。
点击「基础设施」 -「容器」-「分析看板」-「Kubernetes Event」,查看 Kubernetes 事件看板。
关键指标
Kubernetes 监控指标主要包括:节点指标、资源指标、Pod 指标、容器指标等。这些指标归属不同的指标集。下面列出部分指标,更多指标请参阅集成文档。
kubernetes 指标集
指标 | 描述 | 类型 |
---|---|---|
container | 容器数量 | Int |
daemonset | daemonset 数量 | Int |
deployment | deployment 数量 | Int |
statefulset | statefulset 数量 | Int |
node | 节点数量 | Int |
pod | Pod 数量 | Int |
service | Service 数量 | Int |
kube_pod 指标集
指标 | 描述 | 单位 |
---|---|---|
cpu_limit_millicores | CPU 限额 | ms |
cpu_usage | 基于 1 核的 CPU 使用率 | Percent |
cpu_usage_base100 | CPU 使用率,最大值 100% | Percent |
mem_limit | 内存限额 | Bytes |
mem_usage | 内存使用 | Bytes |
mem_used_percent | 内存使用率 | Percent |
mem_used_percent_base_limit | 基于限额的内存使用率 | Percent |
network_bytes_rcvd | 接收网络流量 | Bytes |
network_bytes_sent | 发生网络流量 | Bytes |
ready | 就绪数量 | Count |
restarts | 重启次数 | Count |
监控器(告警)
通过合理配置监控器,可以及时发现 Kubernetes 潜在风险,观测云也提供了相应的模板供客户参考使用。
事件
Kubernetes 事件(Events)是 Kubernetes 集群中用于记录和监控集群内发生的各种状态变化和操作的通知。这些事件包括但不限于 Pod 的启动和停止、配置更改、资源不足、错误状况等。通过这些事件告警,可以更容易地理解和诊断集群中的问题和状态,确保容器化应用程序的平稳高效运行。
Pod 重启
Pod 内存使用率过高
Pod 内存使用率超过 95%,触发告警。
Pod CPU 使用率过高
Pod CPU 使用率超过 95%,触发告警。
如需更多监控器可以按照实际生产需求进行配置。
总结
Kubernetes 可观测对于维护容器化应用程序的健康、性能和可靠性至关重要。它是一种主动方法,涉及持续跟踪、分析和可视化 Kubernetes 集群的健康和性能。它提供对资源利用率、系统行为和潜在瓶颈的见解,能够在应用程序或集群本身中断之前及早发现和解决潜在问题,确保最佳运行。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。