Helm原理及入门使用
Helm是k8s服务编排实施的标准,提供多种功能来支持k8s的服务编排是k8s的包管理器,主要用于管理chart包(chart包中包含一系列yaml格式的K8S资源定义文件以及资源的配置),一个命令行工具,主要用于 k8s 应用 Chart 的创建、打包、发布和管理。#查看相关chart中的可配置选项可编辑chart包内的value.yaml文件对配置进行修改安装chart包时指定配置文件安装过程
一、helm基础知识
1、helm定义
-
Helm是k8s服务编排实施的标准,提供多种功能来支持k8s的服务编排
-
是k8s的包管理器,主要用于管理chart包(chart包中包含一系列yaml格式的K8S资源定义文件以及资源的配置),一个命令行工具,主要用于 k8s 应用 Chart 的创建、打包、发布和管理。
2、heml三大基本概念
-
chart:代表一个helm包。包含了在k8s集群中运行应用程序、工具或服务所需的所有yaml格式的资源定义文件
-
Repository(仓库):存放和共享helm chart的地方。
-
Release(版本):基于 Chart 的部署实体,一个 Chart 被 Helm 运行后将会生成一个对应的新的 release,然后将在 k8s 中创建出真正运行的资源对象,它是一个应用级别的版本管理。
3、helm原理
helm中主要包含两类文件:模板文件和配置文件。
-
模板文件通常有多个,配置文件通常有一个(对应使用同一套模板,启动不同配置的资源对象的场景使用)
-
helm的模板文件基于text/template模板文件,可将配置文件中的值渲染进模板文件中,最终生成一个可部署的k8s的yaml格式的资源定义文件
4、helm的应用场景及作用
-
应用场景微服务、实际项目中多服务多对象资源组合创建部署的场景
-
作用:
-
高效复用:通过将创建服务或资源对象的yaml文件分离为模板和配置,其中模板为yaml中静态的不怎么修改变动的部分,配置为yaml中创建不同配置服务或对象时,需要修改变动的部分。使用时可以对模板进行复用,只需要对配置进行修改即可。
-
应用级别的版本管理:版本更新、版本回滚
-
helm基本操作
1、安装helm
wget https://get.helm.sh/helm-v3.12.3-linux-amd64.tar.gz
tar -xvzf helm-v3.12.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
helm version #查看helm版本
-
安装helm命令自动补全脚本
helm completion bash > $HOME/.helm-completion.bash
echo ‘source $HOME/.helm-completion.bash’ >> ~/.bashrc
bashe
2、helm说明
helm create my-chart
cd my-chart
tree
|-- charts # 该目录保存其他依赖的 chart(子 chart)
|-- Chart.yaml
|-- templates # chart 配置模板,用于渲染最终的 Kubernetes YAML 文件
| |-- deployment.yaml # Kubernetes deployment 配置
| |-- _helpers.tpl # 用于创建模板时的帮助类
| |-- hpa.yaml # Kubernetes hpa 配置
| |-- ingress.yaml # Kubernetes ingress 配置
| |-- NOTES.txt # 用户运行 helm install 时候的提示信息
| |-- serviceaccount.yaml # Kubernetes serviceaccount 配置
| |-- service.yaml # Kubernetes service 配置
| `-- tests
| `-- test-connection.yaml
`-- values.yaml # 定义 chart 模板中的自定义配置的默认值,可以在执行 helm install 或 helm update 的时候覆盖
以上是helm自动创建的目录结构,可在templates目录中加入其他k8s对象的配置比如ConfigMap、Daemonset等
-
查看mychart/templates/service.yaml文件
apiVersion: v1
kind: Service
metadata:
name: {{ include “my-chart.fullname” . }}
labels:
{{- include “my-chart.labels” . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include “my-chart.selectorLabels” . | nindent 4 }}
其中{{ }}中的字段是GO template创建的自定义字段,其中mychart开头是在_helped.tpl中生成的定义。
-
查看_helped.tpl文件
-
查看value.yaml文件配置字段
service:
type: ClusterIP
port: 80
在使用 helm install 或 helm update时,会渲染 templates/service.yaml 文件中的 {{ .Values.service.type }} 和 {{.Values.service.port }} 的值。
3、helm部署应用
(1)初始化仓库
#语法
helm repo add 仓库名称 仓库地址
#添加微软仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#添加阿里云仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add bitnami https://charts.bitnami.com/bitnami # 添加 官方Chart Repository
#查看添加的repository列表
helm repo list
#查询需要的chart包
helm search repo <keyword>
helm search hub <keyword>
(2)安装一个chart
#从chart的repository安装,--generate-name参数白哦是helm自动为release命名
helm install chart-name --generate-name
#从本地chart Archive安装
helm install foo foo-1.0.0.tgz
#从一个未打包的chart路径安装
helm install foo path/to/foo
#从一个完整的URL路径安装
helm install foo https://example.com/charts/foo-1.0.0.tgz
#查看chart包的基本信息
helm show chart chart-name
#查看chart包的所有信息
helm show all chart-name
#更新chart包安装源
helm repo update
#查看release状态
helm status release-name
(3)自定义chart配置
#查看相关chart中的可配置选项
helm show values chart-name
-
可编辑chart包内的value.yaml文件对配置进行修改
replicaCount: 2
revisionHistoryLimit: 20
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0 -
安装chart包时指定配置文件
helm install nginx-01 -f nginx-values.yaml
-
安装过程有两种传递配置数据的方式–f,–values:使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。–set:通过命令行的方式对指定配置项进行覆盖 。同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在–set中覆盖的内容会被保存在 ConfigMap 中
-
查看指定release中–set设置的值
helm get values release-name
-
–set 的格式和限制
-
–set name=value等价yaml格式name: vaule
-
多个值逗号隔开 --set a=b,c=d等价yaml格式a: bc: d
-
–set outer.inner=value等价yaml格式outer:inner: value
-
列表使用{}表示,–set name={a,b,c}等价yaml格式name: - a - b - c
-
-
查看当前集群安装的release
helm ls
-
升级release
#升级 nginx-01 ,变更它的 Root 密码
helm upgrade nginx-01 bitnami/nginx --set containerPorts.http=‘80’ -
回滚版本
查看配置更新是否生效
helm get values release-revision
回滚版本(未加参数默认回滚到上一个版本)
helm rollback release-name
-
查看特定release的修订版本历史
[root@master-01 18-helm]# helm history test
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Sat Apr 13 14:18:42 2024 superseded nginx-15.4.3 1.25.3 Install complete
2 Sat Apr 13 14:24:33 2024 superseded nginx-15.4.3 1.25.3 Upgrade complete
3 Sat Apr 13 14:33:08 2024 deployed nginx-15.4.3 1.25.3 Rollback to 1 -
卸载release
helm uninstall release-name
helm delete release-name
会删除和该版本关联的所有资源(service、deployment、pod、configmap等),包括该release所有版本历史
(4)helm常用命令
-
helm create 在本地创建新的的chart
-
helm install 安装chart
-
helm list 列出所有release
-
helm repo 列出(list)、增加(add)、更新(update)、删除(remove)chart仓库
-
helm rollback 回滚release到历史版本
-
helm pull 拉取远程chart到本地
-
helm search 使用关键词搜索chart
-
helm uninstall 卸载release
-
helm upgrade 升级release
三、chart仓库
1、使用本地存储
Make sure you have read-write access to ./chartstorage (will create if doesn’t exist on first upload)
./chartmuseum --debug --port=8080 \
--storage="local" \
--storage-local-rootdir="./chartstorage"
helm repo add my-repo http://127.0.0.1:8080
helm plugin install https://github.com/chartmuseum/helm-push
helm cm-push nginx-15.4.3.tgz my-repo
2、上传chart包到仓库
# 下载 插件
wget https://github.com/chartmuseum/helm-push/releases/download/v0.10.4/helm-push_0.10.4_linux_amd64.tar.gz
mkdir /root/.local/share/helm/plugins/helm-push -p
tar xvf helm-push_0.10.4_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/helm-push
# 上传 chart 包
helm cm-push nginx-15.4.3.tgz my-repo
# 更新仓库
helm repo update my-repo
[root@node-01 18-helm]# helm search repo my-repo
NAME CHART VERSION APP VERSION DESCRIPTION
my-repo/nginx 15.4.3 1.25.3 NGINX Open Source is a web server that can be a...
更多推荐
所有评论(0)