在 Kubernetes 上运行 Metricbeat编辑

您可以在 Kubernetes 上使用 Metricbeat 的 Docker 镜像 来检索集群指标。

在 Kubernetes 上运行 Elastic Cloud?请参阅 在 ECK 上运行 Beats

Kubernetes 部署清单编辑

您将 Metricbeat 部署为 DaemonSet,以确保集群中的每个节点上都运行一个实例。这些实例用于从主机检索大多数指标,例如系统指标、Docker 统计信息以及 Kubernetes 之上运行的所有服务的指标。

此外,DaemonSet 中的一个 Pod 将持续持有 *领导者锁*,使其负责处理集群范围的监控。此实例用于检索仅对整个集群唯一的指标,例如 Kubernetes 事件或 kube-state-metrics。您可以在 自动发现 中找到有关领导者选举配置选项的更多信息。

注意:如果您从旧版本升级,请确保没有来自旧清单的冗余部分。部署规范及其 ConfigMaps 可能是这种情况。

默认情况下,所有内容都在 kube-system 命名空间下部署。要更改命名空间,请修改清单文件。

要下载清单文件,请运行

curl -L -O https://raw.githubusercontent.com/elastic/beats/8.14/deploy/kubernetes/metricbeat-kubernetes.yaml

如果您使用的是 Kubernetes 1.7 或更早版本: Metricbeat 使用 hostPath 卷来持久化内部数据。它位于 /var/lib/metricbeat-data 下。清单使用文件夹自动创建 (DirectoryOrCreate),它是在 Kubernetes 1.8 中引入的。您需要从清单中删除 type: DirectoryOrCreate 并自己创建主机文件夹。

设置编辑

默认情况下,Metricbeat 会将事件发送到现有的 Elasticsearch 部署(如果存在)。要指定不同的目标,请在清单文件中更改以下参数

- name: ELASTICSEARCH_HOST
  value: elasticsearch
- name: ELASTICSEARCH_PORT
  value: "9200"
- name: ELASTICSEARCH_USERNAME
  value: elastic
- name: ELASTICSEARCH_PASSWORD
  value: changeme
在控制平面节点上运行 Metricbeat编辑

Kubernetes 控制平面节点可以使用 污点 来限制可以在其上运行的工作负载。要在控制平面节点上运行 Metricbeat,您可能需要更新 DaemonSet 规范以包含适当的容忍度

spec:
 tolerations:
 - key: node-role.kubernetes.io/control-plane
   effect: NoSchedule
Red Hat OpenShift 配置编辑

如果您使用的是 Red Hat OpenShift,您需要在清单文件中指定其他设置并授予 metricbeat 服务帐户对特权 SCC 的访问权限

  1. 在清单文件中,编辑 metricbeat-daemonset-modules ConfigMap,并在 data 部分的 kubernetes.yml 下指定以下设置

      kubernetes.yml: |-
        - module: kubernetes
          metricsets:
            - node
            - system
            - pod
            - container
            - volume
          period: 10s
          host: ${NODE_NAME}
          hosts: ["https://${NODE_NAME}:10250"]
          bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
          ssl.certificate_authorities:
            - /path/to/kubelet-service-ca.crt
        - module: kubernetes
          metricsets:
            - proxy
          period: 10s
          host: ${NODE_NAME}
          hosts: ["localhost:29101"]

    kubelet-service-ca.crt 可以是包含 Kubelet API 中使用的证书颁发者的任何 CA 捆绑包。根据 Openshift 的每个特定安装,可以在 secretsconfigmaps 中找到它。在某些安装中,它可以作为服务帐户密钥的一部分提供,位于 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt。如果使用 Openshift 安装程序 用于 GCP,则以下 configmap 可以安装在 Metricbeat Pod 中,并在 ssl.certificate_authorities 中使用 ca-bundle.crt

    Name:         kubelet-serving-ca
    Namespace:    openshift-kube-apiserver
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    ca-bundle.crt:
  2. 如果使用 https 访问 kube-state-metrics,请在 state_* 度量集的 kubernetes 自动发现配置下,将以下设置添加到 metricbeat-daemonset-config ConfigMap 中

      bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      ssl.certificate_authorities:
        - /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
  3. 授予 metricbeat 服务帐户对特权 SCC 的访问权限

    oc adm policy add-scc-to-user privileged system:serviceaccount:kube-system:metricbeat

    此命令使容器能够以管理员身份在 OpenShift 上获得特权。

  4. 如果 elastic-agent 运行的命名空间设置了 "openshift.io/node-selector" 注释,则 elastic-agent 可能无法在所有节点上运行。在这种情况下,请考虑覆盖命名空间的节点选择器以允许在任何节点上调度

    oc patch namespace kube-system -p \
    '{"metadata": {"annotations": {"openshift.io/node-selector": ""}}}'

    此命令将项目的节点选择器设置为空字符串。如果您不运行此命令,默认的节点选择器将跳过控制平面节点。

对于 OpenShift 4.x 之前的版本,您还需要修改清单文件中的 DaemonSet 容器规范,以使容器能够以特权身份运行

  securityContext:
    runAsUser: 0
    privileged: true

加载 Kibana 仪表板编辑

Metricbeat 附带各种预建的 Kibana 仪表板,您可以使用这些仪表板来可视化有关 Kubernetes 环境的指标。

如果这些仪表板尚未加载到 Kibana 中,您必须在可以连接到 Elastic Stack 的任何系统上 安装 Metricbeat,然后运行 setup 命令加载仪表板。要了解如何操作,请参阅 加载 Kibana 仪表板

如果您使用的是 Elasticsearch 之外的其他输出(例如 Logstash),您需要 手动加载索引模板加载 Kibana 仪表板

部署编辑

Metricbeat 从 kube-state-metrics 获取一些指标。如果 kube-state-metrics 尚未运行,请立即部署它(请参阅 Kubernetes 部署 文档)。

要将 Metricbeat 部署到 Kubernetes,请运行

kubectl create -f metricbeat-kubernetes.yaml

要检查状态,请运行

$ kubectl --namespace=kube-system  get ds/metricbeat

NAME       DESIRED   CURRENT   READY     UP-TO-DATE   AVAILABLE   NODE-SELECTOR   AGE
metricbeat   32        32        0         32           0           <none>          1m

指标应开始流向 Elasticsearch。

在大型集群中部署 Metricbeat 以收集集群级指标编辑

Kubernetes 集群的大小和节点数量有时可能相当大,在这种情况下,收集集群级指标的 Pod 可能会由于资源限制而遇到性能问题。在这种情况下,用户可以考虑避免使用领导者选举策略,而是使用部署运行一个专门的、独立的 Metricbeat 实例,以补充 DaemonSet。