学习 Helm ,一文弄懂

news2024/11/14 5:48:31

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/1971519.html

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

相关文章

科普文:解读MySQL 执行计划explain

概叙 实战&#xff1a;万字小结MySQL慢原因分析-CSDN博客 实战&#xff1a;搞懂SQL执行流程、SQL执行计划解读和SQL优化_sql解析和sql执行计划-CSDN博客 在排查mysql执行慢的过程中&#xff0c;前面文章中都有解释explain执行计划&#xff0c;这里单独拿出来解读一下。 慢查…

uniapp打开地图直接获取位置

uniapp官网文档 https://en.uniapp.dcloud.io/api/location/open-location.html <view class"map-content" click.stop"kilometer(item)"><view class"km">{{item.distance||0}}km</view></view>import map from ../../…

业务逻辑支付漏洞靶场复现(dami,niushop,cmseasy)

目录 dami_5.4 第一种&#xff1a;直接修改页面数量 第二种&#xff1a;利用抓包修改购买数量和金额 Niushop Cmseasy 第一种&#xff1a;改变购买数量 第二种&#xff1a;利用抓包修改数量 dami_5.4 首先通过注册页面注册账户&#xff0c;并登录。 第一种&#xff1a;直…

鉴源实验室·HTTP协议网络安全攻击

作者 | 李芷若 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 01 背 景 随着互联网的迅猛发展&#xff0c;HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&…

萝卜快跑引领换电革命,储能蓝海爆发千亿商机,你抓住了吗?

近日&#xff0c;百度旗下的无人驾驶出行服务平台“萝卜快跑”火爆出圈&#xff0c;7月10日凭借优秀的订单量表现成功助推百度股价上涨超10%&#xff0c;其六公里4元的超高性价比广受好评。多个网络平台的自媒体博主们也抓准时机开始各类测评体验。 百度“萝卜快跑”无人驾驶项…

QT安装 error: [QNetworkReply::NetworkError(

QT安装遇到问题&#xff1a; [29040] Warning: No QtAccount credentials found. Please login via the maintenance tool of the SDK. [29040] Warning: No QtAccount credentials found. Please login via the maintenance tool of the SDK. [31404] Warning: Network error…

linux用户组练习

准备工作 [rootlocalhost ~]# watch -n 1 tail -n 5 /etc/group使用watch 动态监控 1.建立用户组 shengcan&#xff0c;其id 为2000 2.建立用户组 caiwu&#xff0c;其id 为 2001 3.足建立用户组 jishu&#xff0c;其id 为 2002 4.建立用户lee&#xff0c;指定其主组id为sh…

QT多媒体编程(二)——视频编程知识详解及mp4视频播放器Demo

目录 引言 1. QMediaPlayer 类详解 1.1 基本用法 示例代码&#xff1a; 1.2 常用函数 2. QVideoWidget 类详解 2.1 基本用法 示例代码&#xff1a; 2.2 常用函数 3. 实际案例&#xff1a;视频播放器 UI界面 核心代码&#xff1a; 运行结果&#xff1a; 4. 总结 引…

NodeJS凉山地区特色农产品团购平台-计算机毕业设计源码72936

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户登录流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4用例分析 2.5本章小结 3 系统总体设计 3…

【LeetCode每日一题】2024年8月第一周(上)

2024.7.30 中等 链接&#xff1a;2961. 双模幂运算 &#xff08;1&#xff09;题目描述&#xff1a; &#xff08;2&#xff09;示例&#xff1a; &#xff08;3&#xff09;分析&#xff1a; ① 在计算中&#xff0c;反复用到了%10&#xff0c;说明返回的只要取个位即可&…

SEO之网站结构优化(八)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、新手上云 8、URL静态化 URL静态化一直以来都是最基本的SEO要求之一&#xff0c;但近一两年 SEO 行业对是否一定要做静…

科普文:万字细说微服务及其框架Netflix,Spring Cloud,Spring Cloud Alibaba梳理

概叙 微服务&#xff08;Microservices&#xff09;是一种软件架构风格&#xff0c;它将单一的应用程序拆分为多个小的服务&#xff0c;每个服务都是独立运行和部署的。每个微服务通常只专注于一个业务功能&#xff0c;具有自己的数据存储&#xff0c;并且通过轻量级的通信机制…

多无人机协同机间通信技术详解

随着无人机技术的飞速发展&#xff0c;多无人机系统&#xff08;Multi-Unmanned Aerial Vehicle, Multi-UAV&#xff09;在军事侦察、环境监测、目标跟踪、物流配送等多个领域展现出巨大潜力。多无人机协同作业的核心在于高效的机间通信技术&#xff0c;它能够实现无人机之间的…

npm install 巨慢,导致Jenkins编译报错问题解决——基础积累

今天在弄后台系统的服务器编译时&#xff0c;一直报错。报错信息为&#xff1a;系统找不到指定的路径。 最后进入到服务器中&#xff0c;找到E:/Jenkins/WorkSpace/JiePeiAiMomsAdmin_FenZhi这个路径&#xff0c;然后通过cmd进入到命令提示符中。 然后通过npm i进行安装&#…

简单的docker学习 第4章docker容器

第4章 Docker容器 4.1 容器基础 4.1.1 容器启动流程 通过 docker run 命令可以启动运行一个容器。该命令在执行时首先会在本地查找指定的镜像&#xff0c;如果找到了&#xff0c;则直接启动&#xff0c;否则会到镜像中心查找。如果镜像中心存在该镜像&#xff0c;则会下载到…

外贸建站:WordPress搭建外贸独立站零基础小白保姆级教程

凡做外贸的&#xff0c;我相信在过去几年中通过亚马逊、速卖通等电商平台上都取得了一定的成功。然而&#xff0c;近年来电商平台上的竞争激烈&#xff0c;利润空间有限&#xff0c;流量获取困难和昂贵&#xff0c;这对许多外贸从业者造成了困扰。因此&#xff0c;为了减少对平…

易境通散货集拼系统是如何让散拼效率提高80%的?

散货集拼为什么必须要有靠谱的系统才行&#xff1f;因为散拼很容易出现各种问题&#xff0c;而且会连带着影响不同的环节。货物整箱利用空间不充足&#xff0c;会导致集装箱数量增加&#xff0c;运费成本激增&#xff0c;返工整理会耽误发货&#xff0c;延长送货时间&#xff0…

【JavaEE】线程状态

目录 前言 一.线程状态图 二.线程状态 1.初始状态(NEW) 2.运行状态(RUNNING) 3.等待状态&#xff08;WAITING) 4.超时等待&#xff08;TIMED_WAITING) 5.阻塞状态&#xff08;BLOCKED) 6.终止状态(TERMINATED) 三.线程状态间的转换 四.总结 前言 线程状态及其状态转换…

mindspore框架下Pix2Pix模型实现真实图到线稿图的转换|(三)Pix2Pix模型训练与模型推理

mindspore框架下Pix2Pix模型实现真实图到线稿图的转换 mindspore框架下Pix2Pix模型实现真实图到线稿图的转换|&#xff08;一&#xff09;dataset_pix2pix数据集准备mindspore框架下Pix2Pix模型实现真实图到线稿图的转换|&#xff08;二&#xff09;Pix2Pix模型构建mindspore框…

Google Gemma2 2B:语言模型的“小时代”到来?

北京时间8月1日凌晨&#xff08;当地时间7月31日下午&#xff09;&#xff0c;Google发布了其Gemma系列开源语言模型的更新&#xff0c;在AI领域引发了巨大的震动。Google Developer的官方博客宣布&#xff0c;与6月发布的27B和9B参数版本相比&#xff0c;新的2B参数模型在保持…