菜单
Enterprise 开源 RSS

在 mimir-distributed Helm chart 安装中配置唯一的 Grafana Mimir Memberlist 集群标签

本文档介绍了如何在通过 Helm 安装的 Grafana Mimir 中配置集群标签验证。如果不启用集群标签验证,多个 Memberlist gossip ring 集群存在合并的风险。例如,如果 Mimir、Tempo 或 Loki 运行在同一个 Kubernetes 集群中,如果未进行此配置更新,它们可能会相互通信。启用集群标签验证后,在 Mimir 组件与其他组件通信之前,它们会验证其他组件是否具有相同的集群标签。更新此配置需要整个集群进行三次滚动更新。

准备工作

  • 您已通过 mimir-distributed helm chart 安装了 Grafana Mimir,并且其 Memberlist 集群标签仍设置为默认值。
  • 您已配置 kubectlhelm 命令行工具,以便连接到运行 Grafana Mimir 的 Kubernetes 集群。

配置更新步骤

配置更新分为三个步骤

  1. 禁用 Memberlist 集群标签验证
  2. 在所有 Mimir 组件上设置集群标签
  3. 再次启用 Memberlist 集群标签验证

1. 禁用 Memberlist 集群标签验证

集群标签验证标志默认启用,集群标签设置为空字符串。如果其他使用 Memberlist 的系统也未更新默认集群标签,使用默认集群标签值可能会导致它们之间相互通信。在未先禁用集群标签验证的情况下直接将新集群标签设置为非空字符串值,将导致 Memberlist 在 Grafana Mimir 集群中形成分区。分区会导致某些 Mimir 组件具有不同的集群标签值,从而阻止组件之间的通信。要禁用集群标签验证标志,请在 mimir-distributed values.yaml 配置中设置以下结构化配置。

yaml
mimir:
  structuredConfig:
    memberlist:
      cluster_label_verification_disabled: true

运行 helm upgrade <my-mimir-release> mimir-distributed -f values.yaml 来应用配置更改并进行滚动更新。将 <my-mimir-release> 替换为实际的 Mimir 发布名称。等待所有 Pod 准备就绪后再进行下一步。

2. 在所有 Mimir 组件上设置集群标签

通过设置以下配置在所有 Mimir 组件上设置集群标签。此配置将把 cluster_label 设置为 Helm 发布名称和安装 Helm 的命名空间。在禁用集群标签验证后更新新的集群标签将防止 Memberlist 形成分区。

yaml
mimir:
  structuredConfig:
    memberlist:
      cluster_label_verification_disabled: true
      cluster_label: "{{.Release.Name}}-{{.Release.Namespace}}"

再次运行 helm upgrade <my-mimir-release> mimir-distributed -f values.yaml 来应用配置更改。将 <my-mimir-release> 替换为实际的 Mimir 发布名称。等待所有 Pod 准备就绪后再进行下一步。

3. 再次启用 Memberlist 集群标签验证

从 values.yaml 文件中移除 mimir.structuredConfig.memberlist.cluster_label_verification_disabled 以重新启用 Memberlist 集群标签验证。

yaml
mimir:
  structuredConfig:
    memberlist:
      cluster_label: "{{.Release.Name}}-{{.Release.Namespace}}"

运行 helm upgrade <my-mimir-release> mimir-distributed -f values.yaml 来应用配置更改。将 <my-mimir-release> 替换为实际的 Mimir 发布名称。等待所有 Pod 准备就绪后再验证配置是否正确应用。

验证配置更改

滚动更新完成后,通过查看部分 Grafana Mimir Pod 的 /memberlist 端点来验证更改。在几个不同的 Grafana Mimir 组件上运行以下端口转发命令。

bash
   kubectl port-forward pod/<mimir-pod-1> --kube-context=<my-k8s-context> --namespace=<my-mimir-namespace> 8080:8080
   kubectl port-forward pod/<mimir-pod-2> --kube-context=<my-k8s-context> --namespace=<my-mimir-namespace> 8081:8080

<mimir-pod-1><mimir-pod-2> 替换为来自不同 Mimir 组件的实际 Pod 名称。确保主机端口 8080 和 8081 可用,否则使用其他可用端口。

在浏览器中打开端口转发的 URL 查看 Memberlist 状态:https://:8080/memberlist、https://:8081/memberlist 以及其他几个 Grafana Mimir 组件。来自不同 Pod 的 Memberlist 页面必须显示其所有成员的相同视图。