更改 Grafana helm chart 以安装为 Statefulset 而不是 Deployment

Change in Grafana helm chart to install as kind Statefulset instead of Deployment

我已经从 helm chart repo prometheus-community

安装了 kube-prometheus-stack
(k8s: minikube) $ kubectl get deploy,statefulset -n monitoring
NAME                                                       READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kube-prometheus-stack-grafana              1/1     1            1           20d
deployment.apps/kube-prometheus-stack-kube-state-metrics   1/1     1            1           20d
deployment.apps/kube-prometheus-stack-operator             1/1     1            1           20d

NAME                                                               READY   AGE
statefulset.apps/alertmanager-kube-prometheus-stack-alertmanager   1/1     20d
statefulset.apps/prometheus-kube-prometheus-stack-prometheus       1/1     20d

如您所见,默认情况下,grafana 安装为 Deployment,但我想通过在它的 helm chart 中更改它来将 kind 更改为 Statefulset,而不是直接 kubectl edit 在集群上。

以下是 kube-prometheus-stack 存储库中的目录结构:

kube-prometheus-stack vjwilson(k8s: minikube) $ ls
Chart.lock  charts  Chart.yaml  CONTRIBUTING.md  crds  README.md  templates  values.yaml

kube-prometheus-stack (k8s: minikube) $ tree -d
.
├── charts
│   ├── grafana
│   │   ├── ci
│   │   ├── dashboards
│   │   └── templates
│   │       └── tests
│   ├── kube-state-metrics
│   │   └── templates
│   └── prometheus-node-exporter
│       ├── ci
│       └── templates
├── crds
└── templates
    ├── alertmanager
    ├── exporters
    │   ├── core-dns
    │   ├── kube-api-server
    │   ├── kube-controller-manager
    │   ├── kube-dns
    │   ├── kube-etcd
    │   ├── kubelet
    │   ├── kube-proxy
    │   └── kube-scheduler
    ├── grafana
    │   └── dashboards-1.14
    ├── prometheus
    │   └── rules-1.14
    └── prometheus-operator
        └── admission-webhooks
            └── job-patch

30 directories

我很困惑,卡在这个 helm 上的确切位置进行更改并告诉 grafana 安装为 Statefulset 而不是默认 Deployment。如果有人可以提供帮助,那就太好了。

如果要使其有状态,请启用持久性。但是我在你提到的图表中没有看到让 Grafana 成为有状态集的选项。

如果相应的 Helm chart 支持,通常您会看到持久化启用选项。例如:您可以在 this grafana helm chart 中启用持久化。您可以从中生成模板并在您的存储库中使用它。

我是这样找到答案的。在 helm chart 中,如果有一个名为 charts 的文件夹,则表示该 chart 正在声明 chart 依赖项。查看Chart.yaml,我们看到grafana依赖:

dependencies:
- name: grafana
  version: "6.21.*"
  repository: https://grafana.github.io/helm-charts
  condition: grafana.enabled

转到这个link,我们可以看看他们的statefulset.yaml。看这里我们发现Grafana使用这个条件创建了一个stateful set:

{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) (eq .Values.persistence.type "statefulset")}}

如果您的 values.yaml 中有一个部分具有依赖项名称的顶级标签,则从属图表的图表值仍然可以被覆盖。所以在这种情况下,依赖被命名为grafana,所以我们可以使用这个配置覆盖依赖图表的values.yaml

grafana:
  enabled: true
  persistence:
    enabled: true
    type: statefulset

(对于其他配置选项 see this repo。此图表中的所有 values.yaml 都可以被覆盖,只要它们在 grafana: 块内。)

依赖图表为Grafana官方图表。但是,如果这对您不起作用(也许您没有使用持久卷声明),您的第二个选择是从您正在使用的图表中禁用 grafana 依赖项并部署自定义版本的 Grafana 图表。

grafana:
  enabled: false

一旦你禁用了 grafana,你就可以自己安装 grafana 并使用类似 Kustomize or a simple sed replace 的东西改变生成的清单,或者 fork grafana helm chart 并使用你自己的自定义 grafana chart,它被部署为有状态集。