Helm 学习之路,一文弄懂

news2024/9/25 3:27:40

1. 什么是 Helm

1.1 概述

Helm 是 Kubernetes 应用程序的包管理器,和redhat中yum 管理包类似.

1.2 架构图v3

1.3 下载

官当

最新版本

官方github

curl -LO https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz

1.4 安装

  • 解压

#由于是二进制,直接解压到/usr/local/bin下就可以使用
tar zxvf helm-v3.15.2-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm

#查看版本
[root@kube-master ~]# helm version
version.BuildInfo{Version:"v3.15.2", GitCommit:"1a500d5625419a524fdae4b33de351cc4f58ec35", GitTreeState:"clean", GoVersion:"go1.22.4"}

其他方式参考,具体内容可参考官方 安装文档

1.5 win下安装

winget install Helm.Helm

  • 查看版本

2. 添加国内仓库

  • 微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本上官网有的chart这里都有

  • 阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)

  • 官方仓库(https://hub.kubeapps.com/charts/incubator)官方chart仓库,国内卡

#添加阿里云
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

#添加微软
helm repo add stable http://mirror.azure.cn/kubernetes/charts

#更新
helm repo update

#查看
helm repo list
helm search repo stable

3. ArtifactHub 使用

比如我们想要部署 Nginx,首先在 ArtifactHub 上进行搜索:

Bitnami 是 Helm 中最常用的仓库之一,它内置了很多常用的 Kubernetes 应用,点击nginx,进入主界面,之后点击右侧的install, 可以看到如何进行部署

4. Helm 概念 

Helm 中几个个非常重要的概念:

  • Repository

  • Chart

  • Release

  • Value

  • Template

  • Namespace

4.1 Repository

存放安装包的仓库,可以使用 helm env 查看

[root@kube-master ~]# helm env
HELM_BIN="helm"
HELM_BURST_LIMIT="100"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBEINSECURE_SKIP_TLS_VERIFY="false"
HELM_KUBETLS_SERVER_NAME=""
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_QPS="0.00"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry/config.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"

4.2 Chart

Chart,是 Helm 特有的安装包格式,这个安装包中包含了一个 Kubernetes 应用的所有资源文件

4.3 Release

Release 就是安装到 Kubernetes 中的 Chart 实例,每个 Chart 可以在集群中安装多次,每安装一次,就会产生一个 Release

4.4 Value

Helm Chart的参数,用于配置Kubernetes对象

4.5 Template

使用Go模板语言生成Kubernetes对象的定义文件

4.6 Namespace

Kubernetes中用于隔离资源的逻辑分区

4.7 部署流程

  1. 开发者首先创建并编辑chart的配置;

  2. 接着打包并发布至Helm的仓库(Repository);

  3. 当管理员使用helm命令安装时,相关的依赖会从仓库下载;

  4. 接着helm会根据下载的配置部署资源至k8s;

5. Helm语法

Helm官当

5.0 与5相比变化点

1.HelmCLI个别名字更名

helm delete  更名为 helm uninstall

helm inspect 更名为 helm show

helm fetch 更名为 helm pull

2.移除了用于本地临时搭建Chart Repository的helm serve命令

3.自动创建名称空间

在不存在的命名空间中创建发行版时,Helm2创建了命名空间。Helm3遵循其他Kubernetes对象的行为,如果命名空间不存在则返回错误.

4.不再需要requirements.yaml,依赖关系是直接在chart.yaml中定义.

5.1 模版注释

Chart.yaml

apiVersion: chart API 版本 (必需)  #必须有
name: chart名称 (必需)     # 必须有 
version: 语义化2 版本(必需) # 必须有

kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
description: 一句话对这个项目的描述(可选)
type: chart类型 (可选)
keywords:
  - 关于项目的一组关键字(可选)
home: 项目home页面的URL (可选)
sources:
  - 项目源码的URL列表(可选)
dependencies: # chart 必要条件列表 (可选)
  - name: chart名称 (nginx)
    version: chart版本 ("1.2.3")
    repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
    condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
    tags: # (可选)
      - 用于一次启用/禁用 一组chart的tag
    import-values: # (可选)
      - ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
    alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用

maintainers: # (可选) # 可能用到
  - name: 维护者名字 (每个维护者都需要)
    email: 维护者邮箱 (每个维护者可选)
    url: 维护者URL (每个维护者可选)

icon: 用做icon的SVG或PNG图片URL (可选)
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
  example: 按名称输入的批注列表 (可选).

values.yaml

templates

图片

image-20240709152235643

templates/ 目录下的文件被视为使用 Go 模板语言的动态 YAML 模板,并带有一些附加功能。

YAML 模板可防止配置重复,并允许您在开发、暂存和生产环境中安装相同的图表。

5.2 内置对象

Release 对象

Values 对象

Chart 对象

Capabilities 对象

Template 对象

常用使用的

内置作用
Release.Namerelease名称
Release.Namespacerelease命名空间
Release.Revisionrelease版本号。起始是1,每次升级或回滚都会自增1
Release.Servicerelease 服务的名称

5.3 内置函数

文档

upper

将整个字符串转换为大写:

upper "hello"

lower

将整个字符串转换为小写:

lower "HELLO"

title

转换为标题大小写:


title "hello world"

returns Hello World

5.4 流程控制

5.4.0 运算符

运算符作用
eq等于(equal to)
ne不等于(not equal to)
lt小于(less than)
le小于等于(less than or equal to)
gt大于(greater than)
ge大于等于(greater than or equal to)

5.4.1 if/else 条件块

  • 语法

如果值为如下情况,则if条件评估为 false


一个布尔型的假

一个数字零

一个空的字符串

一个 nil(空或 null)

一个空的集合(map,slice,tuple,dict,array)

例子:

上面配置是基于同一个pod 部署两个容器,一个是应用一个是nginx 的配置的通用模板。也就是说默认是关闭nginx 配置的,如果启用可以通过--set nginx.enabled=true 方式。

说明

当模板引擎运行时,它会删除

图片

中的内容,但保留其余空白,如下方式删除空行

图片

花括号里面的中横行“-” 的用途是清除helm 渲染后的yml 文件里面的空行,由于像if 判断这些语句不是k8s里面yml 文件里的配置信息,所以渲染后的yml 文件中if 等语句的位置会产生空行,所以加上“-”就会清除空行

谨慎使用:如:-}} ,这将会把如上的结果生成在同一行,因为它消除了两边的换行符.

5.4.2 with 指定范围

  • 定义

with作用域,用来控制变量范围。回想一下,.是对 当前作用域 的引用。因此 .Values就是告诉模板在当前作用域查找Values对象。

with语句块内不能再 .Release.Name对象,否则报错

  • 语法

{{ with PIPELINE }}
  # restricted scope
{{ end }}
  • 案例

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{.Release.Name}}-configmap
data:
  myvalue: "Hello World"
{{- with .Values.favorite}}
drink: {{.drink | default "tea" | quote}}
food: {{.food | upper | quote}}
{{- end}}

注意,现在我们可以引用 .drink 和 .food 无需对其进行限定。这是因为该 with 声明设置 . 为指向 .Values.favorite。在 {{end}} 后 . 复位其先前的范围。


但是请注意!在受限范围内,此时将无法从父范围访问其他对象。例如,下面会报错:
{{- with .Values.favorite}}
drink: {{.drink | default "tea" | quote}}
food: {{.food | upper | quote}}
release: {{.Release.Name}}    #此处报错
{{- end}}

解决方式:
{{- $releaseName := .Release.Name -}}      #在with区域外定义要引入的值,在里面再通过变量引入
{{- with .Values.favorite}}
drink: {{.drink | default "tea" | quote}}
food: {{.food | upper | quote}}
release: {{ $releaseName }}              #通过定义的变量引入
{{- end}}

5.4.3 range 循环块

  • 定义

Helm 的模板语言中,遍历集合的方式是使用 range 操作(类似for)

  • 语法


{{ range PIPELINE }}
  # restricted scope
{{ end }}
  • 案例

cat values.yaml 
  favorite:
    drink: coffee
    food: pizza
  pizzaToppings:
    - mushrooms
    - cheese
    - peppers
    - onions


将这个列表打印到我们的 ConfigMap 中:
  cat templates/configmap.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: {{.Release.Name}}-configmap
    data:
      myvalue: "Hello World"
  {{- with .Values.favorite}}
    drink: {{.drink | default "tea" | quote}}
    food: {{.food | upper | quote}}
  {{- end}}
    toppings: |-                            #因为此处要引入的是多行字符串,所以通过"|-"方式 
  {{- range .Values.pizzaToppings}}
    - {{. | title | quote}}               #"." 就是循环的对象中的单个元素,由此可见range也具有with 一样的功能,可以限定范围。
  {{- end}}



循环自建的元祖

  有时能快速在模板中创建一个列表,然后遍历该列表是很有用的。Helm 模板有一个功能可以使这个变得简单:tuple。
  sizes: |-
  {{- range tuple "small" "medium" "large"}}
  - {{.}}
  {{- end}}
 

 {{/*输出如下*/}}
  sizes: |-
    - small
    - medium
    - large



用于类似列表的对象以同时捕获索引和值:

  toppings: |-
  {{- range $index, $topping := .Values.pizzaToppings}}
  {{$index}}: {{ $topping }}
  {{- end}}

 注意,range 首先是变量,然后是赋值运算符,然后是列表。这将分配整数索引(从零开始)给 $index,值给 $topping。运行它将产生:

 

对于同时具有键和值的数据结构,我们可以使用 range 来获得两者

  apiVersion: v1
  kind: ConfigMap
  metadata:
    name: {{.Release.Name}}-configmap
  data:
    myvalue: "Hello World"
    {{- range $key, $val := .Values.favorite}}
    {{$key}}: {{ $val | quote }}
    {{- end}}

  #favorite 定义在 values.yaml中,如上文所示。

5.4.4 变量

  • 定义

Helm模板中,变量是对另一个对象的命名引用。遵循$name变量的格式且指定了一个特殊的赋值运算符::=

变量通常不是 “全局” 的。它们的范围是它们所在的块

  • 案例

这段代码会失败

{{- with .Values.favorite}}
   drink: {{.drink | default "tea" | quote}}
   food: {{.food | upper | quote}}
   release: {{.Release.Name}}
{{- end}}

Release.Name 不在该 with 块中限制的范围内。解决范围问题的一种方法是将对象分配给可以在不考虑当前范围的情况下访问的变量。

使用变量重写上面的 Release.Name

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{.Release.Name}}-configmap
data:
  myvalue: "Hello World"
{{- $relname := .Release.Name -}}
{{- with .Values.favorite}}
  drink: {{.drink | default "tea" | quote}}
  food: {{.food | upper | quote}}
  release: {{$relname}}
{{- end}}

注意,在我们开始 with 块之前,我们赋值 $relname :=.Release.Name。现在在 with 块内部,$relname 变量仍然指向发布名称。因为变量不受with 范围限制。

5.4.5 命名模板

模版

在命名模板时要注意一个重要的细节:模板名称是全局的。如果声明两个具有相同名称的模板,则最后加载一个模板是起作用的模板。

define定义命名模板

可以在/templates/*.yaml 文件中定义命名模板也可以在/templates/_helpers.tpl 定义

template/include 使用命名模板

include与template 区别

include 是可以替代template 的更高级的用法,可以增加缩进功能。

例如创建一个configmap 它的lable 和 data 下面的数据缩进是不同的,lable 缩进在metadata 下面,所以lable 下面的数据是相比于顶格是缩进四个空格。data 本身就是顶格写的,它下面的数据缩进两个空格即可

define 定义的命名模板内容如果同时引入到lable 和 data 下面,那么相同的内容但是缩进不同,如果直接用template 引入那么就会原模原样引入不缩进而是顶格引入到yaml 中

这样不符合configmap 的定义语法可能不报错但是不会生效这两部分内容,
即使在模本文件中缩进引用{{- template "mychart.labels" . }},依然不生效,
所以在引入过程中需要增加空格所以include 可以替代template 增加空格,语法为:{{- include "mychart.labels" .| indent 4 }} 数字4表示缩进几个空格
  • 案例

cat _helpers.tpl
  {{/* 生成基本的资源配置 */}}
  {{- define "resources" }}
  {{- with .Values.resources}}
  limits:
    cpu: {{ .limits.cpu }}
    memory: {{ .limits.memory }}
  requests:
    cpu: {{ .requests.cpu }}
    memory: {{ .requests.memory }}
   {{- end }}
   {{- end }}

cat templates/deployment.yaml
...
  - name: {{ .Release.Name }}-nginx
    image: {{ .Values.image.repository }}/nginx-qa:{{ .Values.image.tagn }}
    imagePullPolicy: {{ .Values.image.pullPolicy }}
    ports:
    - containerPort: 80
      protocol: TCP
    resources:
    {{- include "resources" .| indent 10 }}            #在此处通过命名模板名字引用
    volumeMounts:
    - name: nginx-config
      mountPath: /etc/nginx/conf.d
    ...

5.4.6 模板中"-"


示例一
...
name: {{- Values.name -}} #话括号里面的横线左边的会删除括号左边的空格,右边的会删除右边的空格,在此处一般不加这俩“-”
...
示例二
...
{{-if Values.nginx.enable }} #此处作用就是删除if 和 end 逻辑语句所占的空行,因为这些流程控制语句不会渲染成实际的yaml 配置,默认保留空行再yaml 文件中,所以需要用“-”删除
...
{{- end }}
...

5.4.7 调试

Helm也提供了--dry-run --debug调试参数,帮助验证模板正确性。在执行helm install时候带上这两个参数就可以把对应的values值和渲染的资源清单打印出来,而不会真正的去部署一个release

helm install web --dry-run /root/mychart

5.5 set格式和限制

--set 选项使用0或多个 name/value 对

1、最简单的name/value对

--set name=value
等价于
name: value

2、多个name/value对

--set a=b,c=d
等价于
a: b
c: d

3、更复杂的表达式

--set outer.inner=value
等价于
outer:
  inner: value

4、列表的表达

--set name={a, b, c}
等价于
name:
  - a
  - b
  - c

5、name/key可以设置为null或者空数组


--set name=[],a=null
由
name:
  - a
  - b
  - c
a: b
变为了
name: []
a: null

6、使用数组下标的语法来访问列表中的元素

从 2.5.0 版本开始支持

--set servers[0].port=80
等价于
servers:
  - port: 80

7、多个值得数组下标语法

--set servers[0].port=80,servers[0].host=example
等价于
servers:
  - port: 80
    host: example

8、特殊字符转义

--set name=value1\,value2
等价于
name: "value1,value2"

9、转义.

--set nodeSelector."kubernetes\.io/role"=master
等价于
nodeSelector:
  kubernetes.io/role: master

6. Helm命令

官方

helm --help  通过help获取更多解释

6.1 添加仓库

helm repo add

[root@kube-master ~]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories

helm repo list

[root@kube-master ~]# helm repo list
NAME    URL
bitnami https://charts.bitnami.com/bitnami

helm repo update

helm repo update repo_name

helm repo remove

 helm repo remove repo_name

6.2 创建

helm create

[root@kube-master ~]# helm create demo

[root@kube-master ~]# tree demo
demo
├── charts                 # 依赖其他包的charts文件
├── Chart.yaml      # chart的描述文件,包括ico地址,版本信息等
├── templates              # 存放k8s模板文件目录
│   ├── deployment.yaml    # Kubernetes deployment 配置
│   ├── _helpers.tpl       # 下划线开头的文件为公共文件,可以被其他模板引用
│   ├── hpa.yaml           # #水平 pod 自动扩缩容 go 模板文件
│   ├── ingress.yaml  # Kubernetes ingress 配置
│   ├── NOTES.txt           # 用户运行 helm install 时候的提示信息
│   ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│   ├── service.yaml        # Kubernetes service 配置
│   └── tests    # test
│       └── test-connection.yaml
└── values.yaml             #模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件
目录结构介绍
目录说明
charts可选目录,可能包含子chart
Chart.yaml包含chart描述的主文件
templatesKubernetes 资源定义为模板的目录
values.yaml定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖
.helmignore定义打包时要忽略的模式的地方(概念上与 .gitignore 类似)

helm lint

检查语法是否正确


[root@kube-master ~]# helm lint ./demo
==> Linting ./demo
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

6.3 下载

helm pull

helm pull bitnami/nginx

6.4 查询

helm ls

[root@kube-master ~]# helm ls --all
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

helm list

#显示某个命名空间下的所有 Release
[root@kube-master ~]# helm  list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

helm status

#查询某个 Release 的状态信息
helm status my-nginx

helm get

获取某个 Release 的扩展信息,包括:

  • helm get hooks - 获取 Release 关联的钩子信息

  • helm get manifest - 获取 Release 的清单信息

  • helm get notes - 获取 Release 的注释

  • helm get values - 获取 Release 的 values 文件

  • helm get all - 获取 Release 的所有信息

helm history

helm history my-nginx

helm search hub

ArtifactHub 中搜索 Chart

helm search hub nginx

helm search repo

helm search repo nginx

helm show

该命令用于显示 Chart 的基本信息,包括:

  • helm show chart - 显示 Chart 定义,实际上就是 Chart.yaml 文件的内容

  • helm show crds - 显示 Chart 的 CRD

  • helm show readme - 显示 Chart 的 README.md 文件中的内容

  • helm show values - 显示 Chart 的 values.yaml 文件中的内容

  • helm show all - 显示 Chart 的所有信息

6.5 安装

Helm的执行安装顺序

Helm按照以下顺序安装资源:

  • Namespace

  • NetworkPolicy

  • ResourceQuota

  • LimitRange

  • PodSecurityPolicy

  • PodDisruptionBudget

  • ServiceAccount

  • Secret

  • SecretList

  • ConfigMap

  • StorageClass

  • PersistentVolume

  • PersistentVolumeClaim

  • CustomResourceDefinition

  • ClusterRole

  • ClusterRoleList

  • ClusterRoleBinding

  • ClusterRoleBindingList

  • Role

  • RoleList

  • RoleBinding

  • RoleBindingList

  • Service

  • DaemonSet

  • Pod

  • ReplicationController

  • ReplicaSet

  • Deployment

  • HorizontalPodAutoscaler

  • StatefulSet

  • Job

  • CronJob

  • Ingress

  • APIService

6.6 更新

helm upgrade

格式:

helm upgrade [RELEASE] [CHART] [flags]
指定'--values'/'-f'参数

可以多次指定'--values'/'-f'参数,最后(最右边)指定的文件优先级最高。比如如果myvalues.yaml和override.yaml同时包含了名为 'Test'的key,override.yaml中的设置会优先使用:


helm upgrade --set foo=bar --set foo=newbar redis ./redis
案例

修改nginx镜像版本为1.27.0

helm upgrade my-nginx nginx-helm-1.0.0.tgz --set image.tag=1.27.0

6.7 回滚

helm rollback

查看发布历史

#查看
[root@kube-master ~]# helm list
NAME NAMESPACE REVISION UPDATED                                 STATUS   CHART      APP VERSION
demo default   3        2024-07-16 18:06:26.685169771 +0800 CST deployed demo-1.0.0 v1

#查看历史发布
[root@kube-master ~]# helm history demo
REVISION UPDATED                  STATUS     CHART      APP VERSION DESCRIPTION
1        Tue Jul 16 18:03:50 2024 superseded demo-1.0.0 v1          Install complete
2        Tue Jul 16 18:04:14 2024 superseded demo-2.0.0 v2          Upgrade complete
3        Tue Jul 16 18:06:26 2024 deployed   demo-1.0.0 v1          Rollback to 1

回滚到第一个版本

helm rollback <name> <REVISION>

6.8 模版渲染

本质就是以yaml文件查看内容

[root@kube-master ~]# helm template ./demo
---
# Source: demo/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: release-name-demo
  labels:
    helm.sh/chart: demo-0.1.0
    app.kubernetes.io/name: demo
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
automountServiceAccountToken: true

6.9 卸载 Release

#删除
helm uninstall my-nginx

7. 手动发布Helm

7.1 创建

helm create demo
  • 查看目录结构

[root@kube-master demo]# tree -L 2
.
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
└── values.yaml

3 directories, 9 files
  • 修改配置文件

  1. 编辑自描述文件 Chart.yaml , 修改version和appVersion信息

apiVersion: v2
name: demo
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application

# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 1.0.0 # 修改 项目版本号

# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "v1" # 修改 镜像版本
  1. 编辑values.yaml配置文件

修改副本数和镜像

replicaCount: 2

image:
  repository: registry.cn-zhangjiakou.aliyuncs.com/hsuing/demoapp
  pullPolicy: IfNotPresent
  # 0verrides the image tag whose default is the chart appVersion.
  tag: ""

7.2 打包Chart

  • 检查语法是否正确


helm lint demo
  • 打包自定义的chart

[root@kube-master helm]# helm package demo
Successfully packaged chart and saved it to: /root/helm/demo-0.1.0.tgz

7.3 发布Chart

将打包好的Chart发布到一个Helm Repository中。可以使用helm repo add命令添加一个Repository,然后使用helm push命令将Chart推送到Repository中


helm repo add myrepo https://example.com/charts
helm push nginx-helm-1.0.0.tgz myrepo

7.4 安装Release

[root@kube-master helm]# helm  install demo demo-0.1.0.tgz
NAME: demo
LAST DEPLOYED: Tue Jul 16 17:46:20 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=demo,app.kubernetes.io/instance=demo" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
  • 查看pod

[root@kube-master helm]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS      AGE
demo-857bf7c87b-l9lkv                     1/1     Running   0             17s
demo-857bf7c87b-mrx7x                     1/1     Running   0             17s

7.5 管理Release

更新
  1. 编辑自描述文件 Chart.yaml , 修改version和appVersion信息

  2. 重新打包

  • 检查语法

helm lint demo
  • 打包

helm package demo

3.更新chart

helm upgrade demo demo-2.0.0.tgz
回滚
  • 查看当前版本

[root@kube-master helm]# helm list
NAME NAMESPACE REVISION UPDATED                                STATUS   CHART      APP VERSION
demo default   2        2024-07-16 18:04:14.47907591 +0800 CST deployed demo-2.0.0 v2
  • 查看历史版本


[root@kube-master helm]# helm history demo
REVISION UPDATED                  STATUS     CHART      APP VERSION DESCRIPTION
1        Tue Jul 16 18:03:50 2024 superseded demo-1.0.0 v1          Install complete
2        Tue Jul 16 18:04:14 2024 deployed   demo-2.0.0 v2          Upgrade complete
  • 回滚指定版本

[root@kube-master helm]# helm rollback demo 1
Rollback was a success! Happy Helming!

8.Helm导出YAML文件

从helm 导出到普通yaml文件,两边是可以互相转换的,下期讲解如何从yaml文件到helm的转换,不用为再次编写helm而苦恼

8.0渲染导出

  • 当前路径

[root@kube-master helm]# pwd
/root/helm

[root@kube-master helm]# ls
demo  demo-1.0.0.tgz  demo-2.0.0.tgz
  • 导出

helm template  demo --output-dir /root/hantest/

wrote /root/hantest//demo/templates/serviceaccount.yaml
wrote /root/hantest//demo/templates/service.yaml
wrote /root/hantest//demo/templates/deployment.yaml
wrote /root/hantest//demo/templates/tests/test-connection.yaml

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

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

相关文章

【LabVIEW学习篇 - 12】:通知器

文章目录 通知器案例一案例二案例三&#xff08;在不同VI中用同一个通知器&#xff09; 通知器 同步技术&#xff1a;同步技术用来解决多个并行任务之间的同步或通信问题。 通知器比较适合一对多的操作&#xff0c;类似于广播&#xff0c;一点发出的通知消息&#xff0c; 其它…

【开源】嵌入式Linux(IMX6U)应用层综合项目(2)--智能家居APP

目录 1.简介 1.1功能介绍 1.2技术栈介绍 1.3演示视频 1.4硬件介绍 2.软件设计 2.1智能家居UI设计 2.2.main函数 3.结尾&#xff08;附网盘链接&#xff09; 1.简介 此文章并不是教程&#xff0c;只能当作笔者的学习分享&#xff0c;只会做一些简单的介绍&#xff0c;其…

【电路笔记】-放大器失真

放大器失真 文章目录 放大器失真1、概述2、放大器因幅度失真而产生失真3、削波导致的幅度失真4、谐波引起的频率失真5、相位失真导致的放大器失真放大器失真可以采取许多形式,例如幅度、频率和相位失真,由于剪裁引起。 1、概述 放大器要正确运行且不产生输出信号失真,需要在…

跨境电商做独立站你需要考虑的几个问题

跨境电商卖家无论是做B2B还是B2C的&#xff0c;大部分卖家都是从平台开始做起&#xff0c;后面可能会都接触到独立站&#xff0c;但是说到独立站&#xff0c;相信很大部分的人都不了解&#xff0c;就拿最简单的问题来说&#xff0c;经常有人问&#xff0c;独立站和平台有什么区…

MATLAB(11)智能算法+BP神经网络

一、前言 在MATLAB中实现智能算法与BP神经网络的结合&#xff0c;需要分别编写智能算法的代码和BP神经网络的训练代码&#xff0c;并将两者整合起来。由于篇幅限制&#xff0c;我将提供一个简化的示例&#xff0c;使用遗传算法&#xff08;Genetic Algorithm, GA&#xff09;来…

《学会 SpringMVC 系列 · 返回值处理器》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

微调(二)

Selective类方法中的BitFit 它的核心思想是仅更新模型中的偏置项&#xff08;bias terms&#xff09;或部分偏置项&#xff0c;从而实现参数的稀疏更新。这种方法在小到中等规模的训练数据上表现出色&#xff0c;有时甚至能够超越全模型微调的性能。对于BERT模型&#xff0c;B…

【PGCCC】PostgreSQL 14 小版本分析,有那个版本不建议使用#PG中级

以下是对 PostgreSQL 14 各个小版本的详细分析&#xff0c;包括每个版本的主要变化、修复的 bug 和潜在的问题&#xff1a; PostgreSQL 14.0 发布日期&#xff1a;2021 年 9 月 30 日 主要变化&#xff1a; 增加了并行查询的改进&#xff0c;提升了性能。增强了 JSON 数据类…

美团2024年春招第一场笔试[测开方向],编程题+选择题详解,ACM式C++解法

编程题&选择题 编程题小美的平衡矩阵思路代码 小美的数组询问思路代码 验证工号思路代码 选择题1.在计算机网络中&#xff0c;端口号的作用是什么2.HTTPS协议通过使用哪些机制来确保通信的安全性3.Etag用于标识资源的唯一标识符&#xff0c;他可以用于4.在一个单道系统中&a…

乱弹篇(40)人类追求长寿

不要认为只有中国的老龄化才严重&#xff0c;实际上全球都面临老龄化&#xff0c;其中日本最为严重。 这是随着人类生活和医学水平的不断提高&#xff0c;寿命才会比过去数十年有了大幅度的提升。据资料显示&#xff0c;目前全球平均预期寿命估计为73岁。与百年之前相比&#…

DNS在架构中的使用

1 介绍 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;是一种服务&#xff0c;它是域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP地址数串。简单来说&#xff0c;DNS就是…

dpdk实现udp协议栈

使用DPDK实现UDP用户态协议栈&#xff0c;实现流程中包括&#xff1a; 三类线程 1、收发包线程 2、用户态协议栈线程 3、udp服务端线程 两类缓冲区&#xff1a; 1、协议栈收包缓冲区和协议栈发包缓冲区 2、udp收包缓冲区和udp发包缓冲区 协议栈缓冲区中存储的数据是str…

在线考试系统产品分析与技术实现的深度融合

在当今数字化教育浪潮中&#xff0c;在线考试系统作为教育信息化的重要组成部分&#xff0c;正以前所未有的速度改变着传统教育模式。它不仅打破了地域和时间的限制&#xff0c;提高了考试效率与公平性&#xff0c;还通过数据分析为教育决策提供了科学依据。本文旨在探讨在线考…

集装箱排柜系统介绍

1.功能介绍 用户导入产品基本信息表&#xff0c;每个货号代表一种货物&#xff0c;它放一个立方体中&#xff0c;此立方体称为托。 之后&#xff0c;用户导入订单表&#xff0c;其中的货号是顾客订购的货物。 用户选好目的港、集装箱类型等信息&#xff0c;集装箱排柜系统开始计…

解锁AI潜能,引领智能新时代——《深度强化学习》

在人工智能的浪潮中&#xff0c;深度强化学习如同一股不可忽视的强流&#xff0c;正以前所未有的速度推动着科技的边界&#xff0c;引领我们进入一个充满无限可能的新时代。这本《深度强化学习》不仅是一部技术宝典&#xff0c;更是一场关于智能探索与梦想实现的深度对话&#…

太阳能光伏气象站:绿色能源与气象科技

在追求可持续发展的道路上&#xff0c;太阳能光伏气象站以其独特的创新设计&#xff0c;成为了绿色能源与气象科技融合的典范。这款设备不仅利用太阳能作为清洁能源供电&#xff0c;还集成了先进的气象监测技术&#xff0c;为光伏发电提供了精准的环境数据支持。 太阳能光伏气象…

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升

无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语言模型的开源知识库问答系统, 官方网址:https://maxkb.cn/ GitHub:https://github.com/1Panel-dev/MaxKB…

pycharm如何查看git历史版本变更信息

通过名字查看不同版本 查看版本不同地方

Django REST Framework(十五)路由Routes

如何在Django REST framework中利用SimpleRouter和DefaultRouter来高效生成视图集的路由信息,并详细解释如何使用action装饰器为视图集中的自定义方法生成路由 1.路由的定义规则 路由称为URL(Uniform Resource Locator,统一资源定位符),也可以称为URLconf,是对可以从互联…

【xss-labs-master】靶场通关详解!-----持续更新

XSS基础概念&#xff1a; 跨站脚本攻击XSS(Cross Site Scripting)&#xff0c;为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆&#xff0c;故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其…