在 Fleet 管理下在 Kubernetes 上运行 Elastic Agent
编辑在 Fleet 管理下在 Kubernetes 上运行 Elastic Agent
编辑所需条件
编辑- 已安装 kubectl.
-
用于存储和搜索数据的 Elasticsearch,以及用于可视化和管理数据的 Kibana。
要快速入门,请启动我们的 托管 Elasticsearch Service 部署。Elasticsearch Service 可在 AWS、GCP 和 Azure 上使用。 免费试用。
要安装和运行 Elasticsearch 和 Kibana,请参阅安装 Elastic Stack。
-
kube-state-metrics
.您需要部署
kube-state-metrics
以获取有关集群上对象状态的指标(请参阅Kubernetes 部署文档)。您可以通过先下载项目来完成此操作gh repo clone kubernetes/kube-state-metrics
然后部署它
kubectl apply -k kube-state-metrics
在托管 Kubernetes 解决方案(如 AKS、GKE 或 EKS)上,Elastic Agent 没有从 Kubernetes 控制平面组件(如
kube-scheduler
和kube-controller-manager
)收集指标所需的权限。审计日志也仅在 Kubernetes 控制平面节点上可用,因此 Elastic Agent 无法收集它们。请参考此处了解更多信息。有关特定云提供商的更多信息,请参阅在 Fleet 管理下在 Azure AKS 上运行 Elastic Agent、在 Fleet 管理下在 GKE 上运行 Elastic Agent和在 Fleet 管理下在 Amazon EKS 上运行 Elastic Agent
步骤 1:下载 Elastic Agent 清单
编辑您可以在此处找到 Elastic Agent Docker 镜像。
下载清单文件
curl -L -O https://raw.githubusercontent.com/elastic/elastic-agent/8.17/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 之外,运行一个专用的独立 Elastic Agent 实例,使用 Deployment 来收集集群范围的指标,以便为每个节点收集指标。然后,可以独立且适当地为 Deployment 和 DaemonSet 分配资源。有关更多信息,请查看在 Kubernetes 上扩展 Elastic Agent页面。
步骤 2:配置 Elastic Agent 策略
编辑需要将 Elastic Agent 分配给一个策略,以启用正确的输入。为了实现 Kubernetes 可观测性,该策略需要包括 Kubernetes 集成。请参考创建策略和向策略添加集成,了解如何配置Kubernetes 集成。
步骤 3:将 Elastic Agent 注册到策略
编辑Elastic Agent 的注册定义为将特定代理注册到正在运行的 Fleet Server 的操作。
通过使用 FLEET_URL
参数,将 Elastic Agent 注册到正在运行的 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 并检索 |
|
用于连接到 Kibana 并检索 |
如果您还需要运行 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>"
设置为 |
|
Fleet Server 与之通信的 Elasticsearch 主机,例如 |
|
用于与 Elasticsearch 和 Kibana 通信的服务令牌。 |
请参阅环境变量,了解所有可用选项。
步骤 4:配置容忍度
编辑Kubernetes 控制平面节点可以使用污点来限制可以在其上运行的工作负载。独立 Elastic Agent 的清单定义了可以在这些节点上运行的容忍度。在控制平面节点上运行的 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 中查看您的数据
编辑-
启动 Kibana
- 登录到您的 Elastic Cloud 帐户。
- 导航到部署中的 Kibana 端点。
将您的浏览器指向 https://127.0.0.1:5601,将
localhost
替换为 Kibana 主机的名称。 -
要检查您的 Elastic Agent 是否已注册到 Fleet,请转到管理 → Fleet → Agent。
- 要查看流入的数据,请转到分析 → Discover,然后选择索引
metrics-*
,或者更具体地选择metrics-kubernetes.*
。如果您看不到这些索引,请为它们创建数据视图。 - 要查看预定义的仪表板,请选择分析 → 仪表板或通过集成安装资产。