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

news2024/11/16 8:24:35

文章目录

  • 1. helm 介绍、组件、安装和目录结构
    • 1.1 helm 介绍
    • 1.2 helm 组件
      • 1.2.1 helm2 和 helm3 的区别
    • 1.3 helm 安装
    • 1.4 helm 目录结构
  • 2. 编写一个chart 和 helm3 内置对象讲解
    • 2.1 创建编写一个chart
      • 2.1.1 创建chart,引用内置对象的变量值
      • 2.1.2 helm通过各种类型chart包安装一个实例名来部署k8s相关的资源
    • 2.2 helm3 的内置对象详解
  • 3 常用命令总结
    • 3.1 常用参数总结
      • 3.1.1 helm rollback 参数
      • 3.1.2 helm upgrade 参数

推荐阅读: 中文官方文档

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文件中的变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信上线外卖小程序“门店快送”

我是卢松松,点点上面的头像,欢迎关注我哦! 抖音入局外卖,微信都开始下场做外卖了,难道都知道这块儿特赚钱吗,只能说如今大环境还是不太好,南山必胜客都开始搞兼职了…… 2月15日,有…

【管理您的整个软件供应链】上海道宁与​Sonatype助力您以更安全的开源更快地交付产品

Sonatype是 美国一家开源DevOps服务供应商 支持开源组件(中央仓) 为开发者提供资源库管理器(Nexus) 帮助加速软件创新 配备Nexus产品的组织 可以做出更好的决策 更快地进行大规模创新 并且知道他们的应用程序 始终由最高质…

微电影的行业痛点有哪些?

微电影全称微型电影,又称微影。是指能够通过互联网新媒体平台传播(几分钟到60分钟不等)的影片,适合在移动状态、短时休闲状态下观看,具有完整故事情节的“微(超短)时”(几分钟-60分钟)放映、“微(超短)周期制作(7-15天…

iOS开发framework和demo 使用cocoapod方法集成三方库

使用workspace。workspace相当于项目管理,创建workspace形成的文件是.xcworkspace。使用 一、xcode创建workspace并放入SDKFramework文件夹内,如图 选择File → new→Workspace → 点击save 这时候文件夹中就多了 SDKFramework.xcworkspace 文件 1-4.p…

功率放大器在MEMS微结构模态测试研究中的应用

实验名称:功率放大器在MEMS微结构模态测试研究中的应用研究方向:元器件测试测试目的:随着MEMS器件在各个领域中广泛应用,对微结构进行模态测试获得其动态特性参数对微结构的设计、仿真、制造、以及质量控制和评价等方面具有十分重…

机器学习:self-attention

输入 编码方式: one-hot:word-embedding:能更明显的区分不同类别的输入 图也能看作是多个向量输入 输出 每个向量都有一个label 一整个sequence有一个label 模型自己决定有多少个label(sequence to sequence) 重点介绍每个vector有一个…

Qt编写视频监控系统71-外网访问摄像头等设备(获取各种信息及拉流)

一、前言 最近遇到个需求是通过外网接入摄像机或者NVR,通用的做法是将视频流推流到服务器,然后拉取rtmp视频流,这样就多了服务器的要求,而且实现的功能有限比如不能直接用onvif协议对设备获取信息和配置信息,还有个做…

Guitar Pro8.0吉他打谱作曲中文版有哪些新功能?

很多人在听到Guitar Pro这个名词时,本能反应就是跟吉他有关的软件吧,但是具体是什么样子,有什么功能我们却不一定知道的那么详细,下面呢,我们就来详细的介绍下Guitar Pro这款软件。最后,Guitar Pro绝对是初…

【JAVA八股文】并发相关

并发相关1. 线程状态2. 线程池3. wait vs sleep4. lock vs synchronized5. volatile6. 悲观锁 vs 乐观锁7. Hashtable vs ConcurrentHashMap8. ThreadLocal1. 线程状态 六种状态及转换 分别是 新建 当一个线程对象被创建,但还未调用 start 方法时处于新建状态此时…

20- Xgboost 算法参数最优化 (集成算法) (算法)

Xgboost 方式一 from xgboost import XGBClassifier model XGBClassifier(learning_rate 0.1, # 学习率,控制每次迭代更新权重时的步长,默认0.3。值越小,训练越慢use_label_encoderFalse,n_estimators10, # 总共迭代的次数,即…

英特尔研究院探索负责任的生成式AI,让AI应用真正惠及大众

ChatGPT的爆火让AI再次成为大众热议的焦点,作为英特尔所提出的搭建起从模拟时代到数字时代桥梁的五大“超级技术力量”之一,伴随着无处不在的智能化,AI可将无穷的数据转化为切实可行的洞察。作为半导体行业的领先企业,在这一前沿技…

Windows系统从权限维持角度进行应急响应

一、基本介绍 红队攻击者在对目标进行渗透利用后通常都会进行权限维持,以达到持续利用的目的。而作为防守方进行应急响应时,应该如何与技术高超(jiaohuajianzha)的攻击者斗智斗勇呢?或许可以通过本文可以找到答案。以…

企业小程序开发步骤【教你创建小程序】

随着移动互联网的兴起,微信已经成为了很多企业和商家必备的平台,而其中,微信小程序是一个非常重要的工具。本文将为大家介绍小程序开发步骤,教你创建小程序。 步骤一、注册小程序账号 先准备一个小程序账号,在微信公…

ROS从入门到精通5-5:局部路径规划插件开发案例(以DWA算法为例)

目录0 专栏介绍1 局部规划插件制作框架2 DWA算法源码分析2.1 全局路径裁剪2.2 更新局部代价2.3 运行DWA算法2.3.1 构造动态窗口2.3.2 生成最优轨迹2.4 终点规划3 算法测试0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机…

区块链知识系列 - 系统学习EVM(四)-zkEVM

区块链知识系列 - 系统学习EVM(一) 区块链知识系列 - 系统学习EVM(二) 区块链知识系列 - 系统学习EVM(三) 今天我们来聊聊 zkEVM、EVM 兼容性 和 Rollup 是什么? 1. 什么是 Rollup rollup顾名思义,就是把一堆交易卷(rollup)起来…

oracle官方下载历史版本JDK版本

背景 日常工作中由于一些特殊原因,我们需要下载指定系统指定位数指定版本的jdk,这个时候去网上搜索下载就会遇到各种坑,病毒、诱导连接、诱导关注/注册、付费、错误版本等,所以最好的办法是去官网下载,下面列举两种方式…

Allegro中如何删除多余D码操作指导

Allegro中如何删除多余D码操作指导 用Allegro做PCB设计的时候,在最后输出生产文件的时候,必须清除多余的D码,不让多余的D码出现在D码文件中,类似下图 如何清除多余D码,具体操作如下 点击Tools点击Padstack

WIN11/win10+Azure Kinect DK详细驱动配置教程(亲测)

本人3000多大洋 买了一台 Azure Kinect DK设备,打算研究研究人体姿态。今天配置一下,网上的教程不少,有的过期教程,有的和我的不匹配,所以,只能参考他们的,取其精华 去其糟粕。下面 开始,这里先…

C#.Net正则表达式学习笔记

C#.Net正则表达式学习笔记 在处理字符串时,你会经常有查找符合特定条件的字符串的需求,比如判断一串电话号码是否符合格式、一个邮箱是否符合格式、一个密码是否包含了字母大小写等等。 正则表达式(Regular expressions)用于匹配文本,使用一…

[2023]自动化测试框架完整指南

所有软件在提供给用户之前都必须经过测试。软件测试是开发生命周期中必不可少的一步因为它确保用户必须收到符合其开发目的的高质量产品。每个企业都优先考虑测试;因此,大多数人更愿意从手动测试转向自动化。因此,自动化测试框架是任何软件测试过程的基础…