标签:export 合并 令行 nginx out 并且 结构 sources options
什么是Helm
简单来说就是Kubernetes的包管理工具,类似于Centos的yum或Ubuntu的apt。不过他管理的是Kubernetes的yaml文件
组件(2.0与3.0)
在2.0的时候区分为客户端与服务端
客户端:
服务端:
负责与helm客户端交互,并且与Kubernetes的api server通信
架构图2.0:
在3.0的时候就没有服务端,客户端功能与上面一样。但是服务端变为了helm库,它有接口直接与Kubernetes通信,而服务端的功能也转移到了它的身上。
架构图3.0:
使用Helm,需要一个Kubernetes集群。对于Helm的最新版本,我们建议使用Kubernetes的最新稳定版, 在大多数情况下,它是倒数第二个次版本。
Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的release 和 release name。
在了解了上述这些概念以后,就可以这样来解释 Helm:
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
常用命令
helm [options] [release name]
helm search 检索chart包
helm fetch/pull 拉去chart包 --untar 下载直接解压缩 --untardir 下载指定目录解压缩
helm delete 删除版本
helm upgrade 更新release
helm uninstall 卸载chart包
helm install 安装chart包
helm rollback 回滚release --recreate-pods配合这个参数能达成删除更新的效果
helm create 创建chart
helm repo add/list/remove/update helm仓库添加/列出/移除/更新
helm history 查看release安装历史版本
helm list/ls 查看安装的release
helm status 查看安装release状态
helm show/inspect all/chart/readme/values 查看参数信息(可重定向到文件中)
helm get all/manifest/notes/values 查看安装的release相关信息
helm package 打包chart
helm lint 检索打包chart的错误
helm dependency 管理chart依赖
helm completion 命令补全类似于kubernetes的那种需要先安装
安装方法:
在线安装
helm install --namespace test url
本地安装有两种
第一种:压缩包方式安装
helm install --namespace test nginx-0.1.0.tar.gz
第二种:本地目录安装
helm install --namespace test /root/mysql
修改默认参数安装
helm install mysql /root/mysql --values values.yaml
指定参数文件安装
helm install mysql /root/mysql -f values.yaml
Helm文件结构
[root@master ~]# tree sql sql ├── charts ├── Chart.yaml ├── templates │ ├── _helpers.tpl │ ├── mysql-conf.yaml │ ├── mysql-password-ok.yaml │ ├── mysql-svc.yaml │ └── NOTES.txt └── Values.yaml 2 directories, 7 files
chart是helm的打包格式。或者说是Kubernetes的一组相关资源文件的集合。单个chart能部署简单的应用也可以部署复杂的应用。
chart.yaml 关于这个chart包的描述信息
README.md 预留的注意事项信息
values.yaml 变量值
charts 子chart或者说是依赖
crds 自定义资源
template 模板
NOTES.txt 运行提示的信息
chart.yaml
apiVersion: The chart API version (required)
#有两种一种是v1另一种是v2,两者区别是在于依赖关系。v1版本是把依赖关系定义在requirements.yaml中,而v2版本是在chart.yaml中加入depencies字段,在该字段下定义。还有一种是把依赖放在charts目录下
name: The name of the chart (required)
#chart名字
version: A SemVer 2 version (required)
#这个是chart的版本,打包命名就是用的chart名字+chart版本
kubeVersion: A SemVer range of compatible Kubernetes versions (optional)
#指明受支持的kubernetes版本
description: A single-sentence description of this project (optional)
#描述信息
type: The type of the chart (optional)
#类型有两种,一种是应用图表,另一种是库图表。application or library,使用v2的时候二选一
keywords:
#此项目的关键字 - A list of keywords about this project (optional)
home: The URL of this projects home page (optional)
#项目主页url
sources:
#项目源代码url - A list of URLs to source code for this project (optional)
dependencies: # A list of the chart requirements (optional)
#依赖 - name: The name of the chart (nginx) version: The version of the chart ("1.2.3") repository: (optional) The repository URL ("https://example.com/charts") or alias ("@repo-name") condition: (optional) A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
#条件字段优先级高于tags如果,同时存在以condition为准如果不存在以tag为准,为真启用,为假不用
tags: # (optional) - Tags can be used to group charts for enabling/disabling together import-values: # (optional) - ImportValues holds the mapping of source values to parent key to be imported. Each item can be a string or pair of child/parent sublist items. alias: (optional) Alias to be used for the chart. Useful when you have to add the same chart multiple times
maintainers: # (optional)
#维护人员信息 - name: The maintainers name (required for each maintainer) email: The maintainers email (optional for each maintainer) url: A URL for the maintainer (optional for each maintainer)
icon: A URL to an SVG or PNG image to be used as an icon (optional).
appVersion: The version of the app that this contains (optional). Needn‘t be SemVer. Quotes recommended.
#应用版本
deprecated: Whether this chart is deprecated (optional, boolean)
#弃用chart
annotations: example: A list of annotations keyed by name (optional).
依赖项中的tags与condition(控制是否启用依赖chart)
# parentchart/Chart.yaml dependencies: - name: subchart1 repository: http://localhost:10191 version: 0.1.0 condition: subchart1.enabled, global.subchart1.enabled tags: - front-end - subchart1
- name: subchart2 repository: http://localhost:10191 version: 0.1.0 condition: subchart2.enabled,global.subchart2.enabled tags: - back-end - subchart2
# parentchart/values.yaml subchart1: enabled: true tags: front-end: false back-end: true
在上面的示例中,所有带有标签的图表front-end
都将被禁用,但是由于subchart1.enabled
路径在父级值中的值为“ true”,因此该条件将覆盖front-end
标签并被subchart1
启用。
由于subchart2
已标记为,back-end
且该标记的评估结果为true
,因此 subchart2
将被启用。另请注意,尽管subchart2
已指定条件,但父级值中(还要看values的定义)没有相应的路径和值,因此该条件无效。
该--set
参数可以照常使用,以更改标签和条件值。
helm install --set tags.front-end=true --set subchart2.enabled=false
tags:
值中的键必须是顶级键。tags:
当前不支持全局和嵌套表。(就是父chart中定义)
在某些情况下,希望允许子chart的值传播到父chart并作为通用默认值共享。
可以使用YAML列表在父chart的dependencies
字段中指定包含要导入的值的键import-values
。列表中的每个项目都是从子chart的exports
字段中导入的键。
要导入exports
键中未包含的值,请使用子代父(第二种)格式。
方法有两种:
第一种:exports
这是在data在包含值的情况下
父chart
# parent‘s Chart.yaml file dependencies: - name: subchart repository: http://localhost:10191 version: 0.1.0 import-values: - data 子chart # child‘s values.yaml file exports: data: myint: 99 结果 # parent‘s values myint: 99
第二种:
data不包含值的情况下
# parent‘s Chart.yaml file dependencies: - name: subchart1 repository: http://localhost:10191 version: 0.1.0 ... import-values: - child: default.data parent: myimports default.data在子chart中找到的值会被导入到父chart的myimports中,有值的会被覆盖
# parent‘s values.yaml file myimports: myint: 0 mybool: false mystring: "helm rocks!" # subchart1‘s values.yaml file default: data: myint: 999 mybool: true 结果 # parent‘s final values myimports: myint: 999 mybool: true mystring: "helm rocks!"
依赖安装时的影响
如果需要对依赖性进行更多控制,则可以通过将依赖性图表复制到charts/
目录中来明确表示这些依赖性。
依赖项可以是chart压缩包(foo-1.2.3.tgz
)或未打包的目录。但是其名称不能以_
或开头。此类文件将被加载器忽略。
wordpress: Chart.yaml # ... charts/ apache/ Chart.yaml # ... mysql/ Chart.yaml # ...
helm install 与 helm upgrade影响如何
假设一个名为“ A”的chart创建了以下Kubernetes对象
此外,A依赖于创建对象的chart B
在安装/升级chart A之后,创建/修改单个Helm版本。将按照以下顺序创建/更新上述所有Kubernetes对象:
这是因为当Helm安装/升级chart时,chart中的Kubernetes对象及其所有依赖项都是
模板和参数
只有一点需要注意,就是在命令行与模板同时存在的时候命令行的参数会覆盖模板参数进行配置
而且在命令行指定参数值文件的时候,值文件名可以任意
依赖范围
父chart可以访问子chart中的值,但是子chart不能访问父chart的值,也不可以访问其他chart的值。
title: "My WordPress Site" # Sent to the WordPress template mysql: max_connections: 100 # Sent to MySQL password: "secret" apache: port: 8080 # Passed to Apache
对于父chart,它可以访问MySQL密码字段.Values.mysql.password
。但是对于MySQL chart来说,它将密码字段简单地显示为.Values.password
全局值
title: "My WordPress Site" # Sent to the WordPress template global: app: MyWordPress mysql: max_connections: 100 # Sent to MySQL password: "secret" apache: port: 8080 # Passed to Apache
title: "My WordPress Site" # Sent to the WordPress template global: app: MyWordPress mysql: global: app: MyWordPress max_connections: 100 # Sent to MySQL password: "secret" apache: global: app: MyWordPress port: 8080 # Passed to Apache
所以全局的值可以在任意chart中使用,所有chart共享一个变量值(父chart中定义)。如果是子chart只会向下传递,子chart定义的值不会向上传递影响父chart的值。
父chart的全局变量优先于子chart
helm有一个合并的问题,不存在会合并有的时候就会导致问题出现,例如存活检测如果配置文件用的exec,而命令行用的http那么因为exec与http不同,就会出现存活检测有两种方式出现,但是在一个存活检测下。那么在Kubernetes中读取时就会出席那错误。
在命令行指定的时候,--set livenessprobe.httpget=null就可以解决掉,实际就是把httpget置空,只使用exec。
标签:export 合并 令行 nginx out 并且 结构 sources options
原文地址:https://www.cnblogs.com/determined-K/p/14725456.html