1. helm简介

1.1 为什么需要helm

在没使用helm之前,向kubernetes部署应用,我们要依次部署deployment,service,configMap等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂.

helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理

1.2 helm中几个概念

Helm可以理解为Kubernetes的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念

  • Chart: 一个Helm包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含Kubernetes集群中的服务定义

可以理解为docker的image

  • Release: 在Kubernetes集群上运行的 Chart的一个实例。在同一个集群上,一个 Chart可以安装很多次。每次安装都会创建一个新的release

可以理解为docker的container实例

  • Repository: 用于发布和存储 Chart 的仓库。

1.3 helm用途

做为Kubernetes的一个包管理工具,Helm具有如下功能:

  • 创建新的chart
  • chart打包成tgz格式
  • 上传chartchart仓库或从仓库中下载 chart
  • Kubernetes集群中安装或卸载chart
  • Helm管理安装的chart的发布周期

2. helm安装

  • 注意:这里安装的是helm v3.2.4,如需下载更新的版本,可以至github官方repo选择

https://github.com/helm/helm/tags

# 如无需更换版本,直接执行下载
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz # 解压
tar -zxvf helm-v3.2.4-linux-amd64.tar.gz # 进入到解压后的目录
cd linux-amd64/ # 赋予权限
chmod a+x /usr/local/bin/helm # 查看版本
helm version

3. helm的基本使用

  • 注意这里的使用是针对Helm v3,因为v3版本和v2某些命令方面差距蛮大的,不完全兼容!!所以针对v2的操作这里就不赘述了

3.1 安装chart仓库里面的chart

可以直接使用官方的chart仓库或者其他仓库来安装一些chart

https://hub.helm.sh

  • 下面以官方仓库的一个redis为例

https://hub.helm.sh/charts/choerodon/redis

# 添加仓库
helm repo add choerodon https://openchart.choerodon.com.cn/choerodon/c7n # 安装
helm install choerodon/redis --version 0.2.5

安装完成! 有没有很简单!!

3.2 创建自定义的chart

这一节介绍以下如何自定义一个chart,并应用与平时项目中

3.2.1 文件目录结构

.
├── Chart.yaml
├── templates
| ├── deployment.yaml
| └── service.yaml
├── values.yaml

一个基本的自定义chart的文件目录结构大概是如上:

  • Chart.yaml: 定义当前chart的基本metadata, 比如name,tag啥的
  • templates: 这个文件夹下放当前chart需要的一些yaml资源清单
    • 资源清单支持变量模版语法
  • values.yaml: 定义变量,可被template下的yaml资源清单使用

3.2.2 自定义chart的示例

第一步: 准备自定义chart相关文件

# 1. 新建一个文件夹demo存放chart
mkdir demo && cd demo && mkdir templates # 2. 新建Chart.yaml
cat << EOF > Chart.yaml
name: hello-world
version: 1.0.0
EOF # 3. 新建./templates/deployment.yaml
# 注意image部分使用了变量的模板语法,可以动态插入
cat << EOF > ./templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tocgenerator-deploy
labels:
app: tocgenerator-deploy
spec:
replicas: 1
selector:
matchLabels:
app: tocgenerator-server
template:
metadata:
labels:
app: tocgenerator-server
spec:
containers:
- name: tocgenerator
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
EOF # 4. 新建./templates/service.yaml
cat << EOF > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
name: tocgenerator-svc
spec:
type: NodePort
selector:
app: tocgenerator-server
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30075
EOF # 5. 新建values.yaml
cat << EOF > values.yaml
image:
repository: lzw5399/tocgenerator
tag: '951'
EOF

第二步: 使用上面的自定义chart

# 将chart实例化成release
# 格式:helm install [RELEASE-NAME] [CHART-PATH]
helm install testname . # 查看release
helm ls # 安装成功!!

3.3 helm的基本操作补充

3.3.1 查看release

# 列出已经部署的Release
helm ls # 查询一个特定的Release的状态
helm status <RELEASE_NAME> # 查看被移除了,但保留了历史记录的release
helm ls --uninstalled

3.3.2 安装release

# 安装
helm install <RELEASE-NAME> <CHART-PATH> # 命令行指定变量
helm install --set image.tag=233 <RELEASE-NAME> <CHART-PATH>

3.3.3 更新release

# 更新操作, flag是可选操作
helm upgrade [FLAG] <RELEASE> <CHART-PATH> # 指定文件更新
helm upgrade -f myvalues.yaml -f override.yaml <RELEASE-NAME> <CHART-PATH> # 命令行指定变量
helm upgrade --set foo=bar --set foo=newbar redis ./redis

3.3.4 卸载release

# 移除Release
helm uninstall <RELEASE_NAME> # 移除Release,但保留历史记录
# 可以通过以下查看:helm ls --uninstalled
# 可以通过以下回滚:helm rollback <RELEASE> [REVISION]
helm uninstall <RELEASE_NAME> --keep-history

3.3.5 回滚release

# 更新操作, flag是可选操作
helm upgrade [FLAG] <RELEASE> <CHART-PATH>

kubernetes系列(十六) - Helm安装和入门的更多相关文章

  1. kubernetes系列(十七) - 通过helm安装dashboard详细教程

    1. 前提条件 2. 配置https证书为secret 3. dashboard安装 3.1 helm拉取dashboard的chart 3.2 配置dashboard的chart包配置 3.3 he ...

  2. Nodejs学习笔记(十六)--- Pomelo介绍&入门

    目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...

  3. Nodejs学习笔记(十六)—Pomelo介绍&入门

    前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...

  4. S3C2416裸机开发系列十六_sd卡驱动实现

    S3C2416裸机开发系列十六 sd卡驱动实现 象棋小子    1048272975 SD卡(Secure Digital Memory Card)具有体积小.容量大.传输数据快.可插拔.安全性好等长 ...

  5. 从0到1使用Kubernetes系列(六):数据持久化实战

    本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...

  6. K8s Helm安装配置入门

    作为k8s现在主流的一种包部署方式,尽管不用,也需要进行一些了解.因为,它确实太流行了. 这一套太极拳打下来,感觉helm这种部署,目前还不太适合于我们公司的应用场景.它更适合需要手工编程各种yaml ...

  7. 学习ASP.NET Core Razor 编程系列十六——排序

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. kubernetes包管理工具Helm安装

    helm官方建议使用tls,首先生成证书. openssl genrsa -out ca.key.pem openssl req -key ca.key.pem -new -x509 -days -s ...

  9. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...

随机推荐

  1. LR脚本信息函数-lr_start_timer和lr_end_timer

    为了计算时间更加精确,可以用这个函数去掉LR自身的检查点所浪费的时间.如text check and image time Action() { double time_elapsed, durati ...

  2. Jmeter基础004----增加参数化

    一.参数化概述 1.参数化概念 参数化就是动态的获取并设置数据,当执行批量操作时,如批量插入或批量删除,之前每执行完一次就需要修改一次,效率太低,参数化可以代替人工获取并设置数据,安全且高效! 2.J ...

  3. JVM 之 Linux定位CPU过高问题及优化

    项目部署以后出行卡顿现象,所以对问题进行了排查,记录一下排查过程 (从CSDN编辑器贴过来的,图有水印) 1.找进程 top 可以发现,是Java进程导致的CPU过高,致使系统卡顿 2.找线程 ps ...

  4. C++ 基于多态的职工管理系统

    职工管理系统 1.管理系统需求 职工管理系统可以用来管理公司内所有员工的信息 本教程主要利用C++来实现一个基于多态的职工管理系统 公司中职工分为三类:普通员工.经理.老板,显示信息时,需要显示职工编 ...

  5. rust 学习之旅二,关键字和保留字

    当前,以下关键字具有所描述的功能. as-执行原始类型转换,消除包含项目的特定特征的歧义,或在useand extern crate语句中重命名项目async-返回a Future而不是阻塞当前线程a ...

  6. Andrew Ng - 深度学习工程师 - Part 1. 神经网络和深度学习(Week 2. 神经网络基础)

     =================第2周 神经网络基础=============== ===2.1  二分分类=== ===2.2  logistic 回归=== It turns out, whe ...

  7. 一文搞懂:Adaboost及手推算法案例

    boosting Boosting 算法的特点在于:将表现一般的弱分类器通过组合变成更好的模型.代表自然就是我们的随即森林了. GBDT和Adaboost是boost算法中比较常见的两种,这里主要讲解 ...

  8. elk5

    在百度指数上面可以看到二者热度的一个对比 es要先建立索引index,才能进行检索 elasticSearch的安装 1.jdk要1.8版本以上,并且每台elasticserach的jdk版本要一致 ...

  9. git 远程分支和tag标签的操作

    git远程分支操作:1.创建远程分支git push --set-upstream origin develop:develop2在服务器创建远程分支devlop2,让本地的develop分支和dev ...

  10. Python表达式与生成式

    Python表达式与生成式 前言 本章节中的所有知识点均为在不丧失代码可读性的前提下最大程度精简代码的一系列操作.其中涉及到一些性能问题(微乎其微)可以不做考虑. 三元表达式 三元表达式中有三个重要的 ...