前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes Helm使用教程

Kubernetes Helm使用教程

作者头像
kubernetes中文社区
发布2019-06-24 15:48:19
6.2K0
发布2019-06-24 15:48:19
举报
文章被收录于专栏:kubernetes中文社区

什么是Helm

在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment、svc等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理.

Helm本质就是让K8s的应用管理(Deployment,Service等)可配置,能动态生成。通过动态生成K8s资源清单文件(deployment.yaml,service.yaml)。然后调用Kubectl自动执行K8s资源部署。

Helm和charts的主要作用

  • 应用程序封装
  • 版本管理
  • 依赖检查
  • 便于应用程序分发

组成 helm客户端

  • 制作、拉取、查找和验证 Chart
  • 安装服务端Tiller
  • 指示服务端Tiller做事,比如根据chart创建一个Release

helm服务端 tiller

  • 安装在Kubernetes集群内的一个应用, 用来执行客户端发来的命令,管理Release

安装Helm客户端

下载期望的版本

代码语言:javascript
复制
# wget -c https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz

解压

代码语言:javascript
复制
# tar -zxvf helm-v2.12.3-linux-amd64.tar.gz

在解压后的文件夹中找到Helm命令所在位置, 将它移动到期望位置

代码语言:javascript
复制
# mv linux-amd64/helm /usr/local/bin/helm

安装helm服务端tiller

执行命令

代码语言:javascript
复制
# helm init --upgrade --tiller-image registry.cn-beijing.aliyuncs.com/minminmsn/tiller:v2.12.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

确认服务端tiller

代码语言:javascript
复制
# kubectl get pods -n kube-system |grep tiller
tiller-deploy-99dcdbf5f-ddwbg              1/1     Running   0          4m28s

确认客户端和服务端连接成功。如果只显示了客户端版本,说明没有连上服务端。它会自动去K8s上kube-system命名空间下查找是否有Tiller的Pod在运行。

代码语言:javascript
复制
# helm version
Client: &version.Version{SemVer:"v2.12.3", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.3", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

查找helm仓库中可用chart,如查找mysql

代码语言:javascript
复制
# helm search mysql

默认安装的 tiller 权限很小,我们执行下面的脚本给它加最大权限,这样方便我们可以用 helm 部署应用到任意 namespace 下:

代码语言:javascript
复制
# kubectl create serviceaccount --namespace=kube-system tiller
# kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
# kubectl patch deploy --namespace=kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

创建自己的chart

我们创建一个名为mychart的chart,看一看chart的文件结构。

代码语言:javascript
复制
$ helm create mongodb
$ tree mongodb
mongodb
├── Chart.yaml #Chart本身的版本和配置信息
├── charts #依赖的chart
├── templates #配置模板目录
│   ├── NOTES.txt #helm提示信息
│   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板
|     |—— ingress.yaml  #用于服务暴露或访问
│   ├── deployment.yaml #kubernetes Deployment object
│   └── service.yaml #kubernetes Serivce
└── values.yaml #kubernetes object configuration

如此,我们可以按需编辑自动生成的yaml文件。templates目录下的yaml文件中的变量是从values.yaml文件中获取的。

使用命令验证chart配置。该输出中包含了模板的变量配置与最终渲染的yaml文件。

代码语言:javascript
复制
# helm install --dry-run --debug mongodb

部署到kubernetes

在mongodb目录下执行下面的命令将nginx部署到kubernetes集群上。

代码语言:javascript
复制
# helm install .

查看部署的release

代码语言:javascript
复制
# helm list
NAME         	REVISION	UPDATED                 	STATUS  	CHART        	NAMESPACE
garish-gopher	1       	Wed Feb 27 11:24:36 2019	DEPLOYED	mongodb-0.1.0	default

打包分享

我们可以修改Chart.yaml中的helm chart配置信息,然后使用下列命令将chart打包成一个压缩文件。

代码语言:javascript
复制
# helm package .

打包出mongodb-0.1.0.tgz文件。

依赖 我们可以在requirements.yaml中定义应用所依赖的chart,例如定义对mariadb的依赖:

代码语言:javascript
复制
dependencies:
- name: mariadb
  version: 0.6.0
  repository: https://kubernetes-charts.storage.googleapis.com

使用helm lint .命令可以检查依赖和模板配置是否正确。

使用第三方chat库

添加fabric8库

代码语言:javascript
复制
# helm repo add fabric8 https://fabric8.io/helm

搜索fabric8提供的工具(主要就是fabric8-platform工具包,包含了CI、CD的全套工具)

代码语言:javascript
复制
# helm search fabric8

我们在前面打包的chart可以通过HTTP server的方式提供。

代码语言:javascript
复制
# helm serve --address 172.16.0.180:8879
Regenerating index. This may take a moment.
Now serving you on 172.16.0.180:8879

访问http://172.16.0.180:8879 可以看到刚刚安装的chart。

解决本地chart依赖 打开另外一个终端,在本地当前chart配置的目录下,将该repo加入到repo list中。

代码语言:javascript
复制
# helm repo add local http://172.16.0.180:8879

在浏览器中访问http://172.16.0.180:8879,可以看到所有本地的chart。

然后下载依赖到本地。

代码语言:javascript
复制
# helm dependency update

这样所有的chart都会下载到本地的charts目录下。

设置helm命令自动补全 为了方便helm命令的使用,helm提供了自动补全功能,如果使用bash请执行:

代码语言:javascript
复制
# source <(helm completion bash)

Example: 安装Mysql 执行命令

代码语言:javascript
复制
# helm repo update
# helm install stable/mysql
Released smiling-penguin

每次安装都有一个Release被创建, 所以一个Chart可以在同一个集群中被安装多次,每一个都是独立管理和升级的。其中 stable/mysql是Chart名, smiling-penguid 是Release名,后面管理Release时都是用的这个名字。

在使用一个Chart前,查看它的默认配置,然后使用配置文件覆盖它的默认设置

代码语言:javascript
复制
# helm inspect values stable/mariadb

使用一个YAML文件,内含要覆盖Chart的配置值。

代码语言:javascript
复制
# echo '{mariadbUser: user0, mariadbDatabase: user0db}' > config.yaml
# helm install -f config.yaml stable/mariadb

values.yaml中的值可以被部署release时用到的参数–values YAML_FILE_PATH 或 –set key1=value1, key2=value2覆盖掉, 比如

代码语言:javascript
复制
# helm install --set image.tag='latest' .

优先级:–set设置的值会覆盖–value设置的值, –value设置的值会覆盖 values.yaml中定义的值

helm一些常用命令

Charts: helm search 查找可用的Charts helm inspect 查看指定Chart的基本信息 helm install 根据指定的Chart 部署一个Release到K8s helm create 创建自己的Chart helm package 打包Chart,一般是一个压缩包文件

release: helm list 列出已经部署的Release helm delete [RELEASE] 删除一个Release. 并没有物理删除, 出于审计需要,历史可查。 helm status [RELEASE] 查看指定的Release信息,即使使用helm delete命令删除的Release. helm upgrade 升级某个Release helm rollback [RELEASE] [REVISION] 回滚Release到指定发布版本 helm get values [RELEASE] 查看Release的配置文件值 helm ls –deleted 列出已经删除的Release

repo: helm repo list helm repo add [RepoName] [RepoUrl] helm repo update

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 kubernetes中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Helm
  • 安装Helm客户端
  • 安装helm服务端tiller
  • 创建自己的chart
  • 部署到kubernetes
  • 打包分享
  • 使用第三方chat库
  • helm一些常用命令
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档