示例:使用 Helm 在 Kubernetes 上安装独立 Elastic Agent

编辑

示例:使用 Helm 在 Kubernetes 上安装独立 Elastic Agent

编辑

此功能为技术预览版,可能会在未来版本中更改或删除。Elastic 将努力解决任何问题,但技术预览版中的功能不受官方 GA 功能的支持 SLA 约束。

本示例演示如何使用 Helm Chart 在 Kubernetes 系统上安装独立的 Elastic Agent,收集 Kubernetes 指标并将其发送到 Elastic Cloud 中的 Elasticsearch 集群,然后在 Kibana 中查看这些指标的可视化效果。

有关 Elastic Agent Helm Chart 及其优势的概述,请参阅 使用 Helm 在 Kubernetes 上安装 Elastic Agent

本指南将引导您完成以下步骤

先决条件
编辑

要开始,您需要

  • Helm Kubernetes 包管理器的本地安装。
  • 版本为 8.16 或更高版本的Elastic Cloud 托管 Elasticsearch 集群。
  • Elasticsearch API 密钥
  • 一个活动的 Kubernetes 集群。
  • elastic/elastic-agent GitHub 存储库的本地克隆。请确保使用 8.16 分支,以确保 Elastic Agent 与 Helm Chart 完全兼容。
安装 Elastic Agent
编辑
  1. 打开您的 Elastic Cloud 部署,然后从导航菜单中选择 管理此部署
  2. 应用程序 部分中,复制 Elasticsearch 端点并记下端点值。
  3. 打开终端 Shell 并更改到 elastic-agent 存储库的本地克隆中的目录。
  4. llow复制此命令。

    helm install demo ./deploy/helm/elastic-agent \
    --set kubernetes.enabled=true \
    --set outputs.default.type=ESPlainAuthAPI \
    --set outputs.default.url=<ES-endpoint>:443 \
    --set outputs.default.api_key="API_KEY"

    请注意,该命令具有以下属性

    • helm install 运行 Helm CLI 安装工具。
    • demo 为安装的 Chart 提供名称。您可以选择任何名称。
    • ./deploy/helm/elastic-agent 是要安装的 Helm Chart 的本地路径(计划及时为该 Chart 提供一个公共 URL)。
    • --set kubernetes.enabled=true 启用 Kubernetes 集成。CLI 参数会覆盖 Elastic Agent values.yaml 文件中 kubernetes.enabled 的默认值 false
    • --set outputs.default.type=ESPlainAuthAPI 将 Elasticsearch 输出的身份验证方法设置为需要 API 密钥(同样,覆盖 Elastic Agent values.yaml 文件中默认设置的值)。
    • --set outputs.default.url=<ES-endpoint>:443 设置 Elastic Cloud 部署的地址,Elastic Agent 将通过端口 443 将其输出发送到该地址。
    • --set outputs.default.api_key="API_KEY" 设置 Elastic Agent 将用于向 Elasticsearch 集群进行身份验证的 API 密钥。

      有关所有可用 YAML 设置和描述的完整列表,请参阅 Elastic Agent Helm Chart 自述文件

  5. 更新命令以替换

    1. <ES-endpoint> 为您先前复制的 Elasticsearch 端点值。
    2. <API_KEY> 为您的 API 密钥名称。

      更新后,该命令应如下所示

      helm install demo ./deploy/helm/elastic-agent \
      --set kubernetes.enabled=true \
      --set outputs.default.type=ESPlainAuthAPI \
      --set outputs.default.url=https://demo.es.us-central1.gcp.foundit.no:443 \
      --set outputs.default.api_key="A6ecaHNTJUFFcJI6esf4:5HJPxxxxxxxPS4KwSBeVEs"
  6. 运行该命令。

    命令输出应确认已安装三个 Elastic Agent 以及 Kubernetes 集成

    ...
    Installed agents:
      - clusterWide [deployment - standalone mode]
      - ksmSharded [statefulset - standalone mode]
      - perNode [daemonset - standalone mode]
    
    Installed integrations:
      - kubernetes [built-in chart integration]
    ...
  7. 运行 kubectl get pods -n default 命令以确认 Elastic Agent Pod 正在运行

    NAME                                      READY   STATUS    RESTARTS   AGE
    agent-clusterwide-demo-77c65f6c7b-trdms   1/1     Running   0          5m18s
    agent-ksmsharded-demo-0                   2/2     Running   0          5m18s
    agent-pernode-demo-c7d75                  1/1     Running   0          5m18s
  8. 在您的 Elastic Cloud 部署中,从 Kibana 菜单打开 集成 页面。
  9. 搜索 Kubernetes,然后选择 Kubernetes 集成卡。
  10. 在 Kubernetes 集成页面上,选择 安装 Kubernetes 资产。这将安装用于监视 Kubernetes 集群的仪表板、Elasticsearch 索引和其他资产。
  11. 在 Kubernetes 集成页面上,打开 资产 选项卡,然后选择 [指标 Kubernetes] 节点 仪表板。

    在仪表板上,您可以查看 Kubernetes 节点的状态,包括有关内存、CPU 和文件系统使用率、网络吞吐量等的指标。

    Screen capture of the Metrics Kubernetes nodes dashboard
  12. 在 Kubernetes 集成页面上,打开 资产 选项卡,然后选择 [指标 Kubernetes] Pod 仪表板。与节点仪表板一样,在此仪表板上,您可以查看 Kubernetes Pod 的状态,包括有关内存、CPU 和网络吞吐量的各种指标。

    Screen capture of the Metrics Kubernetes pods dashboard
升级您的 Elastic Agent 配置
编辑

现在您已成功安装、收集和发送数据的 Elastic Agent,让我们尝试更改 Agent 配置设置。

在先前的安装示例中,安装了三个 Elastic Agent 节点。其中一个节点 agent-ksmsharded-demo-0 的安装是为了启用 kube-state-metrics 服务。假设您不需要这些指标,并且希望相应地升级配置。

  1. 复制您先前用于安装 Elastic Agent 的命令

    helm install demo ./deploy/helm/elastic-agent \
    --set kubernetes.enabled=true \
    --set outputs.default.type=ESPlainAuthAPI \
    --set outputs.default.url=<ES-endpoint>:443 \
    --set outputs.default.api_key="API_KEY"
  2. 按如下方式更新命令

    1. install 更改为 upgrade。
    2. 添加一个参数 --set kubernetes.state.enabled=false。这将覆盖 Elastic Agent values.yaml 文件中设置 kubernetes.state 的默认值 true

      helm upgrade demo ./deploy/helm/elastic-agent \
      --set kubernetes.enabled=true \
      --set kubernetes.state.enabled=false \
      --set outputs.default.type=ESPlainAuthAPI \
      --set outputs.default.url=<ES-endpoint>:443 \
      --set outputs.default.api_key="API_KEY"
  3. 运行该命令。

    命令输出应确认,现在仅安装了两个 Elastic Agent 以及 Kubernetes 集成

    ...
    Installed agents:
      - clusterWide [deployment - standalone mode]
      - perNode [daemonset - standalone mode]
    
    Installed integrations:
      - kubernetes [built-in chart integration]
    ...

您已升级配置为仅运行两个 Elastic Agent,而不包含 kube-state-metrics 服务。您可以类似地升级您的 Agent,以更改 Elastic Agent values.yaml 文件中定义的其他设置。

更改 Elastic Agent 的运行模式
编辑

默认情况下,Elastic Agent 在 elastic 用户帐户下运行。对于某些用例,您可能希望暂时更改 Agent 以使用更高的权限运行。

  1. 运行 kubectl get pods -n default 命令以查看正在运行的 Elastic Agent Pod

    NAME                                      READY   STATUS    RESTARTS   AGE
    agent-clusterwide-demo-77c65f6c7b-trdms   1/1     Running   0          5m18s
    agent-pernode-demo-c7d75                  1/1     Running   0          5m18s
  2. 现在,运行 kubectl exec 命令以进入其中一个正在运行的 Elastic Agent,替换从先前命令返回的正确 Pod 名称。例如

    kubectl exec -it pods/agent-pernode-demo-c7d75 -- bash
  3. 从 Pod 内部,运行 Linux ps aux 命令以查看正在运行的进程。

    ps aux

    结果应与以下内容类似

    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    elastic+           1  0.0  0.0   1936   416 ?        Ss   21:04   0:00 /usr/bin/tini -- /usr/local/bin/docker-entrypoint -c /etc/elastic-agent/agent.yml -e
    elastic+          10  0.2  1.3 2555252 132804 ?      Sl   21:04   0:13 elastic-agent container -c /etc/elastic-agent/agent.yml -e
    elastic+          37  0.6  2.0 2330112 208468 ?      Sl   21:04   0:37 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat metricbeat -E
    elastic+          38  0.2  1.7 2190072 177780 ?      Sl   21:04   0:13 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat filebeat -E se
    elastic+          56  0.1  1.7 2190136 175896 ?      Sl   21:04   0:11 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat metricbeat -E
    elastic+          68  0.1  1.8 2190392 184140 ?      Sl   21:04   0:12 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat metricbeat -E
    elastic+          78  0.7  2.0 2330496 204964 ?      Sl   21:04   0:48 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat filebeat -E se
    elastic+         535  0.0  0.0   3884  3012 pts/0    Ss   22:47   0:00 bash
    elastic+         543  0.0  0.0   5480  2360 pts/0    R+   22:47   0:00 ps aux
  4. 在命令输出中,请注意,Elastic Agent 当前以 elastic 用户身份运行

    elastic+          10  0.2  1.3 2555252 132804 ?      Sl   21:04   0:13 elastic-agent container -c /etc/elastic-agent/agent.yml -e
  5. 运行 exit 以离开 Elastic Agent Pod。
  6. 再次运行 helm upgrade 命令,这次添加参数 --set agent.unprivileged=false 以覆盖该设置的默认值 true

    helm upgrade demo ./deploy/helm/elastic-agent \
    --set kubernetes.enabled=true \
    --set kubernetes.state.enabled=false \
    --set outputs.default.type=ESPlainAuthAPI \
    --set outputs.default.url=<ES-endpoint>:443 \
    --set outputs.default.api_key="API_KEY" \
    --set agent.unprivileged=false
  7. 运行 kubectl get pods -n default 命令以查看正在运行的 Elastic Agent Pod

    NAME                                      READY   STATUS    RESTARTS   AGE
    agent-clusterwide-demo-77c65f6c7b-trdms   1/1     Running   0          5m18s
    agent-pernode-demo-s6s7z                  1/1     Running   0          5m18s
  8. 重新运行 kubectl exec 命令以进入其中一个正在运行的 Elastic Agent,替换正确的 Pod 名称。例如

    kubectl exec -it pods/agent-pernode-demo-s6s7z -- bash
  9. 从 Pod 内部,运行 Linux ps aux 命令以查看正在运行的进程。

    USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root       1  0.0  0.0   1936   452 ?        Ss   23:10   0:00 /usr/bin/tini -- /usr/local/bin/docker-entrypoint -c /etc/elastic-agent/agent.yml -e
    root       9  0.9  1.3 2488368 135920 ?      Sl   23:10   0:01 elastic-agent container -c /etc/elastic-agent/agent.yml -e
    root      27  0.9  1.9 2255804 203128 ?      Sl   23:10   0:01 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat metricbeat -E
    root      44  0.3  1.8 2116148 187432 ?      Sl   23:10   0:00 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat metricbeat -E
    root      64  0.3  1.8 2263868 188892 ?      Sl   23:10   0:00 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat metricbeat -E
    root      76  0.4  1.8 2190136 190972 ?      Sl   23:10   0:00 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat filebeat -E se
    root     100  1.2  2.0 2256316 207692 ?      Sl   23:10   0:01 /usr/share/elastic-agent/data/elastic-agent-d99b09/components/agentbeat filebeat -E se
    root     142  0.0  0.0   3752  3068 pts/0    Ss   23:12   0:00 bash
    root     149  0.0  0.0   5480  2376 pts/0    R+   23:13   0:00 ps aux
  10. 运行 exit 以离开 Elastic Agent Pod。

您已将 Elastic Agent 权限升级为以 root 身份运行。要将设置改回,您可以重新运行 helm upgrade 命令,并使用 --set agent.unprivileged=true 返回到默认的 unprivileged 模式。

清理
编辑

完成此示例后,运行 helm uninstall 命令以卸载 Elastic Agent。

helm uninstall demo

应确认卸载,如下所示

release "demo" uninstalled

提醒一下,有关使用 Elastic Agent Helm Chart 的完整详细信息,请参阅 Elastic Agent Helm Chart 自述文件