k8s中helm安装和使用以及命令大全

  • 2025-04-08 13:12:24
  • 运维
  • 71
  • shevechco

helm一个命令行客户端工具,主要用于Kubernetes应用chart的创建、打包、发布和管理等。
Chart代表着Helm包。它包含在Kubernetes集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repository(仓库)是用来存放和共享charts的地方。它就像Perl的CPAN档案库网络或是Fedora的软件包仓库,只不过它是供 Kubernetes 包所使用的。
下面我们一起来看看helm的安装和使用方法。
我们首先下载我们需要使用的heml版本包,可以在这里下载https://github.com/helm/helm/releases/latest

tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

我们也可以使用本地安装(推荐)

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

然后查看helm版本

helm version

您可以添加一个chart 仓库。从 Artifact Hub(https://artifacthub.io/packages/search?kind=0)中查找有效的Helm chart仓库。
例如我们添加一个kube-prometheus-stack

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update #更新仓库

然后我们可以通过命令查看被安装的charts列表

helm search repo prometheus-community

然后进行安装

helm install [RELEASE_NAME] prometheus-community/kube-prometheus-stack

在安装过程中,helm客户端会打印一些有用的信息,其中包括:哪些资源已经被创建,release当前的状态,以及你是否还需要执行额外的配置步骤。
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

Helm 客户端不会等到所有资源都运行才退出。许多charts需要大小超过600M的Docker镜像,可能需要很长时间才能安装到集群中。
你可以使用helm status来追踪release的状态,或是重新读取配置信息:
安装前自定义chart,很多时候,我们需要自定义chart来指定我们想要的配置
使用helm show values可以查看chart中的可配置选项:

helm show values bitnami/wordpress
## Global Docker image parameters
## Please, note that this will override the image parameters, including dependencies, configured to use the global value
## Current available global Docker image parameters: imageRegistry and imagePullSecrets
##
# global:
# imageRegistry: myRegistryName
# imagePullSecrets:
# - myRegistryKeySecretName
# storageClass: myStorageClass

## Bitnami WordPress image version
## ref: https://hub.docker.com/r/bitnami/wordpress/tags/
##
image:
registry: docker.io
repository: bitnami/wordpress
tag: 5.6.0-debian-10-r35
[..]

然后,你可以使用YAML格式的文件覆盖上述任意配置项,并在安装过程中使用该文件。

echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml
helm install -f values.yaml bitnami/wordpress --generate-name

上述命令将为MariaDB创建一个名称为user0的默认用户,并且授予该用户访问新建的user0db数据库的权限。chart中的其他默认配置保持不变。
安装过程中有两种方式传递配置数据:

--values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
--set:通过命令行的方式对指定项进行覆盖。

如果同时使用两种方式,则--set中的值会被合并到--values中,但是--set中的值优先级更高。在--set中覆盖的内容会被被保存在ConfigMap中。可以通过 helm get values <release-name>来查看指定release中--set设置的值。也可以通过运行helm upgrade并指定 -reset-values字段来清除--set 中设置的值。

--set 的格式和限制
--set 选项使用0或多个name/value对。最简单的用法类似于:--set name=value,等价于如下YAML格式:
name: value

多个值使用逗号分割,因此 --set a=b,c=d 的 YAML 表示是:

a: b
c: d

支持更复杂的表达式。例如,--set outer.inner=value被转换成了:

outer:
inner: value

列表使用花括号({})来表示。例如,--set name={a, b, c}被转换成了:

name:
- a
- b
- c

某些name/key可以设置为null或者空数组,例如--set name=[],a=null由

name:
- a
- b
- c
a: b

变成了

name: []
a: null

从 2.5.0 版本开始,可以使用数组下标的语法来访问列表中的元素。例如 --set servers[0].port=80 就变成了:

servers:
  - port: 80

多个值也可以通过这种方式来设置。--set servers[0].port=80,servers[0].host=example 变成了:

servers:
  - port: 80
    host: example

如果需要在 --set 中使用特殊字符,你可以使用反斜线来进行转义;--set name=value1\,value2 就变成了:

name: "value1,value2"

类似的,你也可以转义点序列(英文句号)。这可能会在 chart 使用 toYaml 函数来解析 annotations,labels,和 node selectors 时派上用场。--set nodeSelector."kubernetes\.io/role"=master 语法就变成了:

nodeSelector:
  kubernetes.io/role: master

深层嵌套的数据结构可能会很难用 --set 表达。我们希望 Chart 的设计者们在设计 values.yaml 文件的格式时,考虑到 --set 的使用。
更多安装方法
helm install 命令可以从多个来源进行安装:
chart 的仓库(如上所述)

本地 chart 压缩包(helm install foo foo-0.1.1.tgz)
解压后的 chart 目录(helm install foo path/to/foo)
完整的 URL(helm install foo https://example.com/charts/foo-1.2.3.tgz)

可以使用helm list命令查看当前发布了哪些helm应用

helm list
#或者
helm ls

上述两种命令会列出所有可被部署的版本。
而在Helm 3中,删除也会移除release的记录。 如果你想保留删除记录,使用helm uninstall --keep-history。
使用helm list --uninstalled只会展示使用了--keep-history删除的release。
helm list --all会展示Helm保留的所有release记录,包括失败或删除的条目(指定了 --keep-history)
卸载一个部署版本

helm uninstall mysql-1612624192
release "mysql-1612624192" uninstalled

该命令会从Kubernetes卸载mysql-1612624192,它将删除和该版本相关的所有相关资源(service、deployment、 pod等等)甚至版本历史。
如果您在执行 helm uninstall 的时候提供 --keep-history 选项, Helm将会保存版本历史。 您可以通过命令查看该版本的信息

helm status mysql-1612624192
Status: UNINSTALLED
...

因为 --keep-history 选项会让helm跟踪你的版本(即使你卸载了他们), 所以你可以审计集群历史甚至使用helm rollback回滚版本。
升级release和失败时恢复
当你想升级到chart的新版本,或是修改release的配置,你可以使用helm upgrade命令。
一次升级操作会使用已有的 release 并根据你提供的信息对其进行升级。由于Kubernetes的chart可能会很大而且很复杂,Helm 会尝试执行最小侵入式升级。即它只会更新自上次发布以来发生了更改的内容。

helm upgrade -f panda.yaml happy-panda bitnami/wordpress

在上面的例子中,happy-panda 这个 release 使用相同的 chart 进行升级,但是使用了一个新的YAML文件:

mariadb.auth.username: user1

我们可以使用helm get values命令来看看配置值是否真的生效了:

helm get values happy-panda
mariadb:
auth:
username: user1

helm get是一个查看集群中release的有用工具。正如我们上面所看到的,panda.yaml中的新值已经被部署到集群中了。
现在,假如在一次发布过程中,发生了不符合预期的事情,也很容易通过helm rollback [RELEASE] [REVISION]命令回滚到之前的发布版本。

helm rollback happy-panda 1

上面这条命令将我们的happy-panda回滚到了它最初的版本。release版本其实是一个增量修订(revision)。 每当发生了一次安装、升级或回滚操作,revision 的值就会加1。第一次 revision 的值永远是1。我们可以使用 helm history [RELEASE] 命令来查看一个特定 release 的修订版本号。
你还可以指定一些其他有用的选项来自定义 Helm 在安装、升级、回滚期间的行为。请注意这并不是 cli 参数的完整列表。 要查看所有参数的说明

helm <command> --help
--timeout:一个 Go duration 类型的值, 用来表示等待 Kubernetes 命令完成的超时时间,默认值为 5m0s。
--wait:表示必须要等到所有的 Pods 都处于 ready 状态,PVC 都被绑定,Deployments 都至少拥有最小 ready 状态 Pods 个数(Desired减去 maxUnavailable),并且 Services 都具有 IP 地址(如果是LoadBalancer, 则为 Ingress),才会标记该 release 为成功。最长等待时间由 --timeout 值指定。如果达到超时时间,release 将被标记为 FAILED。注意:当 Deployment 的 replicas 被设置为1,但其滚动升级策略中的 maxUnavailable 没有被设置为0时,--wait 将返回就绪,因为已经满足了最小 ready Pod 数。
--no-hooks:不运行当前命令的钩子。
--recreate-pods(仅适用于 upgrade 和 rollback):这个参数会导致重建所有的 Pod(deployment中的Pod 除外)。(在 Helm 3 中已被废弃)

Helm管理应用的所有必需命令如下:
Chart管理

helm create <name> # 创建chart目录以及chart中使用的常用文件和chart。
helm package <chart-path> # 将chart打包到有版本的chart归档文件中。
helm lint <chart> # 运行测试以检查图表并确定可能的问题
helm show all <chart> # 检查图表并列出其内容
helm show values <chart> # 展示values.yaml文件内容
helm pull <chart> # 下载/拉取 chart
helm pull <chart> --untar=true # 如果设置为true,将在下载后解压缩chart
helm pull <chart> --verify # 在使用软件包之前,请先对其进行验证
helm pull <chart> --version <number> # 使用Default-latest时,请指定要使用的chart版本的版本约束
helm dependency list <chart> # 显示chart的依赖项列表

安装和卸载应用

helm install <name> <chart> # 安装带有名称的chart
helm install <name> <chart> --namespace <namespace> # 在特定的名称空间中安装chart
helm install <name> <chart> --set key1=val1,key2=val2 # 在命令行上设置值(可以用逗号指定多个或单独的值)
helm install <name> <chart> --values <yaml-file/url> # 安装带有指定值的chart
helm install <name> <chart> --dry-run --debug # 运行一个测试安装来验证chart(p)
helm install <name> <chart> --verify # 在使用软件包之前,请先对其进行验证
helm install <name> <chart> --dependency-update # 如果在安装chart之前缺少依赖项,则更新它们
helm uninstall <name> # 卸载一个版本

应用升级和回滚

helm upgrade <release> <chart> # 升级版本
helm upgrade <release> <chart> --atomic # 如果设置,升级进程回滚升级失败时所做的更改。
helm upgrade <release> <chart> --dependency-update # 如果在安装chart之前缺少依赖项,则更新它们
helm upgrade <release> <chart> --version <version_number> # 指定要使用的chart版本的版本约束
helm upgrade <release> <chart> --values # 在YAML文件或URL中指定值(可以指定多个)
helm upgrade <release> <chart> --set key1=val1,key2=val2 # 在命令行上设置值(可以指定多个或单独的值)
helm upgrade <release> <chart> --force # 通过替换策略强制资源更新
helm rollback <release> <revision> # 回滚一个版本到一个特定的修订
helm rollback <release> <revision> --cleanup-on-fail # 当回滚失败时,允许删除在此回滚中创建的新资源

列出,添加,移除和升级仓库

helm repo add <repo-name> <url> # 从互联网上添加一个存储库
helm repo list # 添加的chart存储库列表
helm repo update # 从chart存储库本地更新可用chart的信息
helm repo remove <repo_name> # 删除一个或多个chart存储库
helm repo index <DIR> # 读取当前目录并根据找到的chart生成索引文件。
helm repo index <DIR> --merge # 将生成的索引与现有索引文件合并
helm search repo <keyword> # 在chart中搜索存储库中的关键字
helm search hub <keyword> # 在Artifact Hub或您自己的Hub实例中搜索chart

Helm发布检测

helm list # 列出指定名称空间的所有版本,如果未指定名称空间,则使用当前名称空间上下文
helm list --all # 显示未应用任何过滤器的所有版本,可以使用-a
helm list --all-namespaces # 列出跨所有名称空间的发布,我们可以使用-A
helm list -l key1=value1,key2=value2 # 要进行筛选的选择器(标签查询),支持'='、'=='和'!='
helm list --date # 按发布日期排序
helm list --deployed # 显示已部署的版本。如果未指定其他选项,则将自动启用该选项
helm list --pending # 显示待发布版本
helm list --failed # 显示失败的发布
helm list --uninstalled # 显示已卸载的版本(如果使用了'helm uninstall --keep-history')
helm list --superseded # 显示已取代的版本
helm list -o yaml # 以指定的格式打印输出。允许值:table, json, yaml(默认表)
helm status <release> # 该命令显示指定版本的状态。
helm status <release> --revision <number> # 如果设置,则显示带有修订的命名版本的状态
helm history <release> # 给定版本的历史修订版本。
helm env # Env打印出Helm使用的所有环境信息。

下载发布信息

helm get all <release> # 关于给定版本的注释、钩子、提供的值和生成的清单文件的人类可读的信息集合。
helm get hooks <release> # 这个命令下载给定版本的钩子。钩子是用YAML格式化的,用YAML ‘——\n’分隔符分隔。
helm get manifest <release> # 清单是一个用yaml编码表示的Kubernetes资源,这些资源是从这个版本的chart中生成的。如果一个chart依赖于其他chart,那么这些资源也将包含在清单中。
helm get notes <release> # 显示指定版本的chart提供的注释。
helm get values <release> # 下载给定版本的值文件。使用-o来格式化输出

插件管理

helm plugin install <path/url1> # 安装插件
helm plugin list # 查看所有已安装插件的列表
helm plugin update <plugin> # 升级插件
helm plugin uninstall <plugin> # 卸载插件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1022

相关推荐