更改 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,它被部署为有状态集。
我已经从 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,它被部署为有状态集。