在 Kubernetes 上运行 Metricbeat
编辑在 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 的访问权限
-
在清单文件中,编辑
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 的每个特定安装,可以在secrets
或configmaps
中找到它。在某些安装中,它可以作为服务帐户密钥的一部分提供,位于/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:
-
如果使用
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
-
授予
metricbeat
服务帐户对特权 SCC 的访问权限oc adm policy add-scc-to-user privileged system:serviceaccount:kube-system:metricbeat
此命令使容器能够以管理员身份在 OpenShift 上获得特权。
-
如果 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。