简化Kubernetes应用部署工具-Helm安装


【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。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安装

Helm CLINET安装

Helm Client安装过程如下:
1. 下载 Helm 2.6.1:https://storage.googleapis.com ... ar.gz
2. 解包:tar -zxvf helm-v2.6.1-linux-amd64.tgz
3. helm二进制文件移到/usr/local/bin目录。

mv linux-amd64/helm /usr/local/bin/helm

Helm TILLER安装

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其他安装形式

- 安装金丝雀build: –canary-image
- 安装指定image:–tiller-image
- 指定某一个Kubernetes集群:–kube-context
- 指定namespace安装:–tiller-namespace

Helm TILLER删除

由于 Tiller的数据存储于Kubernetes ConfigMap中,所以删除、升降级Tiller,原Helm部署的应用数据并不会丢失。

删除Tiller:
$ helm reset


Chart仓库

chart仓库用来存储和分享打包的chart,官方chart仓库由Kubernetes Charts维护, Helm允许我们创建私有chart仓库。

创建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仓库由一个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

~/.helm/repository/local/index.yaml文件中记录了chart的诸如名称、url、version等一些metadata信息。
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仓库

创建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。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,DockOne社区

1 个评论

点赞

要回复文章请先登录注册