当前位置: 首页 > news >正文

【笔记】Helm-3 主题-9 Helm高级技术

Helm高级技术

这部分解释说明了使用Helm的各种高级特性和技术。这部分旨在为Helm的高级用户提供高度自定义和操作chart及发布的信息。每个高级特性都会有它自己的权衡利弊, 因此每个使用它们的都要有Helm的深度知识并小心使用。或者换言之,谨记 Peter Parker 原则

https://en.wikipedia.org/wiki/With_great_power_comes_great_responsibility

后置渲染

后置渲染允许在通过Helm安装chart之前手动使用、配置或者验证渲染的manifest。这允许有高级配置需求的用户可以使用诸如kustomize来配置更改 而不需要fork一个公共chart或要求chart维护人员为每个软件指定每个最新的配置项。这里同样有一些示例用来在企业环境中注入常用工具和sidecar或者在部署前对manifest进行分析。

前置条件

Helm 3.1+

使用

后置渲染器是在STDIN能够接受渲染后的Kubernetes manifest并能在STDOUT返回有效的Kubernetes manifest,可以是任意可执行文件。它应该在出现失败事件时返回非0退出码。这是两个组件之间的唯一API。允许在你的后置渲染过程中有很好的灵活性。

后置渲染器可以和install、update以及template一起使用。使用后置渲染器时,使用--post-renderer参数并指定要使用的渲染器可执行文件的路径:

$ helm install mychart stable/wordpress --post-renderer ./path/to/executable

$ helm install mychart stable/wordpress --post-renderer ./path/to/executable

如果路径中不包含任何分隔符,就会在$PATH中搜索,否则就会把相对路径转换成全路径。

如果需要使用多个后置渲染器,在一个脚本中调用它们,或者在构建任何二进制工具时调用它们。在bash中,就像renderer1 | renderer 2 | renderer 3 一样简单。

您可以在 这里 查看作为一个后置渲染器使用kustomize的示例。

https://github.com/thomastaylor312/advanced-helm-demos/tree/master/post-render

警告

在使用后置渲染器时,以下这些事需要注意:使用后置渲染器时最重要的是,所有人在修改版本时必须使用同样的渲染器来保证可重复的构建。这个功能是专门为允许任何用户切换他们正在使用或停止使用的渲染器而构建的,但是这个应该谨慎操作,以避免意外修改或数据丢失。

另一个重要的注意事项就是安全,如果您正在使用一个后置渲染器,要保证它来自同一个可信源(对于其他任意可执行文件也是如此)。不推荐使用不可靠的或者未核实的可访问所有渲染器模板的渲染器,渲染器模板经常会包含隐私数据。

自定义后置渲染

使用Go SDK时后置渲染器甚至可以提供更多的灵活性。任意后置渲染器只需要执行下面的Go接口:

type PostRenderer interface {

    Run(rendererManifests *bytes.Buffer) (modifiedManifests *bytes.Buffer, err error)

}

type PostRenderer interface {// Run expects a single buffer filled with Helm rendered manifests. It// expects the modified results to be returned on a separate buffer or an// error if there was an issue or failure while running the post render stepRun(renderedManifests *bytes.Buffer) (modifiedManifests *bytes.Buffer, err error)
}

有关Go SDK的更多信息,请查看Go SDK部分

Helm | Helm高级技术

Go SDK

Helm 3首次发布了完全重组的Go SDK,以便在构建利用Helm的软件和工具时有更好的体验。完整的文档可以在 https://pkg.go.dev/helm.sh/helm/v3 查看,下面将要简要介绍一些常用的软件包和一个简单的示例。

helm module - helm.sh/helm/v3 - Go Packages

包概览

对每个最常用的包的简要说明列表:

1、pkg/action:包含执行Helm操作的主要客户端。和CLI处理过程中使用的是同一个包。如果您仅仅需要执行来自另一个Go程序的最基本的Helm命令,这个包会很适合您

2、pkg/{chart,chartutil}:加载和控制chart时使用的方法和帮助内容

3、pkg/release:定义了Release对象和状态值

显然除了这些还有更多的包,查看SDK文档获取更多内容!

简要示例

这是一个使用Go SDK的helm list的简单示例:

 package main

import (

    "logs"

    "os"

    "helm.sh/helm/v3/pkg/action"

    "helm.sh/helm/v3/pkg/cli"

)

func main() {

    settings := cli.New()

    

    actionConfig :=new(action.Configuration)

    if err := actinConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVERF"), log.Printf); err != nil{

        log.Printf("%+v", err)

        os.Exit(1)

    }

    

    client := action.NewList(actionConfig)

    client.Deploymentd = true

    results.err := client.Run()

    if err !=- nil {

        log.Printf("%+v", err)

        os.Exit(1)

    }

    for _, rel := range results {

        log.Printf("%+v", rel)

    }

}

package mainimport ("log""os""helm.sh/helm/v3/pkg/action""helm.sh/helm/v3/pkg/cli"
)func main() {settings := cli.New()actionConfig := new(action.Configuration)// You can pass an empty string instead of settings.Namespace() to list// all namespacesif err := actionConfig.Init(settings.RESTClientGetter(), settings.Namespace(), os.Getenv("HELM_DRIVER"), log.Printf); err != nil {log.Printf("%+v", err)os.Exit(1)}client := action.NewList(actionConfig)// Only list deployedclient.Deployed = trueresults, err := client.Run()if err != nil {log.Printf("%+v", err)os.Exit(1)}for _, rel := range results {log.Printf("%+v", rel)}
}

后端存储

Helm 3改变了存储命令空间版本密钥的默认版本信息。Helm 2默认将版本信息作为ConfigMap存储在Tiller实例中。下面小节部分会演示如果配置不同的后端。配置是基于HELM_DRIVER环境变量。它会被设置成这几个值其中之一:[configmap, secret, sql]。

ConfigMap后端存储

要使ConfigMap后端生效,您需要在configmap设置环境变量HELM_DRIVER。

您可以在shell中类似下面这样设置:

export HELM_DRIVER=configmap

export HELM_DRIVER=configmap

如果您想从默认后端切到ConfigMap后端,您必须自己进行迁移。您可以使用以下命令找回版本信息:

kubectl get secret --all-namespaces -l "owner=helm"

kubectl get secret --all-namespaces -l "owner=helm"

产品说明:发布信息包含chart和values文件内容,因此可能包含敏感数据(比如密码,私钥,和其他认证)需要防止未经授权访问。管理Kubernetes授权时使用 RBAC ,当限制访问私密资源时,它可能会授予ConfigMap资源广泛的访问权限。对于实例,默认的 面向用户角色 “视图”授予大多资源的访问权限,但是不允许访问私密数据。此外,私密数据会针对于 加密存储 进行配置。切换到ConfigMap后端时要记得这一点,因为它可能会暴露您应用程序的敏感数据。

Using RBAC Authorization | Kubernetes

Using RBAC Authorization | Kubernetes

Encrypting Confidential Data at Rest | Kubernetes

SQL后台存储

这是个beta版本SQL存储后端,在SQL数据库中存储了版本信息。

如果您的版本信息内容超过1MB这种存储后端会特别有用(在这种场景中,它无法存储在ConfigMaps/Secrets中,因为Kubernetes内部的etcd key-values存储有限制。)

要启用SQL后端,您需要部署SQL数据库并设置环境变量HELM_DRIVER到sql。DB的细节用环境变量HELM_DRIVER_SQL_CONNECTION_STRING设置。

您可以在shell中设置如下:

export HELM_DRIVER=sql

export HELM_DRIVER_SQL_CONNECTION_STRING=postgresql://helm-postgres:5432/helm?user=helm&password=changeme

export HELM_DRIVER=sql
export HELM_DRIVER_SQL_CONNECTION_STRING=postgresql://helm-postgres:5432/helm?user=helm&password=changeme

注意:目前只支持PostgreSQL。

产品说明:建议如下:

1、确保您的数据库产品可以使用。对于PostgreSQL,请参考Server Administration 文档了解更多细节内容

PostgreSQL: Documentation: 12: Part III. Server Administration

2、为版本信息启用 权限管理 镜像到Kubernetes RBAC

Helm | SQL存储后端的权限管理

如果您想从默认后端切到SQL后端,您必须自己完成迁移,您可以使用以下命令找回版本新信息:

kubectl get secret --all-namespace -l "owner-helm"

kubectl get secret --all-namespaces -l "owner=helm"

————————————

仅用于本人学习

来源:Helm | Docs 

相关文章:

【笔记】Helm-3 主题-9 Helm高级技术

Helm高级技术 这部分解释说明了使用Helm的各种高级特性和技术。这部分旨在为Helm的高级用户提供高度自定义和操作chart及发布的信息。每个高级特性都会有它自己的权衡利弊, 因此每个使用它们的都要有Helm的深度知识并小心使用。或者换言之,谨记 Peter Pa…...

YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

一、本文介绍 本文给大家带来的改进机制是华为移动端模型Ghostnetv1,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。GhostNet的关键思想在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的…...

特斯拉FSD的神经网络(Tesla 2022 AI Day)

这是特斯拉的全自动驾驶(Full Self Driver)技术结构图,图中把自动驾驶模型拆分出分成了几个依赖的模块: 技术底座:自动标注技术处理大量数据,仿真技术创造图片数据,大数据引擎进不断地更新&…...

LLM自回归解码

在自然语言处理(NLP)中,大型语言模型(LLM)如Transformer进行推理时,自回归解码是一种生成文本的方式。在自回归解码中,模型在生成下一个单词时会依赖于它之前生成的单词。 使用自回归解码的公式…...

#Uniapp:uni.request(OBJECT)

uni.request(OBJECT) 发起网络请求。 示例 uni.request({url: https://www.example.com/request, //仅为示例,并非真实接口地址。data: {text: uni.request},header: {custom-header: hello //自定义请求头信息},success: (res) > {console.log(res.data);thi…...

旅游项目day14

其他模块数据初始化 搜索实现 请求一样,但是参数不一样,根据type划分。 后台需要提供一个搜索接口。 请求分发器: 全部搜索 目的地搜索 精确搜索、无高亮展示 攻略搜索 全文搜索、高亮显示、分页 游记搜搜 用户搜索 丝袜哥...

关于缓存 db redis local 取舍之道

文章目录 前言一、影响因素二、db or redis or local1.db2.redis3. local 三、redisson 和 CaffeineCache 封装3.1 redisson3.1.1 maven3.1.2 封装3.1.3 使用 3.2 CaffeineCache3.1.1 maven3.1.2 封装3.1.3 使用 总结 前言 让我们来聊一下数据缓存,它是如何为我们带…...

imgaug库图像增强指南(33):塑造【云层】效果的视觉魔法

引言 在深度学习和计算机视觉的世界里,数据是模型训练的基石,其质量与数量直接影响着模型的性能。然而,获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此,数据增强技术应运而生,成为了解决这一问题的…...

树莓派ubuntu:CSI接口摄像头安装驱动程序及测试

树莓派中使用OV系列摄像头,网上能搜到的文章资源太老了,文章中提到的摄像头配置选项在raspi-config中并不存在。本文重新测试整理树莓派摄像头的驱动安装、配置、测试流程说明。 libcamera 新版本中使用libcamera作为摄像头驱动程序。 libcamera是一个…...

Webpack5入门到原理6:处理图片资源

处理图片资源 过去在 Webpack4 时,我们处理图片资源通过 file-loader 和 url-loader 进行处理 现在 Webpack5 已经将两个 Loader 功能内置到 Webpack 里了,我们只需要简单配置即可处理图片资源 1. 配置 const path require("path");modul…...

大语言模型(LLM)有哪些?

国际大语言模型 目前国际上有以下几个知名的大语言模型: GPT-4 GPT-4由OpenAI团队开发,是闭源的。GPT(Generative Pre-trained Transformer)系列是目前最著名的大语言模型之一。最早的版本是GPT-1,之后发展到了GPT-2和GPT-3&…...

2 - 部署Redis集群架构

部署Redis集群架构 部署Redis集群部署管理主机第一步 准备ruby脚本的运行环境第二步 创建脚本第三步 查看脚本帮助信息 配置6台Redis服务器第一步 修改配置文件启用集群功能第二步 重启redis服务第三步 查看Redis-server进程状态(看到服务使用2个端口号为成功&#…...

NOIP2003提高组T1:神经网络

题目链接 [NOIP2003 提高组] 神经网络 题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别、函数逼近及贷款风险评估等诸多领域有广泛的应用。对神经网络的研究一直是当今的热门方向&am…...

Doris数据库误删除恢复

如果不小心误删除了表,doris提供了恢复机制,但时间间隔不能超过一天,记得要迅速 首先查看当前能恢复的记录有那些 可以通过 SHOW CATALOG RECYCLE BIN 来查询当前可恢复的元信息,也可以在语句后面加 WHERE NAME XXX 来缩小查询…...

C# byte转int:大小端读取

参考:byte[]数组和int之间的转换 文章目录 Byte转为INT小端存储方式转int大端存储方式转int 大端模式和小端模式是计算机存储多字节数据时的两种方式。内存地址从小往大增长。 大端模式:最高有效(最高位)的字节存放在最小地址上&…...

安全通信网络

1.网络架构 1)应保证网络设备的业务处理能力满足业务高峰期需要。 设备CPU和内存使用率的峰值不大于设备处理能力的70%。 在有监控环境的条件下,应通过监控平台查看主要设备在业务高峰期的资源(CPU、内存等)使用 情况&#xff…...

深度学习笔记(九)——tf模型导出保存、模型加载、常用模型导出tflite、权重量化、模型部署

文中程序以Tensorflow-2.6.0为例 部分概念包含笔者个人理解,如有遗漏或错误,欢迎评论或私信指正。 本篇博客主要是工具性介绍,可能由于软件版本问题导致的部分内容无法使用。 首先介绍tflite: TensorFlow Lite 是一组工具,可帮助开…...

七Docker可视化管理工具

Docker可视化管理工具 本节介绍几款Docker可视化管理工具。 DockerUI(ui for Docker) 官方GitHub:https://github.com/kevana/ui-for-docker 项目已废弃,现在转投Portainer项目,不建议使用。 Portainer 简介:Portainer是一个…...

vue和react的差异梳理

特性VueReact响应式系统使用Object.defineProperty()或Proxy使用不可变数据流和状态提升模板系统HTML模板语法JSX(JavaScript扩展语法)组件作用域样式支持scoped样式需要CSS-in-JS库(如styled-components)状态管理Vuex&#xff08…...

(笔记总结)C/C++语言的常用库函数(持续记录,积累量变)

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

Linux部署私有文件管理系统MinIO

最近需要用到一个文件管理服务&#xff0c;但是又不想花钱&#xff0c;所以就想着自己搭建一个&#xff0c;刚好我们用的一个开源框架已经集成了MinIO&#xff0c;所以就选了这个 我这边对文件服务性能要求不是太高&#xff0c;单机版就可以 安装非常简单&#xff0c;几个命令就…...