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

这篇具有很好参考价值的文章主要介绍了【笔记】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 step
    Run(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 main

import (
    "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 namespaces
    if 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 deployed
    client.Deployed = true
    results, 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 文章来源地址https://www.toymoban.com/news/detail-812471.html

到了这里,关于【笔记】Helm-3 主题-9 Helm高级技术的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python高级技术复习指南

            正则表达式这一块主要还是利用 re模块 和正则表达式结合去进行一个指定字符串的提取,我们首先需要了解到的就是 元字符 : 我们并不只有 re.findall 这一个方法,还有一个 match对象 方法以及 flag参数 也要一并复习 因为是简单复习,所以我们来举几个例子: eg1: 有

    2024年01月20日
    浏览(39)
  • 游戏引擎之高级动画技术

    当我们拥有各类动画素材(clips)时,要将它们融合起来成为一套完整的动画。 最经典的例子就是从走的动画自然的过渡到跑的动画。 1.1 线性插值 不同于上节课的LERP(同一个clip内不同pose之间),动画融合需要的线性插值是不同clip之间的插值。 以走-跑为例,可以用速度来

    2024年04月14日
    浏览(69)
  • 5 种高级 NodeJS 技术

    作为开发人员,我们都致力于打造高效、健壮且易于理解、修改和扩展的代码库。通过采用最佳实践和探索先进技术,我们可以释放 NodeJS 的真正潜力并显着提高应用程序的质量。在这篇文章中,我们将重点介绍 NodeJS 的五种高级技术。所以,系好安全带,我们要开车了,准备

    2024年02月09日
    浏览(31)
  • 高级路由技术案例

    1、静态ECMP和浮动静态路由配置实验: 2、浮动静态路由配置 案例内容与目标: 1、如何在路由器上配置静态ECMP 2浮动静态路由配置 案例组网图: 案例设备和器材: 两台路由器 两台PC 案例主要过程: 步骤一:建立物理连接 步骤二:ip地址配置: PCA配置: PCB: RTA: RTB: 步

    2024年02月02日
    浏览(38)
  • Java高级技术:单元测试、反射、注解

    目录 单元测试 单元测试概述 单元测试快速入门 单元测试常用注解 反射 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 注解 注解概述 自定义注解 元注解

    2024年01月16日
    浏览(50)
  • GaussDB技术解读系列之高级压缩

    本文作者 华为云数据库GaussDB首席架构师 冯柯 数据压缩与关系数据库的结合,早已不是一个新鲜的话题,当前我们已经看到了各种各样数据库压缩的产品和解决方案。对于GaussDB来说,在今天引入数据压缩,究竟能够给客户带来什么不一样的价值,是过去一段时间我们一直在

    2024年02月15日
    浏览(53)
  • java 高级面试题整理(薄弱技术)

    session 1.什么是session Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户

    2024年02月11日
    浏览(46)
  • Java高级技术 单元测试(JUnit4)

    所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。 我们之前一直使用的测试便是通过main方法来实现,但在main方法中写测试代码有如下的几个问题存在: 只能在main方法编写测试代码,去调用其他方法进行测试。 无法实现自动化测试,一个方法测

    2024年02月03日
    浏览(49)
  • JAVA高级技术-输入、输出系列-文件的天下大势

    回城传送–》《JAVA筑基100例》 题目:做一个合并多个文本文件的工具。 创建一个类:TextFileConcatenation 使用TextFileConcatenation继承JFrame构建窗体 读取文本文件时,用的是BufferedReader类的readLine()方法读入一行数据。 将选择的多个文本文件合并到d://concatenation.txt 启动: 合并前:

    2024年02月16日
    浏览(46)
  • 数据可视化高级技术Echarts(堆叠柱状图)

    目录 一.如何实现 二.代码展示 1.stack名称相同(直接堆叠) 2. stack名称不相同(相同的堆叠,不同的新生成一列) 数据堆叠,同个类目轴上系列配置相同的  stack  值可以堆叠放置。即在series中将设置stack即可。其他设置与普通柱状图相同, 参考文章: 数据可视化高级技术

    2024年04月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包