在 Kubernetes 上运行 Metricbeat
编辑在 Kubernetes 上运行 Metricbeat
编辑您可以使用 Metricbeat 的 Docker 镜像 在 Kubernetes 上检索集群指标。
在 Kubernetes 上运行 Elastic Cloud?请参阅 在 ECK 上运行 Beats。
Kubernetes 部署清单
编辑您将 Metricbeat 部署为 DaemonSet,以确保在集群的每个节点上都有一个正在运行的实例。这些实例用于从主机检索大多数指标,例如系统指标、Docker 统计信息以及在 Kubernetes 之上运行的所有服务的指标。
此外,DaemonSet 中的一个 Pod 将持续持有 *leader lock*,使其负责处理集群范围的监控。此实例用于检索对整个集群唯一的指标,例如 Kubernetes 事件或 kube-state-metrics。您可以在 自动发现 中找到有关领导者选举配置选项的更多信息。
注意:如果您正在从旧版本升级,请确保没有旧清单遗留下来的冗余部分。部署规范及其 ConfigMap 可能是这种情况。
默认情况下,所有内容都部署在 kube-system
命名空间下。要更改命名空间,请修改清单文件。
要下载清单文件,请运行
curl -L -O https://raw.githubusercontent.com/elastic/beats/8.16/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_*
metricsets 的 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 实例。