目录
Helm概述
Heml是Kubernates的应用程序包管理器,类似于Linux上的yum、Mac上的brew,为用户方便的实现查找、发布和使用Kubernates应用程序
Helm将Kubernates的资源(Deployment、Service、ConfigMap等)打包为一个Charts,将币制并测试后的Charts保存到Charts仓库中进行存储和发布
Helm核心术语
Charts
也就是Heml中的程序包,包括了一个Kubernetes应用程序所运行时的镜像、依赖关系、资源定义文件等
Repository
Charts仓库,用于集中存储和分布Charts,类似于docker镜像仓库Hubor/Regestry,Git中的Gitlab/Github,Maven中的Nexus之类的仓库中心
Config
应用程序安装运行时的配置信息
Release
应用程序实例化配置后运行于Kubernetes集群中的一个Charts实例。在一个k8s集群中一个Charts可以指定不同Config多次安装,每次安装都会创建一个新的Release
Helm架构
Helm主要由Helm客户端、Tiller服务端和Charts仓库组成:
- Helm Client是命令行工具,基于gRPC协议与Timer Server交互,主要完成以下任务:
- 在本地开发Charts
- 管理Charts仓库
- 提供了安装、查找、卸载的命令与Tiller交互完成安装、查找、卸载Charts
- Tiller Server是运行于Kubernetes集群之上容器化服务应用,它接收来自Helm Client的请求,与Kubernates API Server进行交互,主要完成以下任务:
- 监听Heml Client过来的请求
- 合并Charts与Config后构建一个Release
- 向Kubernetes集群安装Charts并对相应的Release进行跟踪
- 升级和卸载Charts
Heml安装与使用
安装Helm Client
helm提供了二进制程序和编码编译安装。为了方便我们直接使用二进制程序的方式安装
- 下载二进程程序包
wget tar -zxvf
- 将二进行文件加入PATH环境变量或复制到/usr/local/bin目录中
- 查检是否安装正确
注意:Heml依赖与本地的kubeconfig配置文件才能与运行与kubenetes之上的Tiller服务器进行通信,所以确保本地的kubctl命令可以正常与kubenetes集群连接,或本地至少有可用的kubeconfig配置
安装Tiller Server
Tiller Server可以部署在Kuberntes集群之上,也可部署于本地,只要与kubenetes集群能够正常通信就可以,下面我们就将Tiller部署在kubenetes集群之上
- 创建RBAC权限
- 初始化Tiller Server,安装Tiller Server的安装
- 检查是否部署成功
Helm基本操作命令
官方仓库:https://hub.kubeapps.com/
release管理相关:
- install:安装release
- delete:删除release
- upgrade/rollback:升级或回滚release
- list:查看安装后的release
- history: 查看elease的历史信息
- status :获取release状态信息
charts管理相关:
- create:创建charts
- fetch:
- get:
- inspect:
- package:打包charts
- verify:
Heml Charts
Charts文件目录结构
Chart.yaml
Chart.yaml提供了Charts相关的各种元数据,如名称、版本、关键词、作者信息、使用的模板引擎信息等等,它是一个Charts的核心文件,主要由以下字段:
- name:Charts名称,必须字段
- version:版本号,必须字段
- description:描述,可选字段
- keywords:用于搜索时的关键字,可选字段
- home:项目主面URL,可选字段
- sources:项目源码URL,可选字段
- maintainers:项目维护者信息,它是由name、email和url属性组成,可选字段
- engine:模板引擎名称,默认为gotpl,可选字段
- icon:项目图标URL,可选字段
- appVersion:本项目用到的应用程序版本号,可选字段
- deprecated:当前Charts是否废弃,可选字段
- tillerVersion:当前Charts依赖的tiller版本号,可选字段
requirements.yaml
requirements.yaml文件是一个简单的依赖列表,主要由以下字段:
- name:被依赖的Charts名称
- version:被依赖的Charts版本
- repository:被依赖的Charts仓库URL
- alias:为被依赖的Charts创建一个别名
- tags:
- condition:
- import-values:
说明:如果依赖关系文件配置完成后,执行“helm dependency update”命令会更新依赖关系 ,并自动下载依赖的Charts至charts/目录中
values.ymal
所有的模板文件保存在template目录中,在当前Charts被Helm引用时,此目录中的所有模板文件会交给模板引擎处,模板文件中所用到的值有两种方式提供:
通过Charts中的values.ymal文件提供,一般用于提供默认值
在运行"helm install"命令时传递包含所需要的自定义值的yaml
基它文件:
定义Charts时还需要用到Licence、README.md以及NOTE.txt,其中NOTE.txt文件用于在Charts安装完成后输出说明信息,向用户说明当前Charts相关使用说明或初始化说明信息,另外使用“helm status”命令查看Release的相关信息时,此文件中的内容也会输出
自定义Charts
- 创建一个空Charts
helm create myapp
- 修改Charts以部署自定义服务
vim myapp/Chart.yaml
- 打包Charts
helm package myapp
-
启动本地char仓库服务
helm serve
-
搜索charts
helm search myapp
-
安装charts
helm install --name myapp1 local/myapp
自己搭建kubeapps
以上我们使用的是官方的Charts仓库或第三方Charts仓库,我们在企业内部更希望有自己的Charts仓库,因此我们可以使用Kubeapps搭建自己的Charts仓库
- 添加需要的第三方repo地址
helm repo add bitnami https://charts.bitnami.com/bitnami
- 使用Heml进行安装
helm install --name kubeapps --namespace kubeapps bitnami/kubeapps
- 创建所需要的ServiceAccount并做相关Binding
kubectl create serviceaccount kubeapps-operator kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
- 获取Token
kubectl get secret $(kubectl get serviceaccount kubeapps-operator -o jsonpath='{.secrets[].name}') -o jsonpath='{.data.token}' | base64 --decode eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yLXRva2VuLWprdDV6Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6Imt1YmVhcHBzLW9wZXJhdG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOWUwZTg3MzAtMGY1Ni0xMWU5LTgxZmEtMDY5ODNlMDAwMDgxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.GNx7DpbLc5ds05vKorIVMBluk13cx2AyI9N07l_EKwNudUyPcH5RH5O2-MHweokdEZA-3FVgTpYV2hH3CsdsWA2bR2hOcGh7pkRAxRC04KTk_VVKe7NcSifksdaADm6BRxEjtcY54Yjt6avS6uiUxcVcxc6kiNPuREz3RBt53GpPkqR-efXSaDNhJqYaivWHjL6j4dcXblLhEL55aoBCggmcrRJgvisnmNPmHT-R3LweB2TbgVbAq-lb2I4XRCAP2meJGJb0-1SmdC_k4oxKxa3TIi1nG7W0j0qkdN1Gmjp03Tgr7CwvI6dvSMEhq2EfOXV9OmNBwO1p5-i5fiQaVw
- 使用获取的Token进行登录