一、什么是 Helm

https://github.com/helm/helm/blob/master/docs/charts.md

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随

着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本

管理和控制,很大程度上简化了 Kubernetes 应用的部署和管理

Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清

单文件(deployment.yaml,service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署

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

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

Helm 包含两个组件:

  • Helm 客户端
  • Tiller 服务器

如下图所示

Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。

Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互

二、Helm 部署

越来越多的公司和团队开始使用 Helm 这个 Kubernetes 的包管理器,我们也将使用 Helm 安装 Kubernetes 的常用组件。

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: tillernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: tiller
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:- kind: ServiceAccountname: tillernamespace: kube-system

kubectl create -f rbac-config.yamlserviceaccount/tiller createdclusterrolebinding.rbac.authorization.k8s.io/tiller created
helm init --service-account tiller --skip-refresh

在其他机器下载这个镜像试试(需要能够上外。网)

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

kubectl get pod -n kube-system -l app=helmNAME READY STATUS RESTARTS AGE
tiller-deploy-c4fd4cd68-dwkhv 1/1 Running 0 83s
helm versionClient: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4",
GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4",
GitTreeState:"clean"}

四、Helm 自定义模板

# 创建文件夹
$ mkdir ./hello-world
$ cd ./hello-world
# 创建自描述文件 Chart.yaml , 这个文件必须有 name 和 version 定义
$ cat <<'EOF' > ./Chart.yaml
name: hello-world
version: 1.0.0
EOF
# 创建模板文件, 用于生成 Kubernetes 资源清单(manifests)
$ mkdir ./templates
$ cat <<'EOF' > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: hello-world
spec:replicas: 1template:metadata:labels:app: hello-worldspec:containers:- name: hello-worldimage: hub.atguigu.com/library/myapp:v1ports:- containerPort: 80protocol: TCP
EOF
$ cat <<'EOF' > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:name: hello-world
spec:type: NodePortports:- port: 80targetPort: 80protocol: TCPselector:app: hello-world
EOF
# 使用命令 helm install RELATIVE_PATH_TO_CHART 创建一次Release
$ helm install .

# 列出已经部署的 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 的记录
$ helm delete --purge cautious-shrimp
$ helm ls --deleted

修改helm

# 配置体现在配置文件 values.yaml
$ cat <<'EOF' > ./values.yaml
image:repository: gcr.io/google-samples/node-hellotag: '1.0'
EOF# 这个文件中定义的值,在模板文件中可以通过 .VAlues对象访问到
$ cat <<'EOF' > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:name: hello-world
spec:replicas: 1template:metadata:labels:app: hello-worldspec:containers:- name: hello-worldimage: {{ .Values.image.repository }}:{{ .Values.image.tag }}ports:- containerPort: 8080protocol: TCP
EOF

# 在 values.yaml 中的值可以被部署 release 时用到的参数 --values YAML_FILE_PATH 或 --set
key1=value1, key2=value2 覆盖掉
$ helm install --set image.tag='latest' .# 升级版本
helm upgrade -f values.yaml test .

删除

五、Debug

# 使用模板动态生成K8s资源清单,非常需要能提前预览生成的结果。
# 使用--dry-run --debug 选项来打印出生成的清单文件内容,而不执行部署
helm install . --dry-run --debug --set image.tag=latest

内容来自https://study.163.com/course/courseMain.htm?courseId=1209568805

kubernetes视频教程笔记 (33)-什么是 Helm相关推荐

  1. Kubernetes之(二十)Helm程序包管理器

    目录 Kubernetes之(二十)Helm程序包管理器 概念 部署Helm 下载helm 部署Tiller helm的使用 chart 目录结构 chart模板 定制安装 MySQL chart c ...

  2. Kubernetes学习笔记

    Kubernetes学习笔记 1.简介 用于自动部署.扩缩和管理容器化应用程序的开源系统,支持自动化部署.大规模可伸缩. 2.架构 2.1.Control Plane 对集群做出全局决策 Contro ...

  3. Kubernetes学习笔记【2年以前的笔记】

    Kubernetes学习笔记 知识储备 熟悉linux基础命令 熟悉docker的基本原理和操作 了解ssl证书工作原理 了解负载均衡工作原理(L4/L7) 了解分布式概念 了解域名解析原理 了解网络 ...

  4. Kubernetes学习笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes学习笔记(一) 博客分类: Kubernetes 导语 2015年4月,传闻已久的Borg论文伴随Kube ...

  5. kubernetes学习笔记 (二):k8s初体验

    本文采用本地k8s v1.10.3版本开发,如果还没有搭建可参照 kubernetes学习笔记 (一):搭建本地k8s开发环境进行搭建 搭建本地Docker镜像仓库 docker pull docke ...

  6. Kubernetes持续交付-Jenkins X的Helm部署

    Jenkins X 是一个集成化的 CI / CD 平台,可用于 部署在Kubernetes集群或云计算中心.支持在云计算环境下简单地开发和部署应用.本项目是在Kubernetes上的安装支持工具集. ...

  7. Kubernetes学习笔记之Calico CNI Plugin源码解析(一)

    女主宣言 今天小编为大家分享Kubernets Calico CNI Plugin的源码学习笔记,希望对正在学习k8s相关部分的同学有所帮助: PS:丰富的一线技术.多元化的表现形式,尽在" ...

  8. 笔记33 笨办法学python练习40之二:类和对象

    笔记33 笨办法学python练习40之二:类和对象 类和模块差不多么?把这个练习继续往下做,看是否真有如此结果.刚刚对模块有了点感觉,加上这个类class也是要创建,但这个练习所创建的class M ...

  9. 燕十八php笔记_燕十八ph视频教程笔记(PHP基础部分).doc

    燕十八ph视频教程笔记(PHP基础部分) 001-开学典礼 002-变量概念及命名规范 <?php //?$a?是钥匙[107房间],?房间里的内容是值, /* echo?$a,?什么过程? 根 ...

  10. 51自学网-Java基础视频教程-笔记 最后修改于2020/9/9

    Java基础视频教程笔记 简介 正文 ==JVM Java Virtual Machine== 栈区 Stack Segment 堆区 Heap Segment 静态区 Data Segment 代码 ...

最新文章

  1. TensorRT原理图示
  2. 创建、添加字段IFields
  3. STM32 LED灯的另一种写法
  4. MySQL 内连接查询
  5. python绘制余弦曲线散点图_python中如何用matlibplot画正弦曲线?
  6. Spatial Pyramid 小结
  7. 电路原理 邱关源 第五版 课后习题答案 课后习题详解
  8. 文华财经期货K线多周期画线技术,多重短线技术共振通道线指标公式——多周期主图自动画线
  9. 关于ubantu安装cmake
  10. 观李永乐《皇帝的新衣》后感以及红蓝眼悖论解题思路
  11. 【强制转换】 | PTA 7.1厘米换算英尺英寸
  12. Windows高级工程师:GDI+绘图;基础入门大全
  13. jquery嘎嘎嘎嘎嘎嘎
  14. 【win11】解决win11家庭版没有组策略编辑器
  15. ubuntu无法使用man
  16. 洛谷P1751贪吃虫
  17. C++类与对象练习题——日期类
  18. 20200523_01_Multisim14.2+仿真+入门
  19. 从零讲起:ESP32+Micropython+MQTT阿里云物联网
  20. The 2022 ICPC Asia Regionals Online Contest (II) J

热门文章

  1. Opencv+C++之人脸识别
  2. 一份数据工程师必备的学习资源,干货满满(附链接)
  3. js 使用Math函数取得数组最大最少值
  4. vb 字符串和数字相互转换函数
  5. 计算机科学现代教育,现代教育技术教程-计算机科学教育.pdf
  6. 布隆的盾能挡机器人_2020 年双十一有哪些扫地机器人值得买?
  7. adb工具箱_安卓福音,史上最强搞机工具箱,一键修手机
  8. 拓端tecdat|WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较
  9. 拓端tecdat|R语言rjags使用随机效应进行臭氧数据分析
  10. linux mysql 配置root_Linux配置(mysql安装篇)