k8s之helm入门
1.概述
helm是k8s的另外一个项目,相当于linux的yum,在yum仓库中,yum不光要解决包之间的依赖关系,还要提供具体的程序包,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com、私有仓库.
helm提供了一个应用所需要的所有清单文件.比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件,把这三个文件打包到一起,就是一个应用程序的程序包,称之为Chart.
Chart是一个helm程序包,其实质只是一个模板,我们可以对这个模板进行赋值(value),形成我们自定义的清单文件,也就实现我们生产个性化的需求,这样的仓库叫Chart仓库,一个https/http服务器.
Helm把Kubernetes资源打包到一个chart中,而chart被保存到chart仓库,通过chart仓库可用来存储和分享chart.helm工作在k8s集群之外,helm不直接操作apiserver,而是和Tiller交互,Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值,最后部署成为release.helm是tiller的客户端,管理本地的chart仓库,作用:发送chart、实例安装、查询、卸载等.
helm先去检查chart是否存在,如果存在就把chart下载到helm本机当前用户的家目录下,然后helm把Chart和Config交给tiller,tiller和api server交互,api server把chart部署在k8s集群上,就不再叫chart了,而叫release;一个chart赋值不同,完全可以部署出多个release出来,所以可以把chart看做是一个安装包的模板,如果发现chart更新了,helm会自动滚动更新,还支持一键回滚的操作.

访问:https://github.com/helm/helm/releases下载安装包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.2-linux-amd64.tar.gztar xf helm-v2.12.2-linux-amd64.tar.gzmv linux-amd64/helm /usr/bin/rbac配置文件样例:https://github.com/helm/helm/blob/master/docs/rbac.mdcat tiller-rbac.yamlapiVersion: v1kind: ServiceAccountmetadata: name: tiller namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: tillerroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects: - kind: ServiceAccount name: tiller namespace: kube-systemkubectl apply -f tiller-rbac.yamlcat /usr/lib/systemd/system/docker.serviceEnvironment="NO_PROXY=127.0.0.1/8,127.0.0.1/16"kubectl get pods --all-namespaces=true# 下面这两步没用,还得下国内的镜像,直接执行第三步export NO_PROXY="127.0.0.1/8,127.0.0.1/16"helm init --service-account tillerhelm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 \--stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartsTiller (the Helm server-side component) has been installed into your Kubernetes ClusterHappy Helming!helm versionClient: &version.Version{SemVer:"v2.12.2",...)Server: &version.Version{SemVer:"v2.12.2",...) |
2.使用helm
官方charts列表 https://hub.kubeapps.com/
helm默认使用的charts源地址是https://kubernetes-charts.storage.googleapis.com,需要替换为阿里的helm源:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | helm repo listNAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartslocal http://127.0.0.1:8879/charts# helm源已经变成国内的了,下面这两步是移除默认源的,不需要执行helm repo remove stablehelm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/chartshelm repo update# 添加incubator源,这个源是开发版的安装包,用起来可能不稳定helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/#列出charts仓库中所有可用的应用helm searchhelm search mysqlhelm inspect stable/mysql# 用helm安装软件包,-name:指定release名字helm install --name mysql1 stable/mysqlhelm list # 查看安装的软件包helm delete mysql1 |
helm常用命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | release管理: install delete upgrade/rollback list history:查看release历史版本 status:获取release状态信息chart管理: create:创建一个chart,生成基础chart示例性文件,供我们修改用 fetch:下载仓库中的一个char到本地 get inspect package verify# helm把安装包下载到当前用户的家目录下ll /root/.helm/cache/archive/# 修改chart里面的values.yaml实现定制,values.yaml文件中##是注释,#是可开启的参数helm install --name mysql1 -f /root/values.yaml stable/mysqlmetrics想要能被prometheus收集数据需要在metadata中将prometheus.io/scrape:设置为truemetadata: annotations: prometheus.io/scrape: 'true'# 部署完应用包后,查看release提示信息helm status mysql1helm fetch stable/redis查看chart官方手册,了解每个参数的含义https://docs.helm.sh/developing_charts/#charts# 用helm生成基础chart示例性文件,myapp是chart的名字helm create myapp# 做语法检查helm lint myapp==> Linting myapp[INFO] Chart.yaml: icon is recommended1 chart(s) linted, no failures# 打包helm package myapp/Successfully packaged chart and saved it to: /root/myapp-0.1.0.tgz# 启动8879仓库的服务helm serve# 查看local仓库里面是否有我们创建的chart包helm search myapp# 部署我们自定义的charthelm install --name myapp1 local/myapp# 删除我们部署的charthelm delete --purge myapp1 |
参考博客:http://blog.itpub.net/28916011/viewspace-2216650/