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 部署流程
-
开发者首先创建并编辑chart的配置;
-
接着打包并发布至Helm的仓库(Repository);
-
当管理员使用helm命令安装时,相关的依赖会从仓库下载;
-
接着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.Name | release名称 |
Release.Namespace | release命名空间 |
Release.Revision | release版本号。起始是1,每次升级或回滚都会自增1 |
Release.Service | release 服务的名称 |
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描述的主文件 |
templates | Kubernetes 资源定义为模板的目录 |
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
-
修改配置文件
-
编辑自描述文件 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" # 修改 镜像版本
-
编辑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
更新
-
编辑自描述文件 Chart.yaml , 修改version和appVersion信息
-
重新打包
-
检查语法
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