helm安装、使用、实践

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/

Alt text

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       

Alt text

实践

1.helm安装nginx
Alt text
Alt text

关键解释

#搜索       
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   #给模板文件使用的变量       

2.推荐实践
Alt text

关键解释

#查询已安装       
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       

Alt text

关键解释

#使用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:
...

Alt text

helm安装ingress

Alt text

由于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

Alt text

Alt text