14. Helm2&3的使用

2023-10-28

该文档内容来源于尚硅谷K8S教学视频课件尚硅谷

仅用于知识整理,便于后续巩固复习,如有侵权,请联系本人删除

需要注意的是,这套尚硅谷教学视频中使用的是helm2的版本,本人所用的是k8s 1.18版本,与helm2不兼容,后续安装的是helm3的版本,所以blog中会涉及到关于helm2和helm3的一些内容,有区别之处都会作特别说明

Helm介绍

Helm官方网址:https://helm.sh/zh/docs/intro/quickstart/ 多看官方文档

Helm的github下载地址:https://github.com/helm/helm/releases

​ 在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随 着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本 管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理。把helm理解为是专门负责管理k8s中的应用资源的工具,使用helm可以对k8s中的应用进行统一打包、分发、安装、升级以及回退等操作。 Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清 单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署。

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和 release ,实际上还有一个重要的概念是repo

  • chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说 明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包
  • release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成 一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release

Helm2 包含两个组件:Helm 客户端和 Tiller 服务器,如下图所示:

在这里插入图片描述

Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在 Kubernetes 集群 中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互。

Helm部署

本人实际使用的是k8s1.18.0,安装helm2.13.1时,到最后初始化时会报错是因为k8s版本与helm版本之间的问题,参考 解决K8s报错:Error: error installing: the server could not find the requested resource

如果使用helm2.15版本的话,可以解决上述错误,但是随之而来的一个问题是,在创建tiller pod的过程中需要从gcr.io/kubernetes-helm/tiller:v2.15.0 这个地址拉取镜像,总是拉取失败,所以tiller这个pod就无法创建成功,后续也无法正常使用。放弃了,直接安装helm3了 helm3入门Blog

但是后续的部分流程还是按照helm2.13来的,先跟着课件走一遍再说,其中有与helm2不同的地方,会另做标注

Helm 由客户端命令行工具helm和服务端 tiller 组成,Helm 的安装十分简单。 下载 helm 命令行工具到 master 节点 node1 的 /usr/local/bin 下,这里下载的 2.13. 1版本:

ntpdate ntp1.aliyun.com
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-amd64.tar.gz
tar -zxvf helm-v2.13.1-linux-amd64.tar.gz
cd linux-amd64/
cp helm /usr/local/bin/

为了安装服务端 tiller,还需要在这台机器上配置好 kubectl 工具和 kubeconfig 文件,确保 kubectl 工具可以 在这台机器上访问 apiserver 且正常使用。 这里的 node1 节点以及配置好了 kubectl。因为 Kubernetes APIServer 开启了 RBAC 访问控制,所以需要创建 tiller 使用的 service account: tiller 并分 配合适的角色给它。 详细内容可以查看helm文档中的 Role-based Access Control。 这里简单起见直接分配 cluster- admin 这个集群内置的 ClusterRole 给它。创建 rbac-config.yaml 文件:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
helm init --service-account tiller --skip-refresh

tiller 默认被部署在 k8s 集群中的 kube-system 这个 namespace 下:

kubectl get pod -n kube-system -l app=helm
helm version

如果安装的是helm3版本的话,关于tiller就不需要再看了

官方文档给出了一些关于helm3的使用方式helm使用,通过helm可以安装一些现有的环境/包 这里叫做chart,当然也可以自定义

Helm自定义Chart模板

下述是helm2的创建自定义模板的流程,后续有helm3的,有用到helm3的可以直接跳到helm3

创建文件夹

mkdir ./hello-world
cd ./hello-world

创建自描述文件 Chart.yaml (这个文件必须有), 且这个文件必须有 name 和 version 定义

$ cat <<'EOF' > ./Chart.yaml
name: hello-world
version: 1.0.0
EOF

创建模板文件, 用于生成 Kubernetes 资源清单(manifests),且必须创建在templates文件夹

# 创建模板文件, 用于生成 Kubernetes 资源清单(manifests)
$ mkdir ./templates
$ cat <<'EOF' > ./templates/deployment.yaml
# 下面是deployment.yaml的配置文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image: hub.atguigu.com/library/myapp:v1
        ports:
        - containerPort: 80
          protocol: TCP
        
# 然后再创建一个service.yaml配置文件
apiVersion: v1
kind: Service
metadata:
  name: hello-world
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: hello-world
# 使用命令 helm install RELATIVE_PATH_TO_CHART 创建一次Release
helm install .
# 还可以把配置配置在配置文件中 values.yaml(一些属性的配置文件)
image:
  repository: gcr.io/google-samples/node-hello
  tag: '1.0'
# 这个文件中定义的值,在模板文件中可以通过 .VAlues对象访问到
# 比如在templates/deployment.yaml文件中就可以这样使用values.yaml文件中的内容,前提是都要在templates这个文件夹下
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
      - name: hello-world
        image:  {{ .Values.image.repository }}:{{ .Values.image.tag }}
        ports:
        - containerPort: 80
          protocol: TCP

helm2的常用操作,helm3的很多常规操作命令与helm2不一致

#在部署为release时,values.yaml中的值是可以被覆盖的,可以使用      --values YAML_FILE_PATH 或 --set key1=value1, key2=value2 覆盖掉
# upgrade时也可以覆盖values中的配置文件的值
$ helm install --set image.tag='latest' .

# 升级版本
helm upgrade -f values.yaml test .
# 列出已经部署的 Release
helm ls

# 查询一个特定的 Release 的状态
helm status RELEASE_NAME

# 移除所有与这个 Release 相关的 Kubernetes 资源
helm delete cautious-shrimp

# helm rollback RELEASE_NAME REVISION_NUMBER
helm rollback cautious-shrimp 1

# 使用 helm delete --purge RELEASE_NAME 移除所有与指定 Release 相关的 Kubernetes 资源和所有这个Release 的记录
#helm3中不需要加--purge命令即可彻底删除
helm delete --purge cautious-shrimp

helm ls --deleted

使用helm3自定义chart模板

参考Blog1

参考Blog2

首先运行helm create DiyName 命令,即可在当前文件夹下创建出一个名为myapp的文件夹,里面已经生成了一些配置文件的模板,实际上就是上述helm2需要手动创建的一些文件,这里直接自动生成,直接进行配置即可,真香

#运行helm create DiyName 命令
helm create myapp

可以看下生成的文件目录的结构:

在这里插入图片描述

  • _helpers.tpl里面的内容是定义模板用的,所有模板都可以再这里定义,然后再任何yaml文件当中都可以调用这个文件下的模板
  • NOTES.txt: chart的"帮助文本"。这会在你的用户执行helm install时展示给他们。
  • deployment.yaml: 创建Kubernetes 工作负载的基本清单
  • service.yaml: 为你的工作负载创建一个 service终端基本清单。
  • _helpers.tpl: 放置可以通过chart复用的模板辅助对象
  • values.yaml 文件也导入到了模板。这个文件包含了chart的 默认值 。这些值会在用户执行helm installhelm upgrade时被覆盖。
  • charts/目录 可以 包含其他的chart(称之为 子chart)。

为了快速的实现该流程,没有必要把所有的配置文件都配置一遍,直接先把templates文件夹下的所有文件都删除,然后创建之前我们所配置的一个deployment.yaml和一个service.yaml文件即可。

然后直接在myapp文件夹下运行

helm install diyChartName .
#执行上述命令之后,通过helm list即可查看所安装的chart信息

Helm的Debug

# 使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
# 使用--dry-run --debug 选项来打印出生成的清单文件内容,而不执行部署
helm install . --dry-run --debug --set image.tag=latest
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

14. Helm2&3的使用 的相关文章

随机推荐

  • 文件上传之upload-labs 1~5 详细介绍

    一 Pass 01 前端js验证 1 1 原理描述 在文件上传时 用户选择文件时 或者提交时 有些网站会对前端文件名进行验证 一般检测后缀名 是否为上传的格式 如果上传的格式不对 则弹出提示文字 此时数据包并没有提交到服务器 只是在客户端通
  • Mongoose中的查找

    使用Mongoose来查找文档很容易 有以下3种方法可供选择 find findById findOne 1 find 第一个参数表示查询条件 第二个参数用于控制返回的字段 第三个参数用于配置查询参数 第四个参数是回调函数 回调函数的形式为
  • 抖音快手最新版抓包模块免费送

    安装前 安装后 视频讲解 https www bilibili com video BV1Ga411Q7be p 10 vd source 43c2c404de6d798650d44c856ee1e992 下载地址也在视频评论区
  • YOLOv5源码逐行超详细注释与解读(3)——训练部分train.py

    前言 本篇文章主要是对YOLOv5项目的训练部分train py 通常这个文件主要是用来读取用户自己的数据集 加载模型并训练 文章代码逐行手打注释 每个模块都有对应讲解 一文帮你梳理整个代码逻辑 友情提示 全文近5万字 可以先点再慢慢看哦
  • MySql-JDBC故障转移

    MySQL Connector J 支持故障转移 故障转移在潜在的风险要发生的时候使用 通常情况下 数据库连接发生错误 需要客户端的异常处理 重新创建Statement ResultSet 重启进程 而使用Mysql Replication
  • 多模态大模型应用大观

    浩渺宇宙中 生命与文明经历了亿万年的沉淀与演变 这是人类集体智慧逐步觉醒的过程 人们正在渐渐掌握加速前行的翅膀 从古老的蒸汽机到现代的电力 再跨越到计算机与互联网的时代 每一次人类文明的跃进 都离不开开拓者的勇敢探索 在不断地开拓进取中那些
  • STM32 Keil报错 error: #35: #error directive: “include FreeRTOS.h must appear in source files before...

    在跑代码的时候 本来没错的突然报错 error 35 error directive include FreeRTOS h must appear in source files before include task h 原因是 引用了
  • GRPC编译安装、各种语言插件及C++/golang测试

    GRPC编译安装 各种语言插件及测试 复制过程 可能乱了 原笔记地址 有道云笔记 官网 Quick start C gRPC 编译 安装 官方测试 手写测试 跨语言测试 这里用golang 一 编译和安装 1 1源码编译安装 git clo
  • pads PCB封装问题记录

    写在这里 以后可以翻一翻 问题 今天又遇到了PCB封装的问题 这个座子的封装 左右两边有很长的线 在PCB layout中 选择其他元器件时会选中它 但是这两条线在PCB layout中不显示 很是烦人 解决方法 先找到这个线在哪里 编辑元
  • Vue中使用Google的reCAPTCHA v3人机校验-demo

    reCAPTCHA Google 提供了 reCAPTCHA v3 和 v2 和 reCAPTCHA Enterprise 帮助您保护网站免受欺诈活动 垃圾内容和滥用行为的侵扰 reCAPTCHA v3 所有的頁面都會有 reCaptcha
  • ubuntu16.04 catkin_make报错No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so'

    最近 博主遇到了极其糟心的事情 Ubuntu16 04系统的主机开机重启之后 循环显示输入密码进入的提示 天地良心 密码绝对正确 就是进不到桌面 后来在好心人的帮助下 终于可以看到Ubuntu系统的桌面了 博主的心情那是相当的激动 但是 激
  • Django概述(第一章)

    一 安装django 更改python默认镜像源 在pycharm下方Terminal中执行下面命令 pip config set global index url https pypi tuna tsinghua edu cn simpl
  • std::string::npos作用

    关于std string npos 字符串末尾位置 的使用 一般作为查找匹配项 include
  • 开源大数据利器汇总

    所有分类 gt 服务器软件 gt 分布式 云计算 大数据 开源大数据利器汇总 开源 2015 05 21 21 00 00 发布 您的评价 0 0 收藏 0收藏 类别 名称 官
  • 单独搭建mysql网站

    在服务器部署这网站 拖入已给文件 自动化导入 打开navicat 新建数据库 右键数据库 运行SQL文件 选择要导入的文件 可以查看表内数据 手工导入 mysql uroot p123 create database abc 创建数据库ab
  • 【华为OD机试】求字符串中所有整数的最小和(C++ Python Java)2023 B卷

    题目描述 输入字符串s 输出s中包含所有整数的最小和 说明 字符串s 只包含 a z A Z 合法的整数包括 1 正整数 一个或者多个0 9组成 如 0 2 3 002 102 2 负整数 负号 开头 数字部分由一个或者多个0 9组成 如
  • 合宙Air105

    基础资料 基于Air105开发板 Air105 LuatOS 文档 上手 开发上手 LuatOS 文档 探讨重点 对官方CRYPTO 加密与解密 功能的复现 进行相关内容的学习及探讨 单片机的CRYPTO 加密与解密 功能是指单片机上集成了
  • Angular框架的基本原理

    最近公司在研发新的web平台 对于前端的开发最终选定使用Angular框架进行开发 而经过这一段时间的学习与研究 基本可以使用其进行前端业务的开发 在此将Angular框架的基本原理知识进行简单总结 并使用Primeng组件库来实现简单的应
  • C# 中如何判断线程是否结束

    为了测试获取网页源码 使用C 编写程序 为了最大限度的增加获取的次数 于是采用了多线程的方式 C 中很容易实现多线程 其实现方式与Java的实现方式基本一样 但是在功能上提供的方法更多一些 在编程的过程中 在主线程中启动了多个线程后 往往想
  • 14. Helm2&3的使用

    文章目录 Helm介绍 Helm部署 Helm自定义Chart模板 Helm的Debug 该文档内容来源于尚硅谷K8S教学视频课件尚硅谷 仅用于知识整理 便于后续巩固复习 如有侵权 请联系本人删除 需要注意的是 这套尚硅谷教学视频中使用的是