基于k3s-helm-controller实现k8s api离线部署helm chart的方案
内容提要
本文介绍了如何在内网环境下使用k3s-helm-controller通过Kubernetes API离线部署Helm Chart,特别是kube-prometheus-stack。用户可以将HelmChart作为Kubernetes的CRD,避免使用命令行操作。文章详细说明了创建ConfigMap、部署Helm Controller及配置Prometheus参数的步骤。
延伸解读
为何选择 k3s-helm-controller
文章指出,k3s-helm-controller 将 HelmChart 定义为 Kubernetes 的 CRD,因此可以直接通过 Kubernetes API 管理 Helm Chart,无需依赖 Helm 命令行。这对于希望在代码中(如使用 Java fabric8io/kubernetes-client)集成部署流程的场景尤其有用,能避免引入额外的命令行工具或组件。
离线部署的 Helm 仓库替代方案
在内网环境中,除了私有 Docker 镜像仓库,Helm Chart 也需要仓库。文章提出,如果只需部署少量 Chart(如 kube-prometheus-stack),可以直接在代码中提供文件 API 来充当 Helm 仓库,或使用任意符合格式要求的 HTTP 文件服务器,从而避免额外部署 Helm 仓库组件。
部署前的关键配置:kube-config ConfigMap
部署 helm-controller 前,需要创建包含 kube-config 的 ConfigMap。文章提供的脚本会读取主节点的 /root/.kube/config,并将 127.0.0.1 替换为主节点 IP,然后通过 kubectl 创建 ConfigMap。注意该脚本不一定适用于所有环境,需根据实际情况调整。
部署 kube-prometheus-stack 的参数设置
使用 HelmChart 部署 kube-prometheus-stack 时,可以通过 spec.set 字段配置各项参数,例如设置 namespaceOverride、Service 类型为 NodePort、指定 Grafana 管理员密码、时区以及 Prometheus 的额外抓取配置等。文章提供了完整的 YAML 示例,并注明使用了国内 Helm 镜像仓库。
Q&A
如何在内网环境下使用k3s-helm-controller部署Helm Chart?
可以通过Kubernetes API使用k3s-helm-controller来离线部署Helm Chart,避免命令行操作。
k3s-helm-controller的主要功能是什么?
k3s-helm-controller可以将HelmChart作为Kubernetes的CRD,方便通过Kubernetes API管理Helm Chart。
如何创建ConfigMap以部署k3s-helm-controller?
创建ConfigMap时需要读取Kubernetes主节点的配置文件,并使用sed命令替换IP地址,然后发布为ConfigMap。
在使用Helm Controller部署kube-prometheus-stack时需要注意什么?
需要通过设置参数来配置Prometheus,并确保使用正确的Helm镜像仓库。
如何通过代码提供文件API来充当Helm仓库?
可以在代码中直接提供符合格式要求的文件API,避免增加额外的组件。
部署Helm Controller的步骤有哪些?
部署步骤包括创建Deployment和ConfigMap,并配置相应的参数。