Loading... # rancher charts 特性介绍 > [rancher charts 特性官方文档](https://docs.rancher.cn/docs/rancher2/helm-charts/creating-apps/_index/#questionsyml-%E8%AF%A6%E8%A7%A3) rancher charts 和 helm charts 几乎没有任何区别,rancher charts 可以当做是 helm charts 的超集。不过 rancher charts 的最佳实践中,在其 charts 包根目录多了 `app-readme.md` 和 `questions.yaml` 文件以增强用户体验。 **rancher charts 目录结构** ``` <Repository-Base>/ │ ├── charts/ │ ├── <Application Name>/ # 这个目录名称将作为chart名称出现在Rancher UI中。 │ │ ├── <App Version>/ # 这一层的每个目录都提供了不同的应用程序版本,这些版本在Rancher用户界面的 chart 中可以选择。 │ │ │ ├── Chart.yaml # 所需的Helm chart 信息文件。 │ │ │ ├── questions.yaml # 在Rancher用户界面内显示的 questions。Questions显示在配置选项中。 │ │ │ ├── README.md # 可选:Rancher UI内显示的Helm Readme文件。该文本显示在详细描述中。 │ │ │ ├── requirements.yml # 可选:YAML文件,列出chart的依赖关系。 │ │ │ ├── values.yml # chart的默认配置值。 │ │ │ ├── templates/ # 包含模板的目录,当与values.yml结合时,生成Kubernetes YAML。 ``` # app-readme.md 效果如下图(左为app-readme.md 效果,右为原生):  `app-readme.md`的作用只是使用 markdown 语法增强了项目的描述性,如果不使用 `app-readme.md` 在 rancher 应用商店中,默认会使用 `Chart.yaml` 文件中的 `name` 和 `description` 属性描述项目。 而使用了 `app-readme.md` 文件后,rancher 会自动使用 `app-readme.md` 文件替换 `Chart.yaml` 的 `description`,并以 markdown 的语法进行渲染。 # questions.yaml 带有 “questions.yml” 的 Rancher Chart(左)与没有“questions.yml”的 Helm Chart(右)  ## 原生 helm chart value 的弊端 `questions.yaml` 是替换 `helm install --set` 的一种用户体验更佳的方式。 在使用 helm 安装服务的过程中,不可避免的需要使用新的配置替换 charts 文件中的默认配置,比如数据库的连接。而使用原生 helm 的方式必须人为的指定对应的键值对,比如目前我有如下配置: ``` mongo: host: mongodb.host port: 8000 user: hello password: world ``` 在使用 helm 启动当前项目时,我要人为的填上 ``` mongo.host=xxx mongo.port=xxx mongo.user=xxx mongo.passworld=xxx ``` 如果当前有一个对该项目细节不熟悉的人需要启动该项目,原生的方案既没有字段含义的注释,也可能会发生人为填错的情况。 ## question.yaml实现原理 而 rancher 提供的 `question.yaml` 就很好的解决了这一系列问题。 rancher 应用商店会根据提供的 `question.yaml` ,将启动项目所需要填写的信息全部渲染到应用商店的界面上,用户可以直观的通过点选填的方式启动项目,而不需手动覆盖键值对。 其实现原理,就是将用户填写的值作为 `value` ,`question.yaml` 文件中的 `variable` 作为 `key` 去覆盖 `value.yaml` 中的键值对。从而代替原生手动填写覆盖`value.yaml`键值对的场景。 ## question.yaml 语法 > 详见本文开头的官方文档 - [rancher charts 特性官方文档](https://docs.rancher.cn/docs/rancher2/helm-charts/creating-apps/_index/#questionsyml-%E8%AF%A6%E8%A7%A3) | 变量 | 类型 | 必填 | 描述 | | --------------- | --------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------- | | variable | string | 是 | 定义`values.yml`文件中指定的变量名。如果是嵌套对象,可以使用`foo.bar`这种形式。 | | label | string | 是 | 指定变量的标题显示内容。 | | description | string | 否 | 指定变量的描述显示内容。 | | type | string | 否 | 变量类型,如果未指定,则默认为`string`(当前支持的类型为 string,multiline,boolean,int,enum,password,storageclass,hostname,pvc 和 secret。 | | required | bool | 否 | 定义变量是否为必填(true\| false) | | default | string | 否 | 指定默认值。 | | group | string | 否 | 根据输入值对变量进行分组。 | | min_length | int | 否 | 最小字符长度。 | | max_length | int | 否 | 最大字符长度。 | | min | int | 否 | 最小整数值。 | | max | int | 否 | 最大整数值。 | | options | []string | 否 | 当变量类型为`enum`时指定选项,例如:options: - "ClusterIP" - "NodePort" - "LoadBalancer" | | valid_chars | string | 否 | 用于对输入字符进行验证的正则表达式。 | | invalid_chars | string | 否 | 用于对无效输入字符验证的正则表达式。 | | subquestions | []subquestion | 否 | 添加一个子问题数组。 | | show_if | string | 否 | 如果条件变 | 最后修改:2021 年 09 月 15 日 05 : 51 PM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信