Kubernetes集群编排工具helm3 工作学习记录


推荐阅读: 中文官方文档

1. helm 介绍、组件、安装和目录结构

1.1 helm 介绍

Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一样,能快速查找、下载和安装软件包。Helm 由客户端组件 helm 和服务端组件 Tiller 组成, 能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。

1.2 helm 组件

  • helm 客户端工具,主要用于 k8s 应用 Chart 的创建、打包、发布和管理。
  • Chart 应用描述,它是一系列用于描述 k8s 资源相关文件的集合(可以理解为 yaml 的集合)。
  • Release 基于 Chart 的部署实体,一个 Chart 被 Helm 运行后将会生成一个对应的 release,然后将在 k8s 中创建出真正运行的资源对象,它是一个应用级别的版本管理。
  • Repository 用于发布和存储chart包的仓库,类似yum仓库或docker仓库

1.2.1 helm2 和 helm3 的区别

  1. helm3 移除了Tiller组件, helm2 中helm客户端和k8s通信是通过Tiller组件和k8s通信,helm3移除了Tiller组件,直接使用kubeconfig文件和k8s的apiserver通信
  2. 删除release 命令变更
    #helm delete release-name --purge ------>> helm uninstall release-name
  3. 查看 charts 信心命令变更
    #helm inspect release-name ------>> helm show release-name
  4. 拉取 charts 包命令变更
    #helm fetch chart-name ------>> helm pull chart-name
  5. helm3 中必须指定 release 名称,如果需要生成一个随机名称,需要加选项–generate-name,helm2中如果不指定release 名称,可以自动生成一个随机名称
    #helm install ./mychart --generate-name

1.3 helm 安装

官网链接

1.4 helm 目录结构

mychart/        # chart 包名称
├── charts      # 存放子chart的目录,目录存放这个chart依赖的所有子chart
├── Chart.yaml  # 保存chart的基本信息,包括名字、描述信息及版本等,这个变量文件都可以被templates目录下文件引用
├── templates   # 模板文件目录,存放所有yaml文件,包含了所有部署应用的yaml文件
│   ├── deployment.yaml #创建deployment对象的模板文件
│   ├── _helpers.tpl    #模板助手文件,在整个chart中重复使用。templates目录下这些yaml文件可能会用的一些模板
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt  #存放提示信息文件,加上chart帮助信息。helm install 部署后展示(提示)用户
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml   #用于渲染模板的文件(变量文件、定义变量的值)定义templates目录下yaml文件可能引用到的变量
                  #values.yaml 用于存储templates目录中模板中用到的变量的值,这些变量定义都是为了让templates目录下yaml引用
3 directories, 10 files

2. 编写一个chart 和 helm3 内置对象讲解

2.1 创建编写一个chart

编写一个chart,不引用内置对象的变量值,用helm3发布一个创建一个configmap,创建的k8s集群中。(其他应用也一样)

1)创建一个默认chart 包,创建的模板文件文件可根据实际情况进行删除

helm create mychart
#删除templates下文件
cd /mychart/templates &&  rm -rf ./*

2)编写一个自己需要的模板文件

[root@k8s-master templates]# cat configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
      name: mychart-configmap
data:
    myvalue: "hello world"

3)创建一个release实例:

helm install myconfigmap ../mychart
NAME: myconfigmap
LAST DEPLOYED: Wed Feb 15 23:13:46 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

4)查看创建后的相关信息和验证是否已经在k8s集群中创建了configmap

#1. 安装成功后,此命令可以查看已经发布到k8s中的release信息
helm get manifest myconfigmap 
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
      name: mychart-configmap
data:
    myvalue: "hello world"
#2.list 列出创建的release实例名
helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
myconfigmap     default         1               2023-02-15 23:13:46.970693341 +0800 CST deployed        mychart-0.1.0   1.16.0
#3.查看使用helm发布后创建的configmap
kubectl get configmap |grep mychart-configmap
mychart-configmap   1      9m38s
#4. 删除release实例
 helm uninstall myconfigmap
release "myconfigmap" uninstalled
helm list|grep myconfigmap
空

2.1.1 创建chart,引用内置对象的变量值

通过变量调用,可以对yaml文件成为一个通用模板。
1)修改上面创建的configmap

[root@k8s-master mychart]# cat templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
      name: {{ .Release.Name }}-configmap #最前面的,从作用域最顶层命令空间开始,即:在顶层命名空间中开始查找Release对象,再查找Name对象
data:
    myvalue: {{ .Values.MY_VALUE }} #上面就是通过内置对象和获取内置对象的变量值(Release的名称)作为拼接成configmap的名字,通过调用values.yaml文件获取变量值

2)修改values.yaml 文件

[root@k8s-master mychart]# > values.yaml
[root@k8s-master mychart]# echo "MY_VALUE": "hello world" > values.yaml

3)创建一个release 实例

[root@k8s-master mychart]# helm install myconfigmap2 ../mychart
NAME: myconfigmap2
LAST DEPLOYED: Wed Feb 15 23:40:04 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
[root@k8s-master mychart]# kubectl get configmaps
NAME                     DATA   AGE
kube-root-ca.crt         1      2d1h
myconfigmap2-configmap   1      12s

4)删除实例

[root@k8s-master mychart]# helm uninstall myconfigmap2
release "myconfigmap2" uninstalled
[root@k8s-master mychart]# kubectl get configmaps
NAME               DATA   AGE
kube-root-ca.crt   1      2d1h

5)helm测试渲染命令
不真正执行,只是试运行看是否能运行,用来测试模板内容是否正确

[root@k8s-master mychart]# helm install myconfigmap3 ../mychart/ --debug --dry-run
install.go:159: [debug] Original chart version: ""
install.go:176: [debug] CHART PATH: /data/mychart

NAME: myconfigmap3
LAST DEPLOYED: Wed Feb 15 23:45:53 2023
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}

COMPUTED VALUES:
MY_VALUE: hello world

HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
      name: myconfigmap3-configmap #最前面的,从作用域最顶层命令空间开始,即:在顶层命名空间中开始查找Release对象,再查找Name对象
data:
    myvalue: hello world #上面就是通过内置对象和获取内置对象的变量值(Release的名称)作为拼接成configmap的名字

[root@k8s-master mychart]# kubectl get configmaps
NAME               DATA   AGE
kube-root-ca.crt   1      2d1h

2.1.2 helm通过各种类型chart包安装一个实例名来部署k8s相关的资源

在这里插入图片描述

2.2 helm3 的内置对象详解

3 常用命令总结

helm version                            // 查看helm版本
helm create xxx                         // 创建一个xxx charts
helm lint ./xxx                         // 检查包的格式或信息是否有问题
helm install xxx1 ./xxx                 // 部署安装xxx,设置名称为xxx1
helm list                               // 列出已经部署的charts
helm history                            // 发布历史
helm upgrade                            // 更新版本
helm rollback                           // 回滚版本
helm package ./xxx                      // 打包charts
helm repo add --username admin --password password myharbor xxx  // 增加repo
helm uninstall xxx1                     // 卸载删除xxx1
helm pull                                // 拉取chart包
helm cm-push                            // 推送chart包
helm repo update                        // 更新仓库资源
helm search hub                         // 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库
helm search repo                        // 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网

3.1 常用参数总结

3.1.1 helm rollback 参数

#获取发布历史记录
helm -n base history xxx
helm -n be rollback xxx 版本号

3.1.2 helm upgrade 参数

#检查helm 文件中可能存在的问题
helm lint .
#helm 升级
helm upgrade baseline-middleware "/nfs/8build/middleware-chart" -i -f /nfs/8build/middleware-chart/baseline-middleware.values.yaml --set imageTag="20230215-1138" --set nameSpace=be -n be
发布时
-i 参数 等同install ,如果此名称的版本不存在,请运行安装
-f 参数,最后(最右边)指定的文件优先级最高。比如如果baseline-middleware.values.yaml和values.yaml同时包含了名为 'Test'的key,values.yaml中的设置会优先使用:
--set 参数,在命令行上变量值(可以用逗号指定多个或单独的值:key1=val1,key2=val2),若设置值一样,右边优先级高。此处设置的变量值会覆盖xxx.yaml文件中的变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值