”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 Kubernetes、Helm 和 Ingress 部署监控堆栈

使用 Kubernetes、Helm 和 Ingress 部署监控堆栈

发布于2024-11-08
浏览:797

Deploying a Monitoring Stack with Kubernetes, Helm, and Ingress

观察和管理 Kubernetes 集群的性能对于维护应用程序运行状况、识别问题和确保高可用性至关重要。我将引导您使用 kubectl 和 Helm 设置全面的监控解决方案,将 Grafana、Loki 和 Prometheus 部署到集群,以及设置 Ingress 以进行外部访问。

我们将介绍以下关键步骤:

  1. 应用 Kubernetes 命名空间进行监控。
  2. 安装 Helm 并设置必要的存储库。
  3. 使用 Helm 部署 Loki、Prometheus 和 Grafana。
  4. 应用 Ingress 规则向外部公开服务。

先决条件
在开始之前,请确保您具备以下条件:

  1. 配置了 kubectl 的 Kubernetes 集群。
  2. Helm 安装在您的本地计算机上。
  3. 应用 YAML 配置和安装图表的正确访问权限。

第 1 步:创建监控命名空间

命名空间可帮助您逻辑地划分和组织 Kubernetes 资源。为了避免冲突并保持监控资源独立,我们将为监控工具创建专用的命名空间。

1。应用监控命名空间:将以下内容保存到monitoring-namespace.yml文件中:

api版本:v1
种类:命名空间
元数据:
名称:监控
标签:
app.kubernetes.io/name: 监控
app.kubernetes.io/instance:监控

2.使用 kubectl 应用命名空间:

kubectl apply -f reporting-namespace.yml

此命令在 Kubernetes 集群中创建一个名为“monitoring”的新命名空间。

第 2 步:安装 Helm 并添加 Grafana 存储库
Helm 是 Kubernetes 包管理器,可以更轻松地部署 Grafana、Loki 和 Prometheus 等复杂应用程序。以下是如何安装 Helm 并设置必要的存储库。

  1. 安装 Helm(如果尚未安装):

sudo snap install helm --classic

此命令使用 Snap(Linux 的包管理系统)安装 Helm。

  1. 添加 Grafana Helm 图表存储库:

helm 仓库添加 grafana https://grafana.github.io/helm-charts

  1. 更新 Helm 存储库:

helm 仓库更新

这可确保 Helm 拥有 Grafana 存储库中的最新图表。

第 3 步:使用 Helm 部署 Loki、Prometheus 和 Grafana

现在 Helm 已安装并配置完毕,我们将使用 Grafana Helm 图表部署 Loki、Prometheus 和 Grafana。

1。运行Helm安装命令:

helm 升级 --install loki --namespace=monitoring grafana/loki-stack \
--set grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=false,prometheus.server.persistentVolume.enabled=false,loki.persistence.enabled=true,loki.persistence.storageClassName=gp2 ,loki.persistence.size=100Gi --set nodeSelector.name=node.kubernetes.io/description=all_product

A:Grafana:**这将在 Helm 图表中启用监控仪表板工具 Grafana。
**B:Prometheus:**启用 Prometheus 来收集指标,同时禁用 Alertmanager 和 Prometheus 服务器的持久卷以简化存储配置。
**C: Loki:
Loki,日志聚合工具,使用 gp2 存储类启用 100Gi 的持久卷存储。

--install 标志确保在之前未部署堆栈的情况下安装该堆栈。 --upgrade 标志将堆栈更新到最新版本(如果已安装)。

2.验证安装:安装成功后,检查监控命名空间中运行的pod的状态:

kubectl get pods -n 监控

您应该会看到 Grafana、Prometheus、Loki 和 Promtail(将日志发送到 Loki)的 pod。

第 4 步:设置外部访问的入口

要从集群外部访问 Grafana、Prometheus 或 Loki,您需要配置 Ingress 资源。这允许外部 HTTP/S 访问监控服务。

*1。创建 Ingress 资源:将以下示例保存到 monitoring-ingress.yml 文件:
*

api版本:networking.k8s.io/v1
种类:入口
元数据:
名称:监控入口
命名空间:监控
注释:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer:letencrypt
规格:
tls:
- 主持人:

- your-domain.com
秘密名称:证书名称
规则:
- 主机:your-domain.com
http:
路径:
- 小路: /
路径类型:前缀
后端:
服务:
名称:loki-grafana
港口:
数量:80

此 Ingress 配置在域名 {your-domain.com} 下为 Grafana、Prometheus 和 Loki 设置路由。您需要将 your-domain.com 替换为您的实际域,并配置 DNS 以指向集群的外部 IP。

2.申请Ingress资源:

kubectl apply -f reporting-ingress.yml

一旦应用,入口控制器将根据主机名将流量路由到适当的服务。

  1. 验证 Ingress 设置:检查 Ingress 资源的状态以确保其配置正确:

kubectl get ingress -n 监控

确保您的 ADDRESS 列具有外部 IP,以便外部可以访问服务。

第 5 步:访问监控仪表板

正确配置 Ingress 并且 DNS 指向您的集群后,您就可以访问 Grafana、Prometheus 和 Loki。

结论

只需几个命令,您就可以在 Kubernetes 集群上使用 Helm 成功部署完整的监控堆栈。通过利用 Helm 图表,您可以简化 Grafana、Loki 和 Prometheus 等复杂应用程序的部署,同时还集成 Ingress 以方便访问。您现在拥有强大的可观察性设置,可让您实时监控日志和指标,帮助您更有效地管理和优化 Kubernetes 应用程序。

这种基于 Helm 的部署可确保可扩展性并简化升级或配置更改,从而更轻松地管理生产环境中的可观察性。

版本声明 本文转载于:https://dev.to/seewhy/deploying-a-monitoring-stack-with-kubernetes-helm-and-ingress-cp5?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    为什么我在Silverlight Linq查询中获得“无法找到查询模式的实现”错误?
    查询模式实现缺失:解决“无法找到”错误在Silverlight应用程序中,尝试使用LINQ建立LINQ连接以错误而实现的数据库”,无法找到查询模式的实现。”当省略LINQ名称空间或查询类型缺少IEnumerable 实现时,通常会发生此错误。 解决问题来验证该类型的质量是至关重要的。在此特定实例中...
    编程 发布于2025-04-12
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-04-12
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-04-12
  • ES6实战:增强对象字面量
    ES6实战:增强对象字面量
    ES6 对象字面量增强:简化 JavaScript 对象操作 ES6 引入的增强型对象字面量特性显着简化了 JavaScript 中的对象处理,主要体现在简写属性名、简写方法名和计算属性名等方面。 简写属性名使属性定义更加简洁;简写方法名简化了方法定义语法;而计算属性名则允许根据变量值动态创建属...
    编程 发布于2025-04-12
  • 揭秘mysql_real_escape_string能否防SQL注入
    揭秘mysql_real_escape_string能否防SQL注入
    MySQL_REAL_ESCAPE_STRING的限制 MySQL_REAL_ESCAPE_STRING在PHP中曾在php中曾被批评,因为他们没有为SQL注射攻击提供了不全面的攻击问题,这些问题是在潜在的攻击问题上的全面保护。尽管有些人认为该功能的用法不正确,但其他人则提出了对其固有局限性的担...
    编程 发布于2025-04-12
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python import codecs import codecs import codecs 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有...
    编程 发布于2025-04-12
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-04-12
  • 您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    您可以使用CSS在Chrome和Firefox中染色控制台输出吗?
    在javascript console 中显示颜色是可以使用chrome的控制台显示彩色文本,例如红色的redors,for for for for错误消息?回答是的,可以使用CSS将颜色添加到Chrome和Firefox中的控制台显示的消息(版本31或更高版本)中。要实现这一目标,请使用以下模...
    编程 发布于2025-04-12
  • Python高效创建XML文件:ElementTree、cElementTree还是LXML?
    Python高效创建XML文件:ElementTree、cElementTree还是LXML?
    How to Create XML Files in PythonTo create XML files in Python, consider the following options:ElementTree (Recommended)ElementTree, introduced in Pyt...
    编程 发布于2025-04-12
  • 如何在GO编译器中自定义编译优化?
    如何在GO编译器中自定义编译优化?
    在GO编译器中自定义编译优化 GO中的默认编译过程遵循特定的优化策略。 However, users may need to adjust these optimizations for specific requirements.Optimization Control in Go Compi...
    编程 发布于2025-04-12
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-04-12
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-12
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-04-12
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-04-12
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-04-12

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3