【笔记】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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/636428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医院挂号系统

需求: 科室管理:新增科室。医生管理:录入医生信息,以及科室信息。修改医生信息(主要是修改个人信息和科室)。坐诊信息设置:可以设置医生当天和未来6天的坐诊情况,包括上午和下午的坐…

自然语言处理(Natural Language Processing,NLP)解密

专栏集锦,大佬们可以收藏以备不时之需: Spring Cloud 专栏:http://t.csdnimg.cn/WDmJ9 Python 专栏:http://t.csdnimg.cn/hMwPR Redis 专栏:http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏:http://t.csdni…

Servlet中service()与doGet() doPost() 是什么关系

Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet…

关于去除信号中的直流分量效果演示(零频率分量)

本文作者: slience_me 文章目录 关于去除信号中的直流分量效果演示(零频率分量)1. 效果图展示:2. 快速傅里叶变换FFT3. 相关验证代码 关于去除信号中的直流分量效果演示(零频率分量) 1. 效果图展示&#x…

JDK 动态代理(Spring AOP 的原理)(面试重点)

代理模式 也叫委托模式.定义:为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤,在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对…

51单片机蜂鸣器

蜂鸣器 蜂鸣器的工作原理 三极管的工作原理 三极管是一种半导体器件,通常由三个掺杂不同的半导体材料层构成。它常用于放大和开关电路中。三极管的工作原理可简述如下: 放大作用:三极管可以放大电流和电压信号。它的工作原理基于控制一个较大…

利用OpenGL图形库实现人物动画移动效果

使用OpenGL库实现人物动画移动效果需要涉及到更复杂的图形编程和事件处理。以下是一个简单的例子,使用OpenGL和GLUT库实现人物的基本动画移动效果。 确保你已经安装了OpenGL和GLUT。你可以使用包管理器或者从官方网站下载并安装。 一、如果你已经安装过了OpenGL和…

Web前端与低代码可以碰出什么火花?

技术快速迭代,Web前端开发已经逐渐成为构建现代应用程序的关键组成部分。它不仅涉及到美观的界面设计,还包括后端功能的实现,以及跨平台兼容性的考虑。然而,传统的Web前端开发过程往往需要进行长时间的编码和调试,这使…

LTC6820和isoSPI使用

1、MSTR主控/受控 MSTR (引脚 11/ 引脚 12):串行接口主 / 从选择器输入。MSTR接VCC,则LTC6820为从机;MSTR接GND,则LTC6820为主机 2、SLOW慢速/快速 SLOW (引脚 12/ 引脚 13):慢速接口选择输入。当时钟频率≤ 200kHz …

C++和Python最常用的库框架一览

一、C常用库 1. 标准模板库(STL) STL包含丰富的数据结构与算法。比如vector动态数组;list双向链表;map基于红黑树实现,支持快速查找键值对。常用算法有sort排序、find搜索等。这些容器算法类和函数模板,是C程序员必不可少的基础。 2. Boost Boost是近年兴起的高质量C库集合…

网络安全:守护数字世界的盾牌

在当今数字化的时代,网络已经渗透到我们生活的方方面面。从社交媒体到在线银行,从在线购物到工作文件传输,网络几乎无处不在。然而,随着网络的普及,网络安全问题也日益凸显。那么,如何确保我们的数字资产安…

递归、搜索与回溯算法(专题一:递归)

往期文章(希望小伙伴们在看这篇文章之前,看一下往期文章) (1)递归、搜索与回溯算法(专题零:解释回溯算法中涉及到的名词)【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…

gdb命令总结

1、启动调试 前置条件:编译生成执行码时带上 -g,如果使用Makefile,通过给CFLAGS指定-g选项,否则调试时没有符号信息。 gdb program //最常用的用gdb启动程序,开始调试的方式 gdb --args program args //带参数启动或…

Docker-安装实践(mysql,redis集群,tomcat)

docker实践(提供几个安装案例) 安装Tomcat # 拉取镜像,可以指定标签不指定默认为最新 docker pull tomcat docker run -itd -p 8080:8080 --name tomcat tomcat:latest #这样内部默认80端口,主机的映射端口会随机分配一个 docker run -itd -P tomcat…

基于web的亚热带常见自然林病虫害识别系统——开篇

文章目录 前言概要论文组织结构相关理论技术简介TensorflowDjango web 开发框架图像的分类的发展感受 绪论研究背景与意义国内外研究现状 前言 随着年底的到来,我相信越来越多的小伙伴也要开始着手自己的毕业设计,这里打算分享我自己的毕业设计&#xf…

python通过元类为客户类自动添加方法

1 python通过元类为客户类自动添加方法 python为不同的类添加相同的方法,有多种方式。 若已知需添加的方法,可以通过继承添加方法,或对象嵌入的组合进行添加。 若需添加的方法为动态不可知,可以通过辅助函数或元类进行添加。 …

Python-基础篇-数据结构-列表、元组、字典、集合

文章目录 思维导图❓ 大抵是何物数据结构切片 💬具体是何物列表💻 list💻 [ ]自我介绍精神面貌使用说明生理体征增删查改 方法汇总 元组💻 tuple💻 ( )自我介绍使用说明精神面貌生理体征增删查改 字典💻 di…

网络爬虫基本原理介绍

网络爬虫是一种自动化程序,用于从互联网上获取信息并进行数据抓取。它通过发送HTTP请求获取网页内容,并解析网页内容提取所需信息。 一、网络爬虫的基本原理 什么是网络爬虫? 网络爬虫是一种自动化程序,模拟人类在网页上的行为&a…

【C++】vector容器接口要点的补充

接口缩容 在VS编译器的模式下&#xff0c;类似于erase和insert接口的函数通常会进行缩容&#xff0c;因此&#xff0c;insert和erase行参中的迭代器可能会失效。下图中以erase为例&#xff1a; 代码如下&#xff1a; #include <iostream> #include <vector> #inclu…

Python——条形图正负不同色加表格

条形图&#xff0c;当差值大于0时设置一个颜色&#xff0c;反之另一种颜色&#xff0c;并添加表格 import pandas as pd import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mtick import matplotlib.ticker as ticker#设置输出结果对齐方式 pd…