Kubernetes 可观测最佳实践

    简介

    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 集群的健康和性能。它提供对资源利用率、系统行为和潜在瓶颈的见解,能够在应用程序或集群本身中断之前及早发现和解决潜在问题,确保最佳运行。

    联系我们

    加入社区

    微信扫码
    加入官方交流群

    立即体验

    在线开通,按量计费,真正的云服务!

    立即开始

    选择观测云版本

    代码托管平台