【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。Helm通过软件打包的形式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用部署和管理的复杂性。
Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。Helm使发布可配置,支持发布应用配置的版本管理,简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操作。
本文展示了Helm的Client、Server与本地Chart仓库的安装过程。
关于Helm简介请参考:简化Kubernetes应用部署工具-Helm简介
Helm Client安装过程如下:
mv linux-amd64/helm /usr/local/bin/helm
Helm Tiller是Helm的server,Tiller有多种安装方式,比如本地安装或以pod形式部署到Kubernetes集群中。本文以pod安装为例,安装Tiller的最简单方式是helm init, 该命令会检查helm本地环境设置是否正确,helm init会连接kubectl默认连接的kubernetes集群(可以通过kubectl config view查看),一旦连接集群成功,tiller会被安装到kube-system namespace中。
执行helm init,该命令会在当前目录下创建helm文件夹即~/.helm,并且通过Kubernetes Deployment 部署tiller. 检查Tiller是否成功安装:
$ kubectl get po -n kube-system NAME READY STATUS RESTARTS AGE tiller-deploy-1046433508-rj51m 1/1 Running 0 3m
由于 Tiller的数据存储于Kubernetes ConfigMap中,所以删除、升降级Tiller,原Helm部署的应用数据并不会丢失。
删除Tiller:
helm reset
chart仓库用来存储和分享打包的chart,官方chart仓库由Kubernetes Charts维护, Helm允许我们创建私有chart仓库。
chart仓库是一个可用来存储index.yml与打包的chart文件的HTTP server,当要分享chart时,需要上传chart文件到chart仓库。任何一个能能够提供YAML与tar文件的HTTP server都可以当做chart仓库,比如Google Cloud Storage (GCS) bucket、Amazon S3 bucket、Github Pages或创建你自己的web服务器。
一个chart仓库由一个chart包与index.yaml文件组成,index.yaml记录了chart仓库中全部chart的索引,一个本地chart仓库的布局例子如下:
/home/ts1/.helm/ |-- cache | `-- archive | |-- drupal-0.9.2.tgz | `-- mariadb-1.0.3.tgz |-- plugins |-- repository | |-- cache | | |-- fantastic-charts-index.yaml | | |-- local-index.yaml -> /home/ts1/.helm/repository/local/index.yaml | | |-- mariadb-1.0.3.tgz-index.yaml | | |-- memcached-1.2.1.tgz-index.yaml | | |-- mychart_xia-0.1.0.tgz-index.yaml | | |-- mysql-0.2.8.tgz-index.yaml | | |-- stable-index.yaml | | |-- test-0.1.0.tgz-index.yaml | | `-- test-0.1.8.tgz-index.yaml | |-- local | | |-- index.yaml | | |-- mychart-0.1.0.tgz | | |-- mychart_xia-0.1.0.tgz | | |-- mysql-0.2.8.tgz | | |-- mysql-6.19.centos-29.tgz | | |-- test-0.1.0.tgz | | |-- test-0.1.8.tgz | | `-- test-0.1.9.tgz | `-- repositories.yaml `-- starters 7 directories, 20 files
apiVersion: v1 entries: mychart: - apiVersion: v1 created: 2017-09-12T02:28:54.061070032Z description: A Helm chart for Kubernetes digest: ae8d7138002d432014dc8638ec37202823e9207445caf08a660d154b26e936ea name: mychart urls: - http://127.0.0.1:8879/mychart-0.1.0.tgz version: 0.1.0 - apiVersion: v1 created: 2017-09-12T03:08:14.02186072Z description: A Helm chart for Kubernetes digest: sha256:2a05defa095d364f4efc789fd2417d07493757ebd74096e5f495c50604cf582d name: mychart urls: - http://127.0.0.1:8879/charts/mychart-0.1.0.tgz version: 0.1.0
创建chart仓库有多种方式,本文以创建一个本地仓库为例:
$ helm serve –address 0.0.0.0:8879 –repo-path ./charts Regenerating index. This may take a moment. Now serving you on 0.0.0.0:8879
上面步骤中,已经创建了一个本地的chart仓库,接下来讲述如何在chart仓库中维护chart。chart须遵循 SemVer 2 规则填写正确的版本格式。
一旦chart目录已经存在,将chart打包,并移动到的一个新建目录,通过helm repo index 命令将chart的metadata记录在index.yaml文件中。
helm package mychart mkdir fantastic-charts mv mychart-0.1.0.tgz fantastic-charts/ helm repo index fantastic-charts –url http://bjo-ep-dep-039.dev.fwmrm.net:8879/charts
上传chart到chart仓库,通过helm repo add命令上传chart到chart仓库:
$ helm repo add fantastic-charts http://bjo-ep-dep-039.dev.fwmrm.net:8879/charts "fantastic-charts" has been added to your repositories
查看chart是否上传仓库成功:
$ helm repo list NAME URL chartsfantastic-charts http://bjo-ep-dep-039.dev.fwmrm.net:8879/charts
查找上传的chart:
$ helm search mychart -l NAME VERSION DESCRIPTION local/mychart 0.1.0 A Helm chart for Kubernetes
欢迎转载,请注明作者出处:张夏,FreeWheel Lead Engineer,Kubernetes中文社区
原文:简化Kubernetes应用部署工具-Helm安装