美文网首页
helm使用

helm使用

作者: 戈羽殇雪 | 来源:发表于2021-03-24 10:25 被阅读0次

helm是k8s的包管理工具,类似于centos的yum,k8s将管理的资源都抽象成api,并且推荐使用声明方式创建,修改,删除这些对象,每个 API 对象都通过一个 yaml 格式或者 json 格式的文本来声明。这带来的一个问题就是这些 API 对象声明文本的管理成本,每当我需要创建一个应用,都需要去编写一堆这样的声明文件
helm就是管理这些api对象的工具,它把创建一个应用所需的所有 Kubernetes API 对象声明文件组合并打包在一起。并提供了仓库的机制便于分发共享,还支持模版变量替换,同时还有版本的概念,使之能够对一个应用进行版本的管理。

image.png

Helm chart 是用来封装 Kubernetes 原生应用程序的 YAML 文件,可以在你部署应用的时候自定义应用程序的一些 metadata,便与应用程序的分发。

Helm 和 chart 的主要作用是:
1.应用程序封装
2.版本管理
3.依赖检查
4.便于应用程序分发

Helm 可以安装本地或者远程的 chart,当 chart 安装到 Kubernetes 中后就会创建一个 release,每次更新该 chart 的配置并执行 helm upgrade, release 的版本数就会加 1。同一个 chart 可以部署多次

helm 安装:

wget https://get.helm.sh/helm-v3.5.3-linux-amd64.tar.gz
tar zxvf helm-v3.5.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/sbin/helm

Chart 说明

下面我们将一步步创建一个 chart 来说明其组织结构。
首先使用 helm create mychart 创建一个名为 mychart 的示例,我们再使用 tree mychart 命令看一下 chart 的目录结构。

mychart
├── Chart.yaml
├── charts # 该目录保存其他依赖的 chart(子 chart)
├── templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
│   ├── NOTES.txt # 用户运行 helm install 时候的提示信息
│   ├── _helpers.tpl # 用于创建模板时的帮助类
│   ├── deployment.yaml # Kubernetes deployment 配置
│   ├── ingress.yaml # Kubernetes ingress 配置
│   ├── service.yaml # Kubernetes service 配置
│   ├── serviceaccount.yaml # Kubernetes serviceaccount 配置
│   └── tests
│       └── test-connection.yaml
└── values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖

以上仅为 helm 为我们自动创建的目录结构,我们还可以在 templates 目录加其他 Kubernetes 对象的配置,比如 ConfigMap、DaemonSet 等。

我们查看下使用 helm create 命令自动生成的 templates/service.yaml 文件。

apiVersion: v1
kind: Service
metadata:
  name: {{ include "mychart.fullname" . }}
  labels:
    {{- include "mychart.labels" . | nindent 4 }}
spec:
  type: {{ .Values.service.type }}
  ports:
    - port: {{ .Values.service.port }}
      targetPort: http
      protocol: TCP
      name: http
  selector:
    {{- include "mychart.selectorLabels" . | nindent 4 }}

可以看到其中有很多{{ }} 包围的字段,这是使用的 Go template 创建的自定义字段,其中 mychart 开头的都是在 _helpers.tpl 中生成的定义。

例如 _helpers.tpl 中对 chart.fullname 的定义:

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "mychart.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}

我们再看下 values.yaml 文件中有这样的一段配置:

service:
  type: ClusterIP
  port: 80

在使用 helm install 或 helm update 时,会渲染 templates/service.yaml 文件中的 {{ .Values.service.type }} 和 {{ .Values.service.port }} 的值。
使用 Helm
Helm 常用命令如下:

helm create:在本地创建新的 chart;
helm dependency:管理 chart 依赖;
helm intall:安装 chart;
helm lint:检查 chart 配置是否有误;
helm list:列出所有 release;
helm package:打包本地 chart;
helm repo:列出、增加、更新、删除 chart 仓库;
helm rollback:回滚 release 到历史版本;
helm pull:拉取远程 chart 到本地;
helm search:使用关键词搜索 chart;
helm uninstall:卸载 release;
helm upgrade:升级 release;

安装 chart

安装 chart 的命令格式为:

helm install [NAME] [CHART] [flags]
示例:

# 安装本地 chart
helm install -f myvalues.yaml myredis ./redis
# 指定变量
helm install --set name=prod myredis ./redis
# 指定变量的值为 string 类型
helm install --set-string long_int=1234567890 myredis ./redis
# 指定引用的文件地址
helm install --set-file my_script=dothings.sh myredis ./redis
# 同时指定多个变量
helm install --set foo=bar --set foo=newbar  myredis ./redis

其中:

myvalues.yaml:自定义变量配置文件;
myredis:release 名称;
./redis:本地的 chart 目录;
Helm chart 安装后会转化成 Kubernetes 中的资源对象,生成一个 chart release,可以使用 helm list 命令查看。

关于 helm intsall 详细用法见:https://helm.sh/docs/helm/helm_install/

升级和回滚 chart

要想升级 chart 可以修改本地的 chart 配置并执行:

helm upgrade [RELEASE] [CHART] [flags]

使用 helm ls 的命令查看当前运行的 chart 的 release 版本,并使用下面的命令回滚到历史版本:

helm rollback <RELEASE> [REVISION] [flags]

卸载 chart

要想卸载 chart 可以使用下面的命令。

helm uninstall RELEASE_NAME [...] [flags]

相关文章

网友评论

      本文标题:helm使用

      本文链接:https://www.haomeiwen.com/subject/rxechltx.html