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 的第一个稳定版本。

该版本主要变化如下:

  1. 最明显的变化是 Tiller 的删除
  2. Release 名称可以在不同命名空间重用
  3. 支持将 Chart 推送至 Docker 镜像仓库中4、使用 JSONSchema 验证 chart values
  4. 使用 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等,根据模板文件定义)

  1. 从加入到本的chart官方仓库(从官方仓库安装)安装release实例
  2. 将从chart仓库拉下来的压缩包进行安装release实例,(下载好的压缩包本地离线安装release)
  3. 将从chart仓库拉下的压缩包解压后,从解压目录安装release实例(解压下载好的压缩包,从解压目录离线安装release实例)
  4. 从一个网路地址仓库压缩包直接安装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实例名

 

posted @ 2023-03-20 23:09  百因必有果  阅读(58)  评论(0编辑  收藏  举报