helm 学习(一)
helm官网:https://helm.sh/zh/docs/intro/
概述
之前部署应用需要编写yaml文件,然后执行文件。这种方式部署少量的服务可以,但是如果部署几十个,上百个微服务需要维护大量yaml文件,特别不方便。通过helm可以解决如下问题
- 把多个yaml作为一个整体管理
- 实现yaml高效复用
- 使用helm应用级别的版本管理
helm是一个k8s的包管理工具,就像linux下的包管理器,如yum/apt等,可以很方便的将之前打包好的yaml文件部署到k8s上
相关概念
- helm:一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、打包、发布和管理
- Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
- Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个release;将在 k8s 中创建出真实运行的资源对象。
是从v2到v3
2019 年 11 月 13 日, Helm 团队发布 Helm v3 的第一个稳定版本。
该版本主要变化如下:
- 最明显的变化是 Tiller 的删除
- Release 名称可以在不同命名空间重用
- 支持将 Chart 推送至 Docker 镜像仓库中4、使用 JSONSchema 验证 chart values
- 使用 JSONSchema 验证 chart values
helm使用
安装配置
安装helm
Helm 客户端下载地址:https://github.com/helm/helm/releases 解压移动到/usr/bin/目录即可。
wget https://get.helm.sh/helm-vv3.2.1-linux-amd64.tar.gz tar zxvf helm-v3.2.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
配置chart仓库
- 微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本 上官网有的 chart 这里都有。
- 阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
- 官方仓库(https://hub.kubeapps.com/charts/incubator)官方 chart 仓库,国内有点不好使
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 remove aliyun
更新仓库
helm repo update
使用helm创建一个configmap
#创建一个helm包
helm create mychart
#目录结构
[root@k8s-master01 ~]# tree mychart/
mychart/
├── charts
├── Chart.yaml
├── templates
│ └── chart-cm.yaml
└── values.yaml
#首先编写一个configmap
[root@k8s-master01 templates]# cat chart-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-cm
data:
myvalue: "hello world"
#退回到包目录,然后创建
[root@k8s-master01 ~]# helm install myconfigmap ./mychart/
#查看实例 列出来rekease实例名
[root@k8s-master01 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myconfigmap default 1 2023-03-20 22:22:36.515340319 +0800 CST deployed mychart-0.1.0 1.16.0
# 查看使用helm发布后创建的configmap
[root@k8s-master01 ~]# kubectl get cm | grep mychart-cm
mychart-cm 1 6m50s
#查看实例的详细信息
[root@k8s-master01 ~]# helm get manifest myconfigmap
---
# Source: mychart/templates/chart-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-cm
data:
myvalue: "hello world"
删除实例
#查看
[root@k8s-master01 ~]# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
myconfigmap default 1 2023-03-20 22:22:36.515340319 +0800 CST deployed mychart-0.1.0 1.16.0
#删除
helm uninstall myconfigmap
使用chart部署一个实例
[root@k8s-master01 ~]# cat mychart/templates/chart-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap #最前面的,从作用域最顶层命名空间开始,即:在顶层命令空间中开始查找Release对象,再查找Name对象
data: #上面的就是通过内置对象获取内置对象的变量值Relase的名称作为凭借成configmap的名字
myvalue: {{ .Values.MY_VALUE }}
#设置变量
[root@k8s-master01 ~]# cat mychart/values.yaml
MY_VALUE: "hello world"
#执行创建
helm install configmap2 ./mychart/
helm的测试渲染命令
不真正的执行,只是试运行看是否能运行
#用法:
helm install release实例名 chart目录 --debug --dry-run
#例:
helm install myconfigmap3 ./mychart/ --debug --dry-run
helm通过各种类型的chart包安装一个release实例名来部署k8s相关的资源,(如:pod,deploy,svc,ingress,ep等,根据模板文件定义)
- 从加入到本的chart官方仓库(从官方仓库安装)安装release实例
- 将从chart仓库拉下来的压缩包进行安装release实例,(下载好的压缩包本地离线安装release)
- 将从chart仓库拉下的压缩包解压后,从解压目录安装release实例(解压下载好的压缩包,从解压目录离线安装release实例)
- 从一个网路地址仓库压缩包直接安装release是实例
#从加入到本地的chart官方仓库(从官方仓库安装)安装release实例,db为release实例名
helm install db stable/mysql
#从加入到本地的chart社区仓库(从官方仓库安装)安装release实例,my-tomcat为release实例
helm install my-tomcat test-repo/tomact
#从chart仓库拉下来的压缩包进行安装release实例(从本地存档文件离线安装),db为release实例名
helm install db mysql-1.6.9.tgz
#从chart仓库拉下来的压缩包解压后,从解压目录安装release实例(从解压目录离线安装),db为release实例名
helm install db mysql
#从一个网路地址仓库压缩包直接安装release实例(从下载服务器安装),db为release实例名
helm install db http://url.../mysql-1.6.9.tgz
#卸载release实例
helm uninstall release实例名