1

kube-prometheus-stack从 helm chart repo prometheus-community安装

(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,但我想Statefulset通过在其掌舵图中更改类型来更改类型,而不是直接kubectl edit在集群上。

以下是kube-prometheus-stackrepo 中的目录结构:

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

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

4

2 回答 2

2

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

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

转到此链接,我们可以查看他们的statefulset.yaml。看这里,我们发现 Grafana 使用这个条件创建了一个有状态集:

{{- 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

(有关其他配置选项,请参阅此 repovalues.yaml只要它们在grafana:块内,就可以覆盖此图表中的所有内容。)

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

grafana:
  enabled: false

禁用 grafana 后,您可以自行安装 grafana,并使用Kustomize或简单的sed replace等更改生成的清单,或者分叉 grafana helm 图表并使用您自己的自定义 grafana 图表,该图表部署为 statefulset。

于 2022-02-03T16:26:22.973 回答
1

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

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

于 2022-02-02T21:33:58.003 回答