在 Kubernetes 上运行 Metricbeat
编辑在 Kubernetes 上运行 Metricbeat
编辑您可以在 Kubernetes 上使用 Metricbeat Docker 镜像来检索集群指标。
在 Kubernetes 上运行 Elastic Cloud?请参阅 在 ECK 上运行 Beats。
Kubernetes 部署清单
编辑您将 Metricbeat 部署为 DaemonSet,以确保集群的每个节点上都有一个正在运行的实例。这些实例用于从主机检索大多数指标,例如系统指标、Docker 统计信息以及 Kubernetes 上运行的所有服务的指标。
此外,DaemonSet 中的一个 Pod 将持续持有领导者锁,使其负责处理集群范围的监控。此实例用于检索整个集群独有的指标,例如 Kubernetes 事件或 kube-state-metrics。您可以在 自动发现 中找到有关领导者选举配置选项的更多信息。
注意:如果您是从旧版本升级,请确保没有旧清单中遗留的冗余部分。部署规范及其 ConfigMap 可能会出现这种情况。
默认情况下,所有内容都部署在 kube-system
命名空间下。要更改命名空间,请修改清单文件。
要下载清单文件,请运行
curl -L -O https://raw.githubusercontent.com/elastic/beats/8.17/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
,请在metricbeat-daemonset-config
ConfigMap 中为state_*
指标集的 Kubernetes 自动发现配置添加以下设置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": ""}}}'
此命令将项目的节点选择器设置为空字符串。如果不运行此命令,则默认的节点选择器将跳过控制平面节点。
对于 4.x 版本之前的 openshift 版本,您还需要修改清单文件中的 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 可能会因资源限制而面临性能问题。在这种情况下,用户可能会考虑避免使用领导者选举策略,而是除了 DaemonSet 之外,还使用 Deployment 运行专用的独立 Metricbeat 实例。