在 Fleet 管理的 Kubernetes 上运行 Elastic Agent

编辑

你需要什么

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

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

下载清单文件

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

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

此清单包含 Kubernetes 集成以收集 Kubernetes 指标,以及系统集成以从节点收集系统级指标和日志。

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

此外,DaemonSet 中的一个 Pod 将持续持有领导者锁,使其负责处理集群范围内的监控。您可以在 领导者选举提供程序 中找到有关领导者选举配置选项的更多信息。领导者 Pod 将检索对整个集群唯一的指标,例如 Kubernetes 事件或 kube-state-metrics

出于 Kubernetes 安全态势管理 (KSPM) 目的,Elastic Agent 需要读取各种类型的 Kubernetes 资源、节点进程和文件的权限。为此,将向 Elastic Agent 授予必要资源的读取权限,并挂载来自主机节点文件系统的卷,以允许 Elastic Agent Pod 访问。

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

步骤 2:配置 Elastic Agent 策略
编辑

需要将 Elastic Agent 分配给策略以启用正确的输入。要实现 Kubernetes 可观察性,策略需要包含 Kubernetes 集成。请参阅 创建策略向策略添加集成,以了解如何配置 Kubernetes 集成

步骤 3:将 Elastic Agent 注册到策略
编辑

Elastic Agent 的注册被定义为将特定代理注册到正在运行的 Fleet Server 的操作。

Elastic Agent 通过使用 FLEET_URL 参数注册到正在运行的 Fleet Server。此外,FLEET_ENROLLMENT_TOKEN 参数用于将 Elastic Agent 连接到特定的 Elastic Agent 策略。

在创建新策略时将创建一个新的 FLEET_ENROLLMENT_TOKEN,并在引导式安装期间将其插入 Elastic Agent 清单中。

有关 注册令牌 的更多信息。

要指定不同的目标/凭据,请在清单文件中更改以下参数

- name: FLEET_URL
  value: "https://fleet-server_url:port" 
- name: FLEET_ENROLLMENT_TOKEN
  value: "token" 
- name: FLEET_SERVER_POLICY_ID
  value: "fleet-server-policy" 
- name: KIBANA_HOST
  value: "" 
- name: KIBANA_FLEET_USERNAME
  value: "" 
- name: KIBANA_FLEET_PASSWORD
  value: "" 

注册 Fleet Server 的 URL。您可以在 Kibana 中找到它。选择 管理 → Fleet → Fleet 设置,然后复制 Fleet Server 主机 URL。

用于注册的令牌。关闭浮出层面板并选择 注册令牌。找到您之前创建的用于将 Elastic Agent 注册到其中的 Agent 策略,然后显示并复制密钥令牌。

Fleet Server 本身使用的策略 ID。

Kibana 主机。

用于连接到 Kibana 并检索 service_token 以启用 Fleet 的基本身份验证用户名。

用于连接到 Kibana 并检索 service_token 以启用 Fleet 的基本身份验证密码。

如果您还需要运行 Fleet Server,请通过添加这些环境变量来调整上面的 docker run 命令

- name: FLEET_SERVER_ENABLE
  value: "true" 
- name: FLEET_SERVER_ELASTICSEARCH_HOST
  value: "<elasticsearch-host>" 
- name: FLEET_SERVER_SERVICE_TOKEN
  value: "<service-token>" 

设置为 true 以在此 Elastic Agent 上引导 Fleet Server。这也会自动强制执行 Fleet 注册。

Fleet Server 用于与之通信的 Elasticsearch 主机,例如 http://elasticsearch:9200

用于与 Elasticsearch 和 Kibana 通信的服务令牌。

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

步骤 4:配置容忍度
编辑

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

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 中弃用

步骤 5:部署 Elastic Agent
编辑

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

kubectl create -f elastic-agent-managed-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

在只读文件系统上运行 Elastic Agent

如果您想在 Kubernetes 的只读文件系统上运行 Elastic Agent,可以通过指定 readOnlyRootFilesystem 选项来实现。

步骤 6:在 Kibana 中查看您的数据
编辑
  1. 启动 Kibana

    1. 登录 您的 Elastic Cloud 帐户。
    2. 导航到部署中的 Kibana 端点。
  2. 要检查您的 Elastic Agent 是否已注册到 Fleet,请转到 管理 → Fleet → 代理

    Elastic Agents Fleet page
  3. 要查看流入的数据,请转到分析 → 探索并选择索引metrics-*,或者更具体地,metrics-kubernetes.*。如果看不到这些索引,请为其创建数据视图
  4. 要查看预定义的仪表板,可以选择分析 → 仪表板通过集成安装资源