Helm应用详解--K8S
构建一个 Chart1. Chart 文件结构chart 是一个组织在文件目录中的集合。目录名称就是chart名称。因而描述WordPress的chart可以存储在wordpress/目录中。在这个目录中,Helm 期望可以匹配以下结构:wordpress/Chart.yaml# 包含了chart信息的YAML文件LICENSE# 可选: 包含chart许可证的纯文本文件README.md# 可选
构建一个 Chart
1. Chart 文件结构
chart 是一个组织在文件目录中的集合。目录名称就是chart名称。因而描述WordPress的chart可以存储在wordpress/目录中。
在这个目录中,Helm 期望可以匹配以下结构:
wordpress/
Chart.yaml # 包含了chart信息的YAML文件
LICENSE # 可选: 包含chart许可证的纯文本文件
README.md # 可选: 可读的README文件
values.yaml # chart 默认的配置值
values.schema.json # 可选: 一个使用JSON结构的values.yaml文件
charts/ # 包含chart依赖的其他chart
crds/ # 自定义资源的定义
templates/ # 模板目录, 当和values 结合时,可生成有效的Kubernetes manifest文件
templates/NOTES.txt # 可选: 包含简要使用说明的纯文本文件
Helm保留使用 charts/,crds/, templates/目录,以及列举出的文件名。其他文件保持原样
2. Chart.yaml 文件
Chart.yaml文件是chart必需的。包含了以下字段:
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: 按名称输入的批注列表 (可选).
Helm 部署及常用命令
1. 部署 Helm 客户端
Helm 客户端下载地址:https://github.com/helm/helm/releases
安装方法:
wget https://get.helm.sh/helm-v3.5.1-linux-amd64.tar.gz
tar -zxvf helm-v3.5.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/sbin/
2. Helm 常用命令
命令 描述
create 创建一个 chart 并指定名字
dependency 管理 chart 依赖
get 下载一个 release,可用子命令:all,hooks,manifest,notes,values
history 获取 release 历史
install 安装一个 chart
list 列出 release
package 将 chart 目录打包到 chart 存档文件中
pull 从远程仓库中下载 chart 并解压到本地:helm pull stable/mysql --untar
repo 添加,列出,移除,更新和索引 chart 仓库。可用子命令:add,index,list,remove,update
rollback 从之前版本回滚
search 根据关键字搜索 chart。可用子命令:all,chart,readme,values
status 显示已命名版本的状态
template 本地呈现模板
uninstall 卸载一个 release
upgrade 更新一个 release
version 查看 helm 客户端版本
3. 配置国内 Chart 仓库
微软 chart 仓库:https://mirror.azure.cn/kubernetes/charts/
阿里 cahrt 仓库:https://apphub.aliyuncs.com/
官方 chart 仓库:https://hub.kubeapps.com/charts/incubator
添加 chart 库:
helm repo add stable https://mirror.azure.cn/kubernetes/charts/
helm repo add aliyun https://apphub.aliyuncs.com/
helm repo update
查看配置的 chart 库:
helm repo list
helm search repo stable
删除 cahrt 库:
helm repo remove aliyun
4. Helm 基本使用
4.1. 使用 chart 部署一个应用
查找 chart:
helm search repo
helm search repo mysql
查看 cahrt 信息:
helm show chart stable/mysql
安装包:
helm install mysql stable/mysql
查看发布状态:
helm status mysql
4.2. 安装前自定义 chart 配置选项
上面部署的 mysql 并没有成功,这是因为并不是所有的 chart 都能安装默认配置并运行成功,可能会需要一些环境依赖,例如:PV
所以我们需要自定义 chart 配置选项,安装过程中有两种方法可以传递配置数据:
--values (或 -f):指定带有覆盖的 YAML 文件。这可以多次指定,最右边的文件优先
--set:在命令行上指定代替。如果两者都用,--set 优先级最高
--values 使用,先将修改的变量写到一个文件中:
# helm show values stable/mysql
# cat config.yaml
persistence:
enabled: true
stroageClass: "managed-nfs-storage"
accessMode: ReadWriteOnce
size: 8Gi
mysqlUser: "k8s"
mysqlPassword: "123456"
mysqlDatabase: "k8s"
# helm install mysql -f config.yaml stable/mysql
# kubectl get pods
说明:以上将创建具有名称的默认 MySQL 用户 k8s,并授予此用户访问新创建的 k8s 数据库的权限,但将接受该图表其余默认值。
--set使用,命令行替代变量:
helm install mysql --set persistence.storageClass="managed-nfs-storage" stable/mysql
values.yaml 与 set 使用:
vaues.yaml set
name: value --set name=value
a: b
c: d --set a=b,c=d
outer:
inner: value --set outer.inner=value
name:
- a
- b
- c
--set name={a,b,c}
servers:
- port: 80 --set servers[0].port=80
servers:
- port: 80
host: example
--set servers[0].port=80,servers[0].host=example
nodeSelector:
kubernetes.io/role: master --set nodeSelector."kubernetes\.io\/role"=master
说明:helm install 命令可以从多个来源安装
chart 的仓库
本地 chart 压缩包helm install foo foo-0.1.1.tgz
解压后的 chart 目录helm install foo path/to/foo
完整的 URLhelm install foo https://example.com/charts/foo-1.2.3.tgz
应用升级,回滚和删除
1. Helm 升级
该命令将发布升级到新版的chart。
升级参数必须是发布和chart。chart参数可以是:chart引用(‘example/mariadb’),chart目录路径,打包的chart或者完整URL。 对于chart引用,除非使用’–version’参数指定,否则会使用最新版本。
helm upgrade [RELEASE] [CHART] [flags]
可以多次指定--values/-f参数,最后(最右边)指定的文件优先级最高。比如如果myvalues.yaml和override.yaml同时包含了名为 Test的key,override.yaml中的设置会优先使用:
helm upgrade -f myvalues.yaml -f override.yaml redis ./redis
可以多次指定 --set 参数,最后(最右边)指定的优先级最高。比如bar 和 newbar 都设置了一个名为foo的可以, newbar的值会优先使用:
helm upgrade --set foo=bar --set foo=newbar redis ./redis
2. Helm 回滚
该命令回滚发布到上一个版本
回滚命令的第一个参数是发布的名称,第二是修订(版本)号,如果省略此参数,会回滚到上一个版本。
要查看修订号,执行helm history RELEASE
helm rollback <RELEASE> [REVISION] [flags]
3. Helm 卸载
该命令使用版本名称卸载版本
会删除与最新版本chart相关的所有资源以及发布历史,释放以供将来使用
使用--dry-run参数查看哪些版本将在不实际卸载的情况下能够被卸载
helm uninstall RELEASE_NAME [...] [flags]
更多推荐
所有评论(0)