Helm的安装与使用

Helm

Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。Helm的官方源下有很多应用的Chart,我们可以利用Helm快速部署这些应用。最重要的是对于公司自己的应用也可以编写自己的Chart,做到一键部署整个应用集群。

Helm有如下几个基本概念:

  • Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。每个Chart包含下面两部分: 包的基本描述文件Chart.yaml 放在templates目录中的一个或多个Kubernetes manifest文件模板
  • Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次
  • Repository:chart的仓库,用于发布和存储chart

helm的组成

Helm由两部分组成,客户端helm和服务端tiller。

  • tiller运行在Kubernetes集群上,管理chart安装的release
  • helm是一个命令行工具,可在本地运行,一般运行在CI/CD Server上。

安装Helm

根据官方文档安装

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz

tar -zxvf helm-v2.9.1-linux-amd64.tar.gz 

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

helm help

helm version

初始化helm 并在K8s集群上部署Tiller,需要所在服务器可以正常使用kubectl操作k8s集群,由于墙的问题使用了阿里云的镜像

helm init --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

查看 tiller 是否正常运行

kubectl get pod -n kube-system -l app=helm

NAME                            READY     STATUS    RESTARTS   AGE
tiller-deploy-98f7f7564-xh24t   1/1       Running   0          3d

添加tiller需要的RBAC权限

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"}}}}'

基础操作

helm repo

Helm 可以设置多个存储库,首次安装预配置为使用官方 Kubernetes chart 存储库 repo,由于墙的原因上面安装命令已经使用阿里存储库替换了预置的官方库,我们可以使用helm repo操作存储存库

查看存储库
helm repo list

添加一个存储库
helm repo add local http://127.0.0.1:8879/charts   

更新存储库
helm repo update 

用于搜索所需要应用的chart

helm search mysql

NAME                    CHART VERSION   APP VERSION     DESCRIPTION                                       
incubator/mysql-broker  0.1.0                           A Helm chart for Kubernetes                       
incubator/mysqlha       0.3.0           5.7.13          MySQL cluster with a single master and zero or ...
stable/mysql            0.3.0                           Fast, reliable, scalable, and easy to use open-...

helm install

搜索到chart后,可以通过Helm install命令部署chart,部署时指定chart名及Release(部署的实例)名:

helm install --name my-mysql --namespace myNamespace stable/mysql

如果有配制需要覆盖,可以通过指定配置文件

helm install --name my-mysql --namespace myNamespace -f config.yaml stable/mysql

或者通过–set key=value形式:

helm install --name my-mysql --namespace myNamespace --set service.port=3307  stable/mysql

如果对配制不太不清楚可以到官方库去找一下chart说明

helm list

chart 安装后,通helm list查看

helm list

NAME            REVISION        UPDATED                         STATUS          CHART                   NAMESPACE     
my-chartmuseum  1               Fri Aug  3 14:27:52 2018        DEPLOYED        chartmuseum-1.6.0       thinker-common

如果想看所有安装过的Chart(包括被删除的)

helm list --all

NAME            REVISION        UPDATED                         STATUS          CHART                   NAMESPACE           
bold-elephant   1               Tue Jul 31 15:34:34 2018        DELETED         hello-svc-0.1.0         default             
my-chartmuseum  1               Fri Aug  3 14:27:52 2018        DEPLOYED        chartmuseum-1.6.0       thinker-common      
saccharum       2               Fri Aug  3 16:51:56 2018        DELETED         saccharum-chart-1.0.0   saccharum-production
wordpress-test  1               Tue Jul 31 15:11:52 2018        DELETED         wordpress-0.6.13        default   

helm status

查看安装的Chart状态

helm status my-chartmuseum

helm delete

删除chart

helm del my-chartmuseum

确认chart是否删除:

helm ls -a my-chartmuseum

delete 只会删除k8s线上部署,部署记录会保留,可以使用helm hist查看

helm hist my-chartmuseum

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

helm rollback --debug my-chartmuseum 1

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

helm delete --purge my-chartmuseum

版本管理

更新release

Helm使用helm upgrade更新已安装的release:

helm upgrade mysql -f mysql/values.yaml --set resources.requests.memory=1024Mi mysql
# 如果只需要修改 resources.requests.memory=1024Mi ,可以加入 --reuse-values 保留原有 values
helm upgrade mysql --reuse-values --set resources.requests.memory=1024Mi mysql

#查看当前 values
helm get values mysql

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

 helm hist mysql

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

helm get --revision 1 mysql
resources:
requests:
cpu: 100m
memory: 512Mi

helm get --revision 2 mysql
resources:
requests:
cpu: 100m
memory: 1024Mi

版本回滚

可以会滚到某个指定版本

helm rollback --debug mysql 1

参考文档

官网 简化Kubernetes应用部署工具-Helm之应用部署 Helm 用户指南

上篇Helm私服
下篇K8落地