在 Kubernetes 上运行独立 Elastic Agent
编辑在 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和在 Amazon EKS 上运行 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"
有关所有可用选项,请参阅环境变量。
步骤 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 中查看数据编辑
-
启动 Kibana
- 登录到您的 Elastic Cloud 帐户。
- 导航到部署中的 Kibana 端点。
将您的浏览器指向https://127.0.0.1:5601,将
localhost
替换为 Kibana 主机的名称。 - 您可以通过转到分析 → 发现并选择索引
metrics-*
,或者更具体地说,选择metrics-kubernetes.*
,来查看流入的数据。如果您看不到这些索引,请为它们创建数据视图。 - 您可以通过选择分析 → 仪表板或通过集成安装资产来查看预定义的仪表板。
Red Hat OpenShift 配置编辑
如果您使用的是 Red Hat OpenShift,则需要在清单文件中指定其他设置,并使容器能够以特权模式运行。
-
在清单文件中,修改
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 的每个特定安装,可以在secrets
或configmaps
中找到它。在某些安装中,它可以作为服务帐户密钥的一部分在/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:
-
-
-
授予
elastic-agent
服务帐户对特权 SCC 的访问权限oc adm policy add-scc-to-user privileged system:serviceaccount:kube-system:elastic-agent
此命令使容器能够作为 OpenShift 的管理员获得特权。
-
如果 elastic-agent 运行所在的命名空间设置了
"openshift.io/node-selector"
注释,则 elastic-agent 可能不会在所有节点上运行。在这种情况下,请考虑覆盖命名空间的节点选择器以允许在任何节点上进行调度oc patch namespace kube-system -p \ '{"metadata": {"annotations": {"openshift.io/node-selector": ""}}}'
此命令将项目的节点选择器设置为空字符串。
自动发现目标 Pod编辑
有关更多信息,请参阅使用 Elastic Agent 进行 Kubernetes 自动发现。