示例:使用 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. 复制此命令。

    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 资源。这将安装仪表板、Elasticsearch 索引以及用于监视 Kubernetes 集群的其他资源。
  11. 在 Kubernetes 集成页面上,打开资源选项卡并选择[Metrics Kubernetes] 节点仪表板。

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

    Screen capture of the Metrics Kubernetes nodes dashboard
  12. 在 Kubernetes 集成页面上,打开资源选项卡并选择[Metrics 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 身份运行。要将设置更改回,您可以使用 --set agent.unprivileged=true 重新运行 helm upgrade 命令以返回到默认的 unprivileged 模式。

清理
编辑

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

helm uninstall demo

卸载应确认如下所示

release "demo" uninstalled

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