在 Kubernetes 上运行独立 Elastic Agent编辑

您需要什么编辑

步骤 1:下载 Elastic Agent 清单编辑

您可以在此处找到 Elastic Agent Docker 镜像。

下载清单文件

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

您可能需要调整清单中 Elastic Agent 容器的资源限制。容器资源使用情况取决于数据流的数量和环境大小。

此清单包含用于收集 Kubernetes 指标的 Kubernetes 集成和用于从节点收集系统级指标和日志的系统集成。

Elastic Agent 被部署为守护程序集,以确保集群中的每个节点上都有一个正在运行的实例。这些实例用于从主机检索大多数指标,例如系统指标、Docker 统计信息以及 Kubernetes 之上运行的所有服务的指标。这些指标可通过部署的kube-state-metrics访问。请注意,默认情况下,所有内容都部署在kube-system命名空间下。要更改命名空间,请修改清单文件。

此外,守护程序集中的一个 Pod 将不断持有“领导者锁”,这使其负责处理集群范围的监控。您可以在领导者选举提供程序中找到有关领导者选举配置选项的更多信息。领导者 Pod 将检索整个集群特有的指标,例如 Kubernetes 事件或kube-state-metrics。我们通过在清单中声明包含这些指标集的数据流之前应用以下条件来确保从领导者 Pod 检索这些指标

...
inputs:
  - id: kubernetes-cluster-metrics
    condition: ${kubernetes_leaderelection.leader} == true
    type: kubernetes/metrics
    # metricsets with the state_ prefix and the metricset event
...

出于 Kubernetes 安全态势管理 (KSPM) 的目的,Elastic Agent 需要对各种类型的 Kubernetes 资源、节点进程和文件进行读取访问。为此,将向 Elastic Agent 授予对必要资源的读取权限,并将托管节点文件系统中的卷挂载到 Elastic Agent Pod 可以访问的位置。

Kubernetes 集群中的节点大小和数量有时可能很大,在这种情况下,将收集集群级别指标的 Pod 可能需要比您希望专用于守护程序集中所有 Pod 的运行时资源更多。如果资源不足,则收集集群范围指标的领导者可能会因资源限制而面临性能问题。在这种情况下,用户可以考虑避免使用具有领导者选举策略的单个守护程序集,而是运行一个专用的独立 Elastic Agent 实例,以便除了用于为每个节点收集指标的守护程序集之外,还可以使用部署来收集集群范围的指标。然后,可以独立且适当地对部署和守护程序集进行资源分配。有关更多信息,请查看在 Kubernetes 上扩展 Elastic Agent页面。

步骤 2:连接到 Elastic Stack编辑

在部署清单之前设置 Elasticsearch 设置

- name: ES_USERNAME
  value: "elastic" 
- name: ES_PASSWORD
  value: "passpassMyStr0ngP@ss" 
- name: ES_HOST
  value: "https://somesuperhostiduuid.europe-west1.gcp.cloud.es.io:9243" 

用于连接到 Elasticsearch 的基本身份验证用户名。

用于连接到 Kibana 的基本身份验证密码。

要与之通信的 Elasticsearch 主机。

有关所有可用选项,请参阅环境变量

步骤 3:配置容忍度编辑

Kubernetes 控制平面节点可以使用污点来限制可以在其上运行的工作负载。独立 Elastic Agent 的清单定义了在这些节点上运行的容忍度。在控制平面节点上运行的代理从 Kubernetes 的控制平面组件(调度程序、控制器管理器)收集指标。要禁用 Elastic Agent 在控制平面节点上运行,请删除守护程序集规范的以下部分

spec:
  # Tolerations are needed to run Elastic Agent on Kubernetes control-plane nodes.
  # Agents running on control-plane nodes collect metrics from the control plane components (scheduler, controller manager) of Kubernetes
  tolerations:
    - key: node-role.kubernetes.io/control-plane
      effect: NoSchedule
    - key: node-role.kubernetes.io/master
      effect: NoSchedule

这两种容忍度都做同样的事情,但node-role.kubernetes.io/master从 Kubernetes 版本 v1.25 开始已弃用

步骤 4:部署 Elastic Agent编辑

要将 Elastic Agent 部署到 Kubernetes,请运行

kubectl create -f elastic-agent-standalone-kubernetes.yaml

要检查状态,请运行

$ kubectl -n kube-system get pods -l app=elastic-agent
NAME                            READY   STATUS    RESTARTS   AGE
elastic-agent-4665d             1/1     Running   0          81m
elastic-agent-9f466c4b5-l8cm8   1/1     Running   0          81m
elastic-agent-fj2z9             1/1     Running   0          81m
elastic-agent-hs4pb             1/1     Running   0          81m
步骤 5:在 Kibana 中查看数据编辑
  1. 启动 Kibana

    1. 登录到您的 Elastic Cloud 帐户。
    2. 导航到部署中的 Kibana 端点。
  2. 您可以通过转到分析 → 发现并选择索引metrics-*,或者更具体地说,选择metrics-kubernetes.*,来查看流入的数据。如果您看不到这些索引,请为它们创建数据视图
  3. 您可以通过选择分析 → 仪表板通过集成安装资产来查看预定义的仪表板。

Red Hat OpenShift 配置编辑

如果您使用的是 Red Hat OpenShift,则需要在清单文件中指定其他设置,并使容器能够以特权模式运行。

  1. 在清单文件中,修改agent-node-datastreams ConfigMap 并调整输入

    • kubernetes-cluster-metrics输入

      • 如果使用https访问kube-state-metrics,请将以下设置添加到所有kubernetes.state_*数据集中

          bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
          ssl.certificate_authorities:
            - /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
    • kubernetes-node-metrics输入

      • kubernetes.controllermanager数据流条件更改为

        condition: ${kubernetes.labels.app} == 'kube-controller-manager'
      • kubernetes.scheduler数据流条件更改为

        condition: ${kubernetes.labels.app} == 'openshift-kube-scheduler'
      • kubernetes.proxy数据流配置应如下所示

        - data_stream:
            dataset: kubernetes.proxy
            type: metrics
          metricsets:
            - proxy
          hosts:
            - 'localhost:29101'
          period: 10s
      • 将以下设置添加到连接到https://${env.NODE_NAME}:10250的所有数据流中

          bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
          ssl.certificate_authorities:
            - /path/to/ca-bundle.crt

        ca-bundle.crt可以是任何包含 Kubelet API 中使用的证书颁发者的 CA 包。根据 OpenShift 的每个特定安装,可以在secretsconfigmaps中找到它。在某些安装中,它可以作为服务帐户密钥的一部分在/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt中使用。使用适用于 GCP 的OpenShift 安装程序时,请在 elastic-agent pod 中挂载以下configmap并在ssl.certificate_authorities中使用ca-bundle.crt

        Name:         kubelet-serving-ca
        Namespace:    openshift-kube-apiserver
        Labels:       <none>
        Annotations:  <none>
        
        Data
        ====
        ca-bundle.crt:
  2. 授予elastic-agent服务帐户对特权 SCC 的访问权限

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

    此命令使容器能够作为 OpenShift 的管理员获得特权。

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

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

    此命令将项目的节点选择器设置为空字符串。

自动发现目标 Pod编辑

有关更多信息,请参阅使用 Elastic Agent 进行 Kubernetes 自动发现