2.3 helm install
前面我们简单介绍了Helm最基础的命令与使用,本节我们详细介绍helm install命令以及对应的安装Chart功能。
上文提到helm install apphub/mysql的安装命令时,我们没有指定任何参数,也就是说这个Chart的安装使用的是默认的参数,那如果我们需要修改一些安装的参数,该如何操作呢?下面详细介绍该命令的使用方式。
[root@iZ8vb0qditk1qw27yu4k5nZ ~]# helm inspect values apphub/mysql ## Global Docker image parameters ## Please, note that this will override the image parameters, including dependencies, configured to use the global value ## Current available global Docker image parameters: imageRegistry and imagePullSecrets ## # global: # imageRegistry: myRegistryName # imagePullSecrets: # - myRegistryKeySecretName ## Bitnami mysql image ## ref: https:// hub.docker.com/r/bitnami/mysql/tags/ ## image: registry: docker.io repository: bitnami/mysql tag: 8.0.16-debian-9-r33 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://Kubernetes.io/docs/user-guide/images/#pre-pulling-images ## pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. ## Secrets must be manually created in the namespace. ## ref: https:// Kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## # pullSecrets: # - myRegistryKeySecretName service: ## Kubernetes service type type: ClusterIP port: 3306 ......
使用helm inspect values命令可以将对应Chart的values.yaml参数打印出来,这样就能看到所有能够设置的参数,也能覆盖这些参数,下面我们以mysql为例看一下如何覆盖默认的参数。
$ cat config.yaml mariadbUser: user0 mariadbDatabase: user0db EOF $ helm install -f config.yaml apphub/mysql
如上命令创建了一个mysql,数据库用户为user0,数据库名称为user0db。在安装Chart时有两种方式设置指定的参数。
·-f:指定一个本地的yaml文件,设置需要覆盖的参数,这样会把默认值全部替换成用户设置的参数。
·--set:通过key-value的命令行方式设置需要覆盖的参数。
如果这两种方式都使用,--set参数具有更高的优先级。设置完参数后,我们可以通过helm get value<release-name>来查看参数设置是否正确。如果想恢复默认值,可以通过helm upgrade<release>--reset-values实现。
--set命令后面可以接一个或多个key-value参数,最简单的例子就是--set name=value。当需要设置多个参数的时候,就可以通过--set a=b,c=d命令,这等同于:
a: b c: d
对于更加复杂一些的表达式,比如有层级的参数,可以通过--set outer.inner=value命令进行覆盖,这等同于:
outer: inner: value 覆盖列表的参数可以使用--set name={a,b,c}命令,等同于: name: - a - b - c
针对一些特殊字符、字符串,可使用--set name="value1\,value2"命令覆盖,等同于:
name: "value1,value2"
这个功能常用于设置nodeSelector标签,--set nodeSelector."Kubernetes\.io/role"=master等同于:
nodeSelector: Kubernetes.io/role: master
更加复杂的参数还需要设置userValue.yaml来进行修改。