Kubernetes上如何使用Helm

作者: ygqygq2 分类: 云计算/虚拟化,系统/运维 发布时间: 2018-09-04 13:57

Kubernetes上如何使用Helm

1. 环境说明

操作系统:CentOS7
kubernetes:1.11

2. helm安装

注意版本号,后续容器服务的版本要和这个一致, 否则会出现问题。

说明:
helm init --upgrade会在Kubernetes集群上安装配置Tiller, 仓库默认使用https://kubernetes-charts.storage.googleapis.com 。由于国内无法访问相关域名,可以使用阿里云容器服务提供的镜像和站点。

查看容器运行情况

kubectl get pod --all-namespaces|grep tiller

从Kubernetes 1.6开始,API Server启用了RBAC授权。而Tiller部署没有定义授权的ServiceAccount,这会导致访问API Server时被拒绝。我们可以采用如下方法,为Tiller部署添加授权。

卸载helm服务端

3. helm使用

4. 安装Monocular

Monocular基于web的用户界面,用于管理Kubernetes应用打包为Helm Charts。它允许您从多个存储库搜索和发现可用Chats,并安装在您的集群中,只需要鼠标点点就能完成。

准备条件
* Helm和Tiller已安装
* Nginx Ingress controller已安装
* Install with Helm: helm install stable/nginx-ingress
* Minikube/Kubeadm: helm install stable/nginx-ingress --set controller.hostNetwork=true

安装

默认它是配置到ingress中的,通过ingress节点IP就能访问。

注意
安装过程中,pvc创建提示失败,需要手动干预提供可用pvc。

5. 安装Kubeapps

kubeapps是一个基于web的用户界面,用于部署和管理在kubernetes群集中的应用程序。Kubeapps允许你:
* 浏览并部署存储库中的chats
* 检查、升级和删除集群中安装的基于helm的应用程序
* 添加自定义和私有的chat存储库(支持ChartMuseum and JFrog Artifactory)
* 浏览并提供来自Service Catalog的外部服务和可用的服务中介
* 用服务目录绑定基于helm的应用程序连接到外部服务
* 基于kubernetes RBAC的安全认证和授权

安装

6. 2个工具对比

  1. 在功能上,2个基本一样;
  2. 用户体验上,当前2个的最新版本,Kubeapps(v1.0.0-alpha.6)要优于Monocular(0.7.3),部署时Kubeapps能让用户直接修改一些默认参数;
  3. 安全上,Kubeapps直接使用Kubernetes的RBAC,和Kubernetes的dashboard的toke登录方式一样。Monocular登录功能用不了;
  4. 对外提供访问上,Kubeapps的kubectl port-forward不推荐,最好配置ingress,而Monocular已自动配置ingress;

7. chart repo

chart repo是一个可用来存储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仓库。

7.1 chart repo结构

查看目前的repo,helm repo list

helm执行tiller命令后默认会配置一个名为l的本地repo。

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

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

7.2 启动repo服务


helm serve --help


添加本地repo
helm repo add local http://192.168.105.92:8879/charts

7.3 向repo中增加软件包

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

因为官方chart里的image镜像被墙的可能和自己定制参数的设置,我们将修改过的chart添加到本机chart中。


helm package的作用是在当前目录下将软件打包为tgz,假如这个软件包中有requirement.yaml,则打包时还需要加上--dependency-update,用来update dependencies from "requirements.yaml" to dir "charts/" before packaging

更新index.yaml文件

查看chart是否上传仓库成功:
helm search zookeeper|grep local

8. 应用部署和版本管理

获取chart
获取版本为0.3.5的mysql并解压缩包:

利用helm lint命令检查下载的chart是否存在问题:

创建自定义chart
helm create mychart

查看mychart结构:

生成chart目录里有Chart.yaml, values.yaml and NOTES.txt等文件,下面分别对chart中几个重要文件解释:
Chart.yaml 包含了chart的metadata,描述了Chart名称、描述信息与版本。
values.yaml:存储了模板文件变量。
templates/:记录了全部模板文件。
charts/:依赖chart存储路径。

其中mychart/templates/的文件及其作用如下:
NOTES.txt:给出了部署chart后的帮助文档,例如如何使用chart、列出默认的设置等。
deployment.yaml:创建 Kubernetes deployment的yaml文件。
service.yaml:创建deployment的service endpoint yams文件。
_helpers.tpl: 模板使用帮助文件。

chart安装有以下几种方式:
指定chart: helm install stable/mariadb
指定打包的chart: helm install ./nginx-1.2.3.tgz
指定打包目录: helm install ./nginx
指定chart包URL: helm install https://example.com/charts/nginx-1.2.3.tgz

覆盖chart中的默认值,通过指定配置文件方式:
helm install -f myvalues.yaml ./redis

或者通过–set key=value形式:
helm install --set name=prod ./redis

安装release名称为mysql例子如下,请注意NOTES中对Mysql的使用说明:

vim mysql/values.yaml

找到storageClass,并修改其值,这里我们使用可用的动态卷ceph-rbd

安装release

查看release状态helm status mysql

或通过helm list -a查看全部的release,tag “-a”是查看全部的release,包括已部署、部署失败、正在删除、已删除release等。

更新release

helm upgrade mysql -f mysql/values.yaml --set resources.requests.memory=1024Mi mysql

查看指定release的历史部署版本信息:

查看指定release的历史版本部署时部分配置信息,以resources.requests.memory为例,符合查看部署符合预期:即第一次部署resources.requests.memory设置为512Mi,第二次的升级resources.requests.memory设置为1024Mi:

helm get --revision 1 mysql

版本回滚

回滚到第一次的版本:

查看mysql release的版本信息,当前已经回滚到REVISION为1的版本:

删除release

确认release 是否删除:

即使删除的release ,其发布的历史信息还是继续被保存。

可以恢复一个已经删除的release:

如果希望彻底删除一个release,可以用如下命令:

再次查看刚被删除的mysql release,提示已经无法找到,符合预期:

Helm对release的版本管理
在上面例子中,已经展示了Helm对release的非常强大的版本管理功能,比如通过helm list -a查看有哪些release,通过helm hist查看某一个具体的release发布过的历史版本,以及通过helm get --revision,查看某个release的一次历史版本对应的具体应用配置信息等。即使已经被删除的release仍然有记录,并且通过Helm能够快速回滚到已删除release的某个发布过的历史版本。Helm的这些版本管理功能,Kubernetes原生并不支持。

参考资料:
[1] https://helm.sh/
[2] https://whmzsu.github.io/helm-doc-zh-cn/
[3] 简化Kubernetes应用部署工具-Helm简介
[4] 简化Kubernetes应用部署工具-Helm安装
[5] 简化Kubernetes应用部署工具-Helm之应用部署
[6] 简化Kubernetes应用部署工具-Helm之Release配置
[7] https://github.com/helm/monocular
[8] https://github.com/kubeapps/kubeapps

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注