云原生应用管理:原理与实践
上QQ阅读APP看书,第一时间看更新

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来进行修改。