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

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

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

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]删除
最新教程 更多>
  • Java中Lambda表达式为何需要“final”或“有效final”变量?
    Java中Lambda表达式为何需要“final”或“有效final”变量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    编程 发布于2025-07-11
  • 如何使用“ JSON”软件包解析JSON阵列?
    如何使用“ JSON”软件包解析JSON阵列?
    parsing JSON与JSON软件包 QUALDALS:考虑以下go代码:字符串 } func main(){ datajson:=`[“ 1”,“ 2”,“ 3”]`` arr:= jsontype {} 摘要:= = json.unmarshal([] byte(...
    编程 发布于2025-07-11
  • Java中假唤醒真的会发生吗?
    Java中假唤醒真的会发生吗?
    在Java中的浪费唤醒:真实性或神话?在Java同步中伪装唤醒的概念已经是讨论的主题。尽管存在这种行为的潜力,但问题仍然存在:它们实际上是在实践中发生的吗? Linux的唤醒机制根据Wikipedia关于伪造唤醒的文章,linux实现了pthread_cond_wait()功能的Linux实现,利用...
    编程 发布于2025-07-11
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案: args)抛出异常{ 日历cal = calendar.getInstance(); SimpleDateFormat SDF =新的SimpleDateFormat(“...
    编程 发布于2025-07-11
  • CSS可以根据任何属性值来定位HTML元素吗?
    CSS可以根据任何属性值来定位HTML元素吗?
    靶向html元素,在CSS 中使用任何属性值,在CSS中,可以基于特定属性(如下所示)基于特定属性的基于特定属性的emants目标元素: 字体家庭:康斯拉斯(Consolas); } 但是,出现一个常见的问题:元素可以根据任何属性值而定位吗?本文探讨了此主题。的目标元素有任何任何属性值,属...
    编程 发布于2025-07-11
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-07-11
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-07-11
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-07-11
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-07-11
  • 如何将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-07-11
  • 如何使用node-mysql在单个查询中执行多个SQL语句?
    如何使用node-mysql在单个查询中执行多个SQL语句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    编程 发布于2025-07-11
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-07-11
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-07-11
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-07-11
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-07-11

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

Copyright© 2022 湘ICP备2022001581号-3