.. _custom_helm_charts:
=========================
定制Helm charts
=========================
在 :ref:`helm3_prometheus_grafana` 采用的是互联网上社区提供的helm仓库以及镜像,对于很多企业用户,内部网路无法直接下载镜像(安全原因),所以我们需要自己定制Helm charts来实现企业级的"一键部署"。
.. note::
:ref:`private_helm_repo` 可以进一步在内部局域网提供完整安装步骤,加速部署。
Helm create
================
Helm pull
===============
对于自己定义和部署 :ref:`helm3_prometheus_grafana` ,则采用先 ``pull`` 然后定制的方法:
- 添加 ``prometheus-community`` 仓库并下载 ``kube-prometheus-stack`` chart:
.. literalinclude:: custom_helm_charts/helm_pull_kube-prometheus-stack
:language: bash
:caption: 添加 ``prometheus-community`` 仓库并下载 ``kube-prometheus-stack`` chart
此时本地目录下载了一个 ``kube-prometheus-stack-46.6.0.tgz`` 文件,就是我们所需的chart打包文件,将这个文件解压缩后我们来做定制
- 我们来检查一下解压缩以后的 ``kube-prometheus-stack`` 目录内容( ``tree kube-prometheus-stack`` ):
.. literalinclude:: custom_helm_charts/tree_helm_kube-prometheus-stack
:language: bash
:caption: 检查 ``kube-prometheus-stack`` chart包含的文件结构
.. _helm_customize_kube-prometheus-stack:
helm定制 ``kube-prometheus-stack``
====================================
reddit 上有人讨论过这个问题 `Prometheus Stack deployment using private image registry `_ 基本思路和我相同,就是找出image的配置替换为自己局域网私有registry。主要建议就是修订 ``values.yaml``
- 在 ``values.yaml`` 中有一个 ``Global image registry`` 配置项:
.. literalinclude:: custom_helm_charts/values.yaml
:language: yaml
:caption: ``values.yaml`` 中定义全局镜像仓库
:emphasize-lines: 22,27
- 此外,纵观整个 ``values.yaml`` ,其中使用的不同仓库镜像,举例 :ref:`alertmanager` :
.. literalinclude:: custom_helm_charts/values_alertmanager_image.yaml
:language: yaml
:caption: ``values.yaml`` 中定义alertmanager镜像(案例)
:emphasize-lines: 4-6
.. note::
在 ``kube-prometheus-stack`` 各级子目录中也分布一些 ``values.yaml`` ::
./values.yaml # 主要服务镜像
./charts/grafana/values.yaml # k8s-sidecar镜像
./charts/kube-state-metrics/values.yaml # kube-state-metrics镜像
./charts/prometheus-node-exporter/values.yaml # node-exporter镜像
仔细观察了一下,镜像实际上也不少
- 执行以下 :ref:`grep` 可以看到 ``values.yaml`` 配置中,镜像没有配置 ``SHA`` 镜像校验:
.. literalinclude:: custom_helm_charts/grep_image_values
:language: bash
:caption: 执行 grep 命令从 ``values.yaml`` 获取所有使用的镜像配置
输出:
.. literalinclude:: custom_helm_charts/grep_image_values_output
:language: bash
:caption: 执行 grep 命令从 ``values.yaml`` 获取所有使用的镜像配置的输出内容
可以看到 ``kube-prometheus-stack`` 使用了 **2个** registry:
- quay.io
- registry.k8s.io
将上述两个镜像regristry替换成自己私有的registry:
.. literalinclude:: custom_helm_charts/replace_values_registry
:language: bash
:caption: 执行 sed 命令从 ``values.yaml`` 替换registry到自己私有仓库
- 在一个已经部署过 ``kube-prometheus-stack`` 的集群,扫描出所有已经部署的镜像 :ref:`change_k8s_image_registry`
参考
======
- `How to create custom Helm charts `_ 使用了OpenProject项目部署作为案例
- `Create a Custom Helm Template `_
- `How to conditionally choose an image in Helm `_
- `How to Create a Helm Chart [Comprehensive Beginners Guide] `_
- `How to create a Helm chart for your application deployment in Kubernetes `_