使用Helm v3在Kubernetes 1.15上安装Elastic Stack

随着Kubernetes的持续流行并已成为编排容器工作负载的事实上的标准,难怪在描述公司的监控堆栈时,Kubernetes和Helm现已成为标准的组合。
Elastic Stack(也称为ELK)与Kubernetes本机集成,是一种流行的开源解决方案,用于收集,存储和分析Kubernetes遥测数据。
虽然使用Kubernetes部署ELK Stack似乎是一项复杂的任务,但围绕这种场景以及Kubernetes原生解决方案的最佳实践越来越多。 这些解决方案之一是使用Helm图表。
标准ELK日志记录解决方案概述

日志:确定要分析的服务器日志
Logstash:数据聚合和处理
Elasticsearch:索引编制和存储
Kibana:分析和可视化
在深入实际设置之前,让我们快速探索在Kubernetes上运行ELK堆栈的可能替代方法。
Elasticserach设置-SaaS还是自我管理?
许多云提供商都提供Elasticsearch即服务,这似乎对公司有吸引力,因为他们可以最大程度地减少构建解决方案的努力。但是,易于维护具有以下注意事项:
Elasticsearch即服务
安全性:基于云的Elasticsearch解决方案通常缺乏RBAC之类的基本ELK安全功能-最显着的是AWS Elasticsearch产品不支持X-Pack插件。因此,行使担保权的灵活性是不存在的,从长远来看,肯定会需要额外的努力。
功能:最流行的Elasticsearch云解决方案缺少分片重新平衡功能,这在大型生产环境中是至关重要的,因此,如果节点发生故障,则需要一些手动工作才能将索引移动到新节点。
SaaS选项也不支持其他插件,例如分析器插件和摄取插件。
控制:托管解决方案很少提供对Elasticsearch设置的完全控制。通常对配置更改和性能优化的支持非常有限。
维护:备份频率选项通常限制为每天一次。与Elastic的正式发布日期相比,新版本的发布时间很晚。升级通常是一个痛苦的过程,因为它们通常需要为新版本设置一个全新的集群。
可见性:监控和集群指标也非常有限。投诉,警告,GC慢日志等日志不可用
成本:托管的云服务带有针对实例类型和数量的预定义选项,与自定义解决方案相比,导致成本增加。

在Kubernetes上进行Elasticsearch
根据为ELK堆栈提供支持的公司Elastic的说法,这些只是此设置带来的一些好处:
多个Elasticsearch集群(包括Kibana)的直接部署和管理
无缝升级到Elastic Stack的新版本
简单的扩展使您可以随着用例的增长
每个群集上的默认安全性
Elastic提供了让Kubernetes上的Elasticsearch&Kibana在Elastic Cloud托管解决方案上运行的选项,如果SaaS是您的首选选项,则可以查看其产品。
如果您愿意使用Helm 3探索Kubernetes上的Elastic设置,现在我们已经了解了Kubernetes上的Elasticsearch设置的潜在好处,那么可以继续执行本文的步骤。
以下是此设置外观的概述。

步骤1:创建Kubernetes集群
出于测试目的,您可以使用minikube-version 1.15.6,该版本应按Kubernetes Minicube文档中的说明进行安装。
或者,可以将群集部署在提供此服务的主要云提供商之一(EKS或GKE)上。 我们的设置将在EKS 1.15版上运行。 您可以参考官方的Cloud Provider文档以轻松进行设置。
步骤2:安装Helm 3
只需遵循官方安装指南
步骤3:部署Elasticsearch集群
为此,我们将使用Github上提供的官方Elastic Helm图表。

您可以参考资源库中提供的众多安装和设置示例。
对于我们的设置,我们将创建一个类似于以下结构的目录结构,并在每个组件的相关目录中创建values.yaml文件:

完成测试后,请特别注意CPU和内存使用情况的资源配置,并确保为生产级部署正确更新了values.yaml。
默认情况下,对于Elasticsearch,我们将为集群中的每个Pod创建容量为1Gi的PersistentVolumeClaim,以防止在意外Pod删除的情况下丢失数据。 对于生产工作负载,应使用所需的存储容量和(可选)Kubernetes存储类定义卷声明模板以与持久卷关联。 批量声明的名称必须始终为elasticsearch-data。

对于实际安装,我们将使用以下脚本。 将其放置在项目的根目录中,以便可以访问3个子目录。
可以随意增强脚本或更改提供的默认值以满足您的需求,因为为了简化起见,我们尝试将其保持在最低水平:

使用install elasticsearch选项运行上述脚本应产生以下输出:

如上面的提示所示,您可以使用以下命令查看集群的状态:

完成后,可以看看状态:

过在本地进行测试来完成设置。 您可以通过执行转发到本地计算机的端口来访问群集。

步骤4:部署Kibana
对于Kibana部署,我们将采用完全相同的方法,只更新Kibana的相关图表和values.yaml:

运行脚本:

查看状态:

端口转发:

访问测试: http://localhost:5601

步骤5:部署metricbeat
下一步将是部署metricbeat。
它是Elastic提供的常用节拍之一,负责发送指标数据。 它可以将数据直接发送到Elasticsearch或通过Logstash发送,您可以在此处进一步处理和增强数据,然后再在Kibana中对其进行可视化。
以下是Elastic提供的所有节拍的完整列表。 他们每个人都负责收集某种数据并将其运送到Elasticsearch集群。 请花一点时间熟悉Beats文档,因为在本文中我们将不对它们进行太多详细介绍。

如果我们仔细检查metricbeat-values.yaml文件,我们会注意到它配置了各种度量收集模块(kubernetes,系统等)。 Metricbeat模块定义了要从服务中收集哪些特定指标,定义了收集这些指标的频率以及如何连接到该指标。模块由一个或多个指标集组成-实际上,这是一组要收集和运送的相关指标。
模块分解:
metricbeat.yml文件,提供Metricbeat的常规配置(包含从每个节点上的kubelet收集的系统和kubernetes模块)
kube-state-metrics-metricbeat.yml — kube-state-metrics是一项简单的服务,它侦听Kubernetes API服务器并生成有关Kubernetes内部各种对象(如部署,节点和Pod)的状态和运行状况的度量。
我们将把Metricbeat作为DaemonSet部署在k8s集群的每个节点上。通过将metricbeat部署为DaemonSet,我们确保在集群的每个节点上都获得一个正在运行的metricbeat守护程序。
请注意,在配置中,所有带有state_前缀的指标集的requirehosts字段均指向集群中的kube-state-metrics服务,而其余指标应指向kubelet服务。
让我们测试一下设置:

默认情况下,用于Metricbeat的Prometheus模块公开/ metrics端点,这意味着这些度量也可以由现有Prometheus设置收集。
步骤6:部署Filebeat

步骤7:将所有内容放在一起
如果检查创建的设置,则可以检查Helm的发布状态(为简单起见已删除了某些字段):

要查看有关创建的Kubernetes资源的详细信息,可以运行以下命令:

步骤9:在Kibana中分析数据
现在我们已经部署了所有组件,在Kibana中,我们可以转到管理→Kibana→索引模式页面,然后单击创建索引模式。 Kibana将自动识别并显示Metricbeat索引。
输入“ metricbeat- *”,然后在下一步中选择@timestamp字段,以最终在Kibana中创建索引模式。
跳至“发现”页面。 您会看到显示了Metricbeat从Kubernetes集群收集的所有指标:

如果您在Kibana UI中导航,则可以浏览其提供的各个字段,仪表板和统计信息。
跳到机器学习选项卡并选择metricbeat- *索引以可视化我们之前配置的大量Kubernetes和System指标。

http:// localhost:5601 / app / infra#/ infrastructure / inventory
检查基础结构清单并选择感兴趣的资源,以浏览其指标并查看其日志文件。

关于Kibana仪表板的一句话:
Kubernetes的Kibana仪表板非常有用,因为它们为我们提供了Kubernetes集群及其组件的良好概述。 Elastic Demo Page上提供了一个非常不错的Dashboard Explorer。
此时,Elastic Helm图表默认情况下不启用Filebeat和Metricbeat仪表板。官方文档中提供了如何实现此目标的功能,并且可能需要对默认的values.yaml文件进行一些补充:
Metricbeat仪表板设置
Filebeat仪表板设置
最后的话
您已经获得了一个简单的设置,可以使用官方的Elastic Helm Charts在Kubernetes上部署Elastic Stack(Elasticsearch,Kibana,Metricbeat,Filebeat)。
现在,我们已经在群集上启动并运行了所有这些组件,因此存在无限可能的增强潜力:高可用性和高性能集群配置,自定义保留策略,安全性增强,用户可访问性改进等等。您可以自由探索无尽的选项,并以相同的方式进行试验,就像这是在本地或云中托管的VM上的传统部署一样。

https://github.com/elastic/helm-charts

原文:https://itnext.io/deploy-elastic-stack-on-kubernetes-1-15-using-helm-v3-9105653c7c8