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下载安装包
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.2-linux-amd64.tar.gz tar xf helm-v2.12.2-linux-amd64.tar.gz mv linux-amd64/helm /usr/bin/ rbac配置文件样例:https://github.com/helm/helm/blob/master/docs/rbac.md cat tiller-rbac.yaml apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system kubectl apply -f tiller-rbac.yaml cat /usr/lib/systemd/system/docker.service Environment="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 tiller helm 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/charts Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster Happy Helming! helm version Client: &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源:
helm repo list NAME URL stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts local http://127.0.0.1:8879/charts # helm源已经变成国内的了,下面这两步是移除默认源的,不需要执行 helm repo remove stable helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts helm repo update # 添加incubator源,这个源是开发版的安装包,用起来可能不稳定 helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ #列出charts仓库中所有可用的应用 helm search helm search mysql helm inspect stable/mysql # 用helm安装软件包,-name:指定release名字 helm install --name mysql1 stable/mysql helm list # 查看安装的软件包 helm delete mysql1
helm常用命令
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/mysql metrics想要能被prometheus收集数据需要在metadata中将prometheus.io/scrape:设置为true metadata: annotations: prometheus.io/scrape: 'true' # 部署完应用包后,查看release提示信息 helm status mysql1 helm 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 recommended 1 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 # 部署我们自定义的chart helm install --name myapp1 local/myapp # 删除我们部署的chart helm delete --purge myapp1
参考博客:http://blog.itpub.net/28916011/viewspace-2216650/