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

2.2.7 Helm后端存储

默认情况下,Tiller使用ConfigMaps来存储每个实例的安装信息,安装实例的每个版本都在kube-system命令空间下有对应的configmap。


[root@iZ8vb0qditk1qw27yu4k5nZ ~]# helm ls
NAME          REVISION     UPDATED                    STATUS     CHART      APP VERSION   NAMESPACE
riotous-gorilla 1          Mon Aug  5 19:42:58 2019   DEPLOYED    mysql-5.0.6  8.0.16      default
[root@iZ8vb0qditk1qw27yu4k5nZ ~]# kubectl get cm  -n kube-system | grep riotous-gorilla
riotous-gorilla.v1                   1      32s
[root@iZ8vb0qditk1qw27yu4k5nZ ~]# kubectl get cm riotous-gorilla.v1 -n kube-system -o yaml
apiVersion: v1
data:
  release: H4sIAAAAAAAC/+y9TWwcSbIYjN158+1+NQa8TzYW9uLBzm3OmqSGVU1KM8Js+2kxHEkzQ48ocUlqhIFWYGVXZXfnqqqylJnVVI+o04Nh332xD88/J1988MGG4aN99cm+LYwHvKNhGDBg+7aAYeRfVdZf/7BbEjXbXOyI7M6MjIyMiIyMjIxw/irFhJOMuUNCcRTBa// +A+cffvDjH3T+7APnKEKQIdBHIIUco4SD8xGOEOAjBIIRpBxgBvoIJ0MQojQiExQ6zilOe44DwGPIg5Fsqr6LRX/GIc8YyJjoI8GQOIZJ2APPsj4KeASGiIOUhAy458B1ExgjlsJAABnALOKOc4LoGAeIyUFQMCLgEDKOaA9UZuLGE/Y88nRHj40DL4gy0dSLSACj3

上例只截取了一部分configmap信息,configmap后面的“.”对应的就是版本号,这里因为只有一个版本,所以版本号就是v1。

从Helm 2.7.0开始,Helm就提供了将实例信息存放到secret中的功能,这样就给实例信息提供了额外的安全保护。注意这个功能必须在安装Tiller的时候开启。


helm init --override 'spec.template.spec.containers[0].command'='{/Tiller,
--storage=secret}'

在编写本书时,Helm还不能提供从configmap到secret迁移的功能,用户必须从一开始就使用secret或configmap,随着这个功能的发展,在Helm后续版本应该会提供官方推荐的迁移策略。

Helm 2.14.0发布后,Helm社区开发了一个基于SQL的存储功能,用于持久化存储数量较多的实例。该功能目前只支持将所有的实例信息存储到postgres中。

在Kubernetes中,configmap和secret默认只能支持存储1MB大小的信息,所以如果Chart安装信息大于1MB,这个基于SQL的存储功能就非常有用。同样,如果开启这个功能,则必须在安装Tiller时启用。


helm init \
  --override \
    'spec.template.spec.containers[0].args'='{--storage=sql,--sql-dialect=postgres,
--sql-connection-string=postgresql:// Tiller-postgres:5432/helm?user=helm&password=changeme}'

目前Helm社区没有提供从configmap到SQL的转移策略。