kubernetes-helm部署及本地repo搭建

0. Helm架构

这里写图片描述

1. Helm Client安装

helm client主要作用如下:

  • 用来部署Tiller server
  • 用来管理Chart repository
  • 用来管理Chart package

部署过程:

wget https://kubernetes-helm.storage.googleapis.com/helm-v2.7.2-linux-amd64.tar.gz
tar -zxvf helm-v2.7.2-linux-amd64.tar.gz
cd linux-amd64
mv helm /usr/local/bin/

2. Helm Tiller安装

Helm Tiller是Helm的server,用来管理release。

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。

docker load < tiller_v2.7.2.tar
helm init

helm init主要做了以下三件事事情:
• 部署Tiller
• 初始化本地 cache
• 舒适化本地 Chart repository

备注:
1.为了起在指定节点上和使用已有镜像,我修改了tiller的deployment:
kubectl edit deployment tiller-deploy -n kube-system

  image: daocloud.io/liukuan73/tiller:v2.7.2
  nodeSelector:
    node-type: master
  tolerations:
      - key: "master"
         operator: "Equal"
         value: "true"
         effect: "NoSchedule"

2.修改tiller的svc使其暴露nodePort端口:
kubectl edit svc tiller-deploy -n kube-system

  ports:
  - name: tiller
    nodePort: 32134
  type: NodePort

3.Tiller还可以通过指定启动参数的形式修改这些配置:

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

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

helm reset

3.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仓库由Kubernetes Charts维护, Helm允许我们创建私有chart仓库。

3.1 chart仓库结构

一个chart仓库由一个chart包与index.yaml文件组成,index.yaml记录了chart仓库中全部chart的索引,一个本地chart仓库的布局例子如下:

~/.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

~/.helm/repository/local/index.yaml文件中记录了chart的诸如名称、url、version等一些metadata信息。

3.2 创建本地chart repo

<1>创建repo目录:

mkdir -p /dcos/appstore/app-repo/local-charts

<2>启动本地私有repo仓库服务:

helm serve --address 0.0.0.0:8879 --repo-path /dcos/appstore/app-repo/local-charts

<3>通过helm repo add命令添加本地chart仓库local-charts:

helm repo add local-charts http://10.142.21.21:8879
    "local-charts" has been added to your repositories

<4>查看本地chart仓库是否添加成功:

helm repo list
NAME            URL
local-charts    http://10.142.21.21:8879

备注:

  1. helm serve 不指定任何参数的话会在默认的repo目录(/root/.helm/repository/local
    )启动服务,根据该目录下的软件包(tgz)信息在该目录下创建index.html文件。
  2. 可以通过指定--repo-path参数实现在自定义的目录下启动服务,并在那个目录下创建index.html文件。

3.3 向repo中增加软件包

上面步骤中,已经创建了一个本地的repo,接下来讲述如何在repo中增加一个可用来部署的软件包chart。chart须遵循 SemVer 2 规则填写正确的版本格式。

<1>将chart文件夹移动到repo目录,并将chart打包:

cp -r jenkins /dcos/appstore/app-repo/local-charts/
cd /dcos/appstore/app-repo/local-charts
helm package jenkins --save=false   

备注:

  1. helm package的作用是在当前目录下将软件打包为tgz,假如这个软件包中有requirement.yaml,则打包时还需要加上--dependency-update,用来update dependencies from "requirements.yaml" to dir "charts/" before packaging
  2. --save=false的作用是不将tgz文件再拷贝一份到默认的local chart repo文件夹(/root/.helm/repository/local/)下,否则默认会将tgz拷贝一份到那,并检查那个目录下的index.html是否存在,不存在会报错。

<2>更新index.yaml文件
通过helm repo index 命令将chart的metadata记录更新在index.yaml文件中:

cd /dcos/appstore/app-repo/local-charts
helm repo index --url=http://10.142.21.21:8879 .    
helm repo update

备注:

  1. 这句话的作用是:Read the current directory and generate an index file based on the charts found.

<3>验证

  • 查找新上传的chart:
helm search jenkins
NAME                    VERSION DESCRIPTION
local-charts/jenkins    0.13.2  Open source continuous integration server. It s......
  • 安装chart软件包(即release过程):
    helm install local-charts/jenkins

参考

1.http://dockone.io/article/2702
2.http://v.youku.com/v_show/id_XMzIxNTY5NjMxNg==.html

猜你喜欢

转载自blog.csdn.net/liukuan73/article/details/79319900