helm安装、使用、实践
helm简介
Helm 是管理 Kubernetes 的应用管理工具
相当于centos的yum,python中pip,node中的npm.
几个概念
- Chart
Helm的应用包,采用tgz格式。类似于Yum的RPM包,其包含了一组定义Kubernetes资源相关的YAML文件。也称为应用Chart。 - Repoistory
Helm的应用仓库,Repository本质上是一个Web服务器,该服务器保存了一系列的Chart应用包以供用户下载,并且提供了一个该Repository的Chart包的清单文件以供查询。Helm可以同时管理多个不同的Repository。
Helm社区官方提供了stable和incubator仓库,但Helm社区没有打算独占仓库,而是允许其他人和组织也可以搭建仓库。仓库可以是公共仓库,也可以是私有仓库。 - Hub
不同的个人和组织提供的公共仓库形成了分散和分布的Helm仓库,不利于查找,所以官方提供了Helm Hub,各公共仓库可以注册到Helm Hub中以方便集中查找,Helm Hub只是分布的仓库的集中展示中心。
仓库注册到Helm Hub时,会将Chart清单文件向Helm Hub同步一份,这样可以在Helm Hub集中展示仓库列表和各仓库中的Chart列表。
Chart包也就是tgz文件实际上存储在各仓库中。Helm Hub并不实际存储Chart包。Helm只是在查询Chart时和Helm Hub有交互,其它操作都是和仓库直接交互的。 - Release
在Kubernetes集群上运行的Chart的一个实例。在同一个集群上,一个Chart可以安装很多次。每次安装都会创建一个新的Release。例如一个MySQL Chart,如果想在服务器上运行两个MySQL数据库,就可以把这个Chart安装两次。每次安装都会生成一个新的Release
helm安装和使用
二进制安装
#根据操作系统去获取最新二进制安装包https://github.com/helm/helm/releases
wget https://get.helm.sh/helm-v3.3.1-linux-amd64.tar.gz
#由于helm包在国外,我通过ss拉到了腾讯云cos,国内可通过以下地址访问:https://download.osichina.net/tools/k8s/helm/helm-v3.3.1-linux-amd64.tar.gz
tar -zxvf helm-v3.3.1-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin/
helm其他安装可参考官方网站: https://helm.sh/docs/intro/install/
注意: helm 客户端需要下载到安装了 kubectl 并且能执行能正常通过 kubectl 操作 kubernetes 的服务器上, 否则 helm 将不可用
使用
配置
helm repo add elastic https://helm.elastic.co
helm repo add gitlab https://charts.gitlab.io
helm repo add harbor https://helm.goharbor.io
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com
helm repo add stable https://kubernetes-charts.storage.googleapis.com
#添加国内仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
helm repo list
实践
关键解释
#搜索
helm search repo nginx
#安装
helm install nginx bitnami/nginx -n nginx
nginx/
├── charts #依赖其他包的charts文件
├── Chart.yaml # 该chart的描述文件,包括ico地址,版本信息等
├── templates #存放k8s模板文件目录
│ ├── deployment.yaml #创建k8s资源的yaml 模板
│ ├── _helpers.tpl #下划线开头的文件,可以被其他模板引用.
│ ├── hpa.yaml # 配置服务资源CPU 内存
│ ├── ingress.yaml # ingress 配合service域名访问的配置
│ ├── NOTES.txt #说明文件,helm install之后展示给用户看的内容
│ ├── service.yaml #kubernetes Serivce yaml 模板
└── values.yaml #给模板文件使用的变量
关键解释
#查询已安装
helm list -A
#搜索
helm search repo nginx
#拉取到本地
helm pull bitnami/nginx --untar
#根据values.yml配置本地安装
helm install nginx . -f values.yaml -n nginx
#根据values.yml配置本地升级
helm upgrade nginx . -f values.yaml -n nginx
#卸载
helm uninstall nginx -n nginx
关键解释
#使用set更新
helm upgrade tomcat bitnami/tomcat --set service.type=NodePort --set persistence.enabled=false
helm list
#查看状态
helm status tomcat
#使用values.yaml更新
helm upgrade -f values.yaml tomcat .
#查看更新历史
helm history tomcat
#回滚
helm rollback tomcat 2
helm安装nfs storageclasses
安装nfs
yum -y install epel-release
yum -y install nfs-utils rpcbind
systemctl enable rpcbind nfs-server nfs-lock nfs-idmap
systemctl start rpcbind nfs-server nfs-lock nfs-idmap
#172.18.4.*的IP都能访问nfs
echo "/data 172.18.4.*(rw,sync,no_root_squash)" > /etc/exports
exportfs -a
安装nfs storageclasses
helm pull stable/nfs-client-provisioner --untar
cd nfs-client-provisioner/
vim values.yaml
helm install nfs -f values.yaml .
values.yaml
...
nfs:
server: 172.18.4.202
path: /data/nfs
mountOptions:
...
helm安装ingress
由于GFW的原因,镜像下载失败,我这边是从本地下载好导入.
关键点
helm search repo ingress
helm pull stable/nginx-ingress --untar
helm install ingress -f values.yaml . -n ingress
vim nginx-ingress/values.yaml
helm upgrade -f values.yaml ingress . -n ingress
使用helm推送chart到私有仓库
helm repo list
#添加私有仓库,包括账号、密码
helm repo add myhabor https://harbor.osichina.net/chartrepo/charts --username $username --password $password
helm repo list
tree -L 2 cerebro
#安装helm-push插件,该插件支持使用 helm push 指令推送 helm chart 至指定 repo,同时支持上传目录及压缩包
helm plugin install https://github.com/chartmuseum/helm-push
#推送到私有仓库
helm push cerebro myhabor
#查询
helm search repo cerebro
#更细缓存,如果查询不到刚刚上传的chart,需要进行此步骤
helm repo update
helm search repo cerebro
#下载私有habor中chart
helm fetch myhabor/cerebro --untar