【云原生--Kubernetes】Helm 工具安装

2023-11-05

一. Helm 概述

1.1 Helm 简介

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。

Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml、service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署。

我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name-version.tgz格式的单一文件,方便传输和存储)。

1.2 Helm重要概念

Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有三个重要的概念:Chart 、Repository 和 Release

  • Chart:Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
  • Repository(仓库):Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。

PS:以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,你可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name。可以将 release 想象成应用程序发布的版本号。

1.3Helm2 组件

在 Helm 中有两个主要的组件,即 Helm 客户端和 Tiller 服务器

  • Helm客户端
    是一个供终端用户使用的命令行工具
    客户端负责如下的工作:

  • 本地 chart 开发

  • 管理仓库

  • 与 Tiller 服务器交互(发送需要被安装的 charts、请求关于发布版本的信息、请求更新或者卸载已安装的发布版本)

  • Tiller服务端
    Tiller 是 helm 的服务器端,一般运行于 kubernetes 集群之上,定义 tiller 的 ServiceAccount,并通过 ClusterRoleBinding 将其绑定至集群管理员角色 cluster-admin,从而使得它拥有集群级别所有的最高权限

Tiller 服务器负责如下的工作:

  • 监听来自于 Helm 客户端的请求
  • 组合 chart 和配置来构建一个发布
  • 在 Kubernetes 中安装,并跟踪后续的发布
  • 通过与 Kubernetes 交互,更新或者 chart

1.4Helm2 工作原理

在这里插入图片描述

  • Chart Install 过程:
  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
  3. Tiller根据Chart和Values生成一个Release
  4. Tiller将Release发送给Kubernetes用于生成Release
  • Chart Update过程:
  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
  3. Tiller生成Release并更新指定名称的Release的History
  4. Tiller将Release发送给Kubernetes用于更新Release
  • Chart Rollback过程:
  1. Helm将要回滚的Release的名称传递给Tiller
  2. Tiller根据Release的名称查找History
  3. Tiller从History中获取上一个Release
  4. Tiller将上一个Release发送给Kubernetes用于替换当前Release

1.5 Helm2与Helm3区别

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。
用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。
在 Helm 3 中,Tiller 被移除了新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作
Helm3使得我们在使用的时候更加的方便,无需另外为Helm配置任何k8s的权限

二.Helm部署

官方手册:https://helm.sh/zh/docs/

下载二进制 Helm client 安装包:https://github.com/helm/helm/releases?page=2
我这儿使用的是3.6.0的版本

tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
#命令补全
source <(helm completion bash)

在这里插入图片描述

三.Helm常用命令

3.1 chart仓库管理

#添加常用的 chart 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator

#更新仓库、列表
helm repo update  
helm repo list

在这里插入图片描述

#查看 stable 仓库可用的 charts 列表,类似于yum list
helm search repo stable

#删除 incubator 仓库
helm repo remove incubator

在这里插入图片描述

3.2 查看 chart信息


helm show chart stable/mysql     #查看指定 chart 的基本信息

helm show all stable/mysql		 #获取指定 chart 的所有信息

在这里插入图片描述
在这里插入图片描述

3.3 安装chart

helm install my-redis bitnami/redis [-n default]   
#指定 release 的名字为 my-redis,-n指定部署到k8s的namespace,若不指定则为默认名称空间

helm install bitnami/redis --generate-name    
#不指定 release 的名字时,需使用 –generate-name 随机生成一个名字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#查看安装信息
 kubectl get pod,svc

在这里插入图片描述

3.4 查询release

#查询所有release
helm ls 
helm list
#查看指定的 release 状态
helm status my-redis         

在这里插入图片描述
在这里插入图片描述

3.5 删除 release

helm uninstall my-redis 

在这里插入图片描述

四.Heml自定义模板

4.1 chart包

charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

mkdir /opt/helm
cd /opt/helm
helm pull stable/mysql
tar xf mysql-1.6.9.tgz
yum install -y tree
tree mysql

在这里插入图片描述
可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。
chart 是包含至少两项内容的helm软件包

  1. 软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义
  2. 一个或多个模板,其中包含 Kubernetes 清单文件:
  • NOTES.txt:chart 的“帮助文本”,在用户运行 helm install 时显示给用户
  • deployment.yaml:创建 deployment 的资源清单文件
  • service.yaml:为 deployment 创建 service 的资源清单文件
  • ingress.yaml: 创建 ingress 对象的资源清单文件
  • _helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

4.2 创建自定义chart

4.2.1 chart文件介绍

helm create nginx
tree nginx

在这里插入图片描述
查看deploment

cat nginx/templates/deployment.yaml

在这里插入图片描述
在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。

查看values

cat nginx/values.yaml | grep repository

在这里插入图片描述
以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

4.2.2 修改 chart

vim nginx/Chart.yaml
在这里插入图片描述
vim nginx/values.yaml
在这里插入图片描述
在这里插入图片描述

4.2.3 打包chart

#检查依赖和模板配置是否正确
helm lint nginx
#打包
helm package nginx 

在这里插入图片描述

4.2.4 部署chart

#使用 --dry-run 参数验证 Chart 的配置,并不执行安装
helm install nginx ./nginx --dry-run --debug 
#安装,若需指定名称空间,使用-n
helm install nginx ./nginx-0.1.0.tgz

在这里插入图片描述
测试:
需要安装ingress-nginx,具提操作请看上篇文章

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
kubectl apply -f mandatory.yaml
kubectl apply -f service-nodeport.yaml

编写测试文件

kubectl get pod
kubectl exec -it nginx-657bdbb8d4-st4x6 bash
echo "this is helm chart" > /usr/share/nginx/html/index.html

在这里插入图片描述
主机域名映射

echo "192.168.48.14 www.xiayan.com" >> /etc/hosts

访问测试:

#获取ingress映射的端口
kubectl get svc -n ingress-nginx

在这里插入图片描述

4.3 升级chart

再次修改values.yaml,测试升级
vim nginx/values.yaml
在这里插入图片描述
vim nginx/templates/service.yaml
在这里插入图片描述
升级

helm upgrade nginx nginx

在这里插入图片描述
访问测试:
在这里插入图片描述

4.4 回滚

#查看指定chart的历史版本
helm history nginx
#回滚到指定版本
helm rollback nginx 1 

在这里插入图片描述
通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

在命令行使用 --set 指定参数来部署(install,upgrade)release
:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。

helm upgrade nginx nginx --set image.tag='1.15'

在这里插入图片描述

五.Helm仓库

helm 可以使用 harbor 作为本地仓库,将自定义的 chart 推送至 harbor 仓库。

  • 安装harbor
#上传 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
tar zxf harbor-offline-installer-v1.9.1.tgz
cd harbor

vim harbor.yml

hostname: 192.168.48.14
harbor_admin_password: Harbor12345
data_volume: /data                     #数据存储路径,自动创建
chart:
  absolute_url: enabled                #在chart中启用绝对url
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor          #日志路径

在这里插入图片描述

#安装带有 Clair service 和 chart 仓库服务的 Harbor
./install.sh --with-clair --with-chartmuseum

安装 push 插件

#在线安装
helm plugin install https://github.com/chartmuseum/helm-push

#离线安装
wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz

mkdir ~/.local/share/helm/plugins/helm-push
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push

登录 Harbor WEB UI 界面,创建一个新项目
浏览器访问:http://192.168.48.14 ,默认的管理员用户名和密码是 admin/Harbor12345
点击 “+新建项目” 按钮
填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目
在这里插入图片描述

添加仓库

helm repo add harbor http://192.168.48.14/chartrepo/chart_repo --username=admin --password=Harbor12345
#这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项目。
#查看仓库地址
helm repo ls

在这里插入图片描述
推送 chart 到 harbor 中

cd /opt/helm
helm push nginx harbor

在这里插入图片描述
在Harbor仓库查看 chart_repo 项目中的 Helm Charts
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【云原生--Kubernetes】Helm 工具安装 的相关文章

  • 在ubuntu内核中启用cgroup cpu实时运行时

    我正在尝试在 Ubuntu 18 04 上运行的 docker 容器中使用实时调度 我已经按照给定的方法安装了实时内核here https stackoverflow com questions 51669724 install rt li
  • 通过 VPN 容器路由 Docker 容器流量

    我在我的上安装了几个容器洛克Pro64 运行 openmediavault 的 ARMv8 处理器 rev 2 v8 版本 4 1 27 1 Arrakis 一切都运转良好 我使用的容器包括 Transmission Jellyfin Ra
  • 为什么docker容器提示“权限被拒绝”?

    我使用以下命令来运行 docker 容器 并从主机映射目录 root database 到容器 tmp install database docker run it name oracle install v root database t
  • Docker nginx 代理到主机

    简短的介绍 Nginx 运行在 docker 上 如何配置 nginx 以便将调用转发到主机 详细描述 我们有一个 Web 应用程序与几个后端通信 假设为rest1 rest2 和rest3 我们负责rest1 让我们考虑一下我开始rest
  • 在 docker 镜像中包含层有哪些优点?

    假设我有两个不同的 Dockerfile 图像一名为 nudoc my base image 1 1 FROM ubuntu 16 10 COPY test war 图像二名为 nudoc my testrun image 1 1 FROM
  • dockerfile 没有创建目录并复制文件?

    我的 dockerfile 中有以下内容 还有很多 不过我把相关的部分贴在这里了 RUN useradd jenkins USER jenkins Maven settings RUN mkdir m2 COPY settings xml
  • 为什么 Cassandra 客户端在生产中没有 epoll 时会失败? [复制]

    这个问题在这里已经有答案了 当我在本地运行服务时 我收到一条警告 指出 epoll 不可用 因此它使用 NIO 很公平 当我将其部署到 Kubernetes 中时 我得到了以下信息 这导致服务无法运行 2017 03 29T19 09 22
  • 在 config.js 中打开 admin 以查看服务器统计信息

    拉动后运行此命令 docker run d p 27017 27017 e MONGO INITDB ROOT USERNAME admin e MONGO INITDB ROOT PASSWORD password name mongod
  • mongo docker 镜像创建后未运行脚本

    我使用 docker compose 为前端 后端和 mongo 实例创建 3 个不同的容器 其中三个正在运行并在它们之间连接 但我需要在 mongo 实例运行后立即在数据库上创建一个管理员用户 根据 mongo 图像文档 每个脚本位于do
  • Daphne Django 文件上传大小限制

    我使用 Daphne 进行套接字和 http 连接 我正在运行 4 个工作容器 并且现在在 docker 容器中本地运行所有内容 如果我尝试上传 400MB 的文件 我的 daphne 服务器会失败 它适用于最大 15MB 的小文件 我的
  • Docker CentOS systemctl 不允许

    我尝试使用 systemctl 命令构建 CentOS 映像 但每次当我建造它时 我收到此错误 Step 5 7 RUN systemctl enable syslog ng systemctl start syslog ng gt Run
  • 无法通过docker连接到ASP.NET Core

    大家好 人们已经关注这个问题太久了 需要一些帮助 我制作了一个 ASP NET Core 网站 没有什么特别的 只是 VS 2017 v 1 1 附带的模板 我使用 dotnet core cli 发布网站并使用此 dockerfile 构
  • 开发者环境-如何调用/消费其他微服务

    背景 我的环境 Java Play2 MySql 我在 Play2 gt S1 S2 S3 上编写了 3 个无状态 Restful 微服务 S1 消耗来自 S2 和 S3 的数据 因此 当用户点击 S1 时 该服务会异步调用 S2 S3 合
  • Docker、maven 和 settings.xml

    给出以下简单的 Dockerfile FROM maven 3 6 3 ibmjava 8 alpine Copy maven settings COPY settings xml usr share maven ref COPY pom
  • 从我的应用程序 Helm 图表配置第三方 Helm 图表

    我似乎在任何地方都找不到任何关于此的明确信息 但是 Helm 图表中是否有可能需要第三方 例如stable jenkins 并指定配置值 我看到的所有示例都是为了运行helm install直接命令 但我希望能够将其配置为我的应用程序的一部
  • Docker Python 脚本找不到文件

    我已经成功构建了一个 Docker 容器 并将应用程序的文件复制到 Dockerfile 中的容器中 但是 我正在尝试执行引用输入文件 在 Docker 构建期间复制到容器中 的 Python 脚本 我似乎无法弄清楚为什么我的脚本告诉我它无
  • kubectl:在 WSL 终端中找不到

    我按照以下说明在 Windows10 上安装了 WSL2 https learn microsoft com en us windows wsl install win10 https learn microsoft com en us w
  • 使用 JWT 的 Istio Origin 身份验证不起作用

    我一直在使用 JWT 将身份验证策略应用于我的测试服务 我已关注本指南 https istio io docs tasks security authn policy end user authentication它确实按预期工作了 但是
  • 支持 Kubernetes NodePort 服务的 SSL/TLS

    问题 我需要通过 https 向外部公开 Kubernetes NodePort 服务 设置 我已经在裸机上部署了 Kubernetes 并且已经部署Polyaxon https github com polyaxon polyaxon通过
  • 如何使用fabric8 java客户端获取kubernetes服务帐户访问令牌?

    我已经在本地计算机中配置了 minikube 并将在外部使用 kubernetes 我已经在 kubernetes 中创建了一个服务帐户 并使用它的秘密我可以使用以下命令获取访问令牌 kubectl get secret

随机推荐

  • 神兵利器

    声明 该公众号大部分文章来自作者日常学习笔记 也有部分文章是经过作者授权和其他公众号白名单转载 未经授权 严禁转载 如需转载 联系开白 请勿利用文章内的相关技术从事非法测试 如因此产生的一切不良后果与文章作者和本公众号无关 现在只对常读和星
  • WebRTC建立会话流程分析

    WebRTC建立会话流程总结 了解如何运行PeerConnection Demo后 熟悉运行流程可以做为深入学习WebRTC的切入点 本节重点解释客户端双方建立会话时交互的主要信令 控制会话的文本协议 和与信令相关的 WebRTC API
  • node-sass报错

    我们安装vue项目时 经常遇到nade sass报错 然后切换到某个node版本后不再报错 原因见下文 一 报错内容 二 保存原因 本地nodejs版本跟安装的node sass版本不一致 三 解决办法 1 查看本地node版本 node
  • 使用书签修改视频播放速度(javascript:)

    增加书签 网址输入以下内容 javascript document querySelector video playbackRate 2 0 2 0是2倍速 根据需要自行修改速度 使用方法 打开视频后 点一下书签即可修改视频速度 如果没有改
  • 如何提高训练模型准确率

    8个经过证实的方法 提高机器学习模型的准确率 摘要 本文分享了 8 个经过证实的方法 这些方法用来改善模型的预测表现 它们广为人知 但不一定要按照文中的顺序逐个使用 导语 提升一个模型的表现有时很困难 如果你们曾经纠结于相似的问题 那我相信
  • Android开发指南!2021中级Android开发面试解答,完整版开放下载

    Google 为了帮助 Android 开发者更快更好地开发 App 推出了一系列组件 这些组件被打包成了一个整体 称作 Android Jetpack 它包含的组件如下图所示 老的 support 包被整合进了 Jetpack 例如上图
  • 混合策略纳什均衡——附例题及解析

    目录 引入 混合纳什均衡 例题 求法 引入 假设这样一种对局 甲乙两人抽扑克牌 扑克牌只有两种花色 红和黑 两张牌花色相同算甲胜 反之乙胜 那么甲乙双方应该如何设定自己抽出不同花色的概率呢 比如 设甲抽红牌的概率P 60 那么黑牌概率就是1
  • [架构之路-204]- 常见的需求分析技术:结构化分析与面向对象分析

    目录 前言 1 1 3 需求分析概述 导言 11 3 1需求分析的任务 1 绘制系统上下文范围关系图 2 创建用户界面原型 3 分析需求的可行性 4 确定需求的优先级 5 为需求建立模型 最难的一项任务 SA and OOA 6 创建数据字
  • EMI滤波器设计概念

    EMI滤波器设计概念 1 1 基本概念 在开关电源的设计里 为了对策传导干扰大都会在输入端前端加入EMI滤波器 因传导测试是由AC端来做量测 因此滤波器愈靠近接收器效果愈好 让所有的干扰都可经由滤波器做衰减 而一般滤波器是经由电感与电容组合
  • AMR文件格式的解释

    一 什么是AMR AMR WB 全称Adaptive Multi Rate和Adaptive Multi Rate Wideband 主要用于移动设备的音频 压缩比比较大 但相对其他的压缩格式质量比较差 由于多用于人声 通话 效果还是很不错
  • docker swarm 集群构建及服务管理

    文章目录 一 集群构建及部分配置 1 环境准备 2 swarm 初始化 3 worker子节点加入 4 查看集群信息 1 查看 swarm 集群节点 2 查看各节点 swarm 信息 5 swarm 证书配置 二 集群服务管理 1 创建集群
  • elasticsearch8.2 http开启鉴权

    Elasticsearch 早期的版本配置鉴权 由于插件收费 所以配置起来比较麻烦 但是最近发现Elasticsearch的8 2版本中可以配置https及鉴权的操作 所以记录一下给想要获取该知识的人 分享一下 第一步 修改elastics
  • java导入自定义类_java如何引入自己定义的类,即import语句该如何写?

    我写了2个java的小程序Time java和MyTime java 其内容分别如下 Time java 文件的内容publicclassTime privateinthour privateintminute privateintseco
  • 怎样做自媒体视频剪辑赚钱?

    不想真人出镜 但是想做自媒体赚钱 除了发布图文作品和音频作品外 我们还可以做视频剪辑发布到自媒体平台上 简单的说就是剪辑一些现有的视频作品 重新剪辑成一个新的作品并发布到自媒体平台上获得收益 不说多了 每天收益100 200还是不难的 新手
  • 函数指针做函数参数

    什么是函数指针 当我们定义一个函数的时候 编译器会为这个函数分配一段内存空间 而这段内存空间的首地址就是函数指针 函数指针的定义 函数返回值类型 指针变量名 函数参数列表 int p int int 这个语句就定义了一个指向函数的指针变量
  • python uiautomation mac os_(selenium+python)_UI自动化01_Mac下selenium环境搭建

    前言 Selenium是一个用于Web网页UI自动化测试的开源框架 可以驱动浏览器模拟用户操作 支持多种平台 Windows Mac OS Linux 和多种浏览器 IE Firefox Chrome Safari 可以用多种语言 Java
  • java new file会创建文件吗_Java高级——文件与I/O流

    简介 本文分为四个部分 首先是介绍File类 概括了一下概念 构造方法及常用方法等 其次是描述了面对对象的三大特征 再次是对抽象类进行了简单的概述 最后从特性 使用等等几个方面对接口进行了一定的描述 一 File类 1 File类概念 1
  • STM32F103系列控制的OLED IIC 4针

    最近在研究四针的OLED 先上个效果图 总工程文件评论区留下邮箱我会发送 硬件部分 有开发板的直接用开发板就好 没有的去某宝买一块STM32F103C8T6 10元左右 类似这种 接线部分 OLED一共有四个接口 本别是SCL 时钟 SDA
  • Qt-OpenCV学习笔记--高级形态转换--morphologyEx()

    概述 OpenCV提供了一个综合的形态转换工具 morphologyEx 集成了腐蚀运算 膨胀运算 开运算 闭运算 梯度运算 顶帽运算 黑帽运算 函数 void cv morphologyEx InputArray src OutputAr
  • 【云原生--Kubernetes】Helm 工具安装

    文章目录 一 Helm 概述 1 1 Helm 简介 1 2 Helm重要概念 1 3Helm2 组件 1 4Helm2 工作原理 1 5 Helm2与Helm3区别 二 Helm部署 三 Helm常用命令 3 1 chart仓库管理 3