Helm 入门指南
Helm 为Kubernetes的软件包管理工具,Helm有两部分组成:Helm客户端、Tiller服务端,Helm三个主要部件:Chart、仓库、Release;
Chart:为Kubernetes中应用程序所需要的资源的定义。
仓库:为存储Helm chart的仓库,可从仓库中下载chart直接使用
Release: Kubernetes中运行的chart实例,每个chart可多次安装,每次安装都是一个新版本;
Helm 常见指令:
helm search 在仓库中查找chart
helm inspect stable/mongodb 可查看该chart的介绍信息;
helm install stable/mongodb 可直接下载该chart并安装该chart;
版本升级:
helm upgrade releaseName .
helm rollback releaseName 1 回滚到版本1
从零开始通过helm发布Kubernetes项目:
一、结构介绍
初始化项目:
helm create nginx
执行完后创建名为nginx的chart,现在查看nginx目录中的文件:
charts:目录用于存放所依赖的子chart
chart.yaml:为当前chart的说明文件,也可在模板中访问该文件;
templates:目录为nginx项目的模板目录,通常会使用values.yaml配置内容进行填充,板引擎渲染此目录的文件后Tiller将渲染得到的结果 提交给Kubernetes创建响应的对象;
values.yaml:为值文件,定义模板中需要使用的值,在templates的模板文件中将访问改值;
在templates目录中有可以看到deployment.yaml、ingress.yaml、service.yaml文件这些为定义Kubernetes deployment、ingress、service对象的模板文件;
NOTES.txt:为安装chart成功后的说明文件
_helpers.tpl:模板助手文件,定义的值可在模板中使用;
二、通过helm在Kubernetes中部署Nginx
1、helm 初步使用
现在删除template目录中的所有文件、清空values.yaml文件中所有内容
部署nginx需要一个deployment控制器与对外提供服务的service,现在我们分别手动创建这个两个文件并编写相关内容;
deployment.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- port: 80
nodePort: 30078
此时我们在上级目录执行:helm install nginx 已经可以将nginx部署到Kubernetes中;
但如果只是这样使用Helm,那它存在的意义也不大,既然说template目录是模板目录当然它里面的模板文件也不能只是这么使用,要让模板文件体现出它的模型性质;下面我们将使用Helm的模板等功能,让模板文件体现出他的模板性质;
2、helm 模板
目前为止deployment.yaml与service.yaml虽然是放在模板目录下但是完全没有体现出他的模板性质,现在我们开始这两个文件的模板化;
模板语法基础:
内置对象:helm中有这么这个常用内置对象:Release、Values、Chart、Files、Capabilities、Template;
Release:此对象描述当前release,内置有:Release.Name release名称、Release.Time 发布时间等等等对面;
Values:此对象为从values.yaml文件与用户提供的文件中传递到模板的对值对象;
Chart:此对象为chart.yaml文件所提供的数据对象;
Files:提供了对chart非特殊文件的访问;
Capabilities:这提供了Kubernetes集群信息的访问;
Template:正在执行的当前模板信息
下面我们通过helm内置对象Values来实现deployment.yaml、service.yaml文件的模板化,Values对象的取值范围:
1、当前chart的values.yaml文件;
2、如当前为子chart,则来自父chart的values.yaml文件;
3、在helm install或helm update执行是通过-f参数传递的文件;
4、通过helm install 时通过 –set设置的值;
如values.yaml文件中存在replicaCount: 1对象,则在模板文件中通过{{ .Values.replicaCount }}即可访问到values.yaml文件定义的对象值1;
通过_helpers.tpl可定义命名模板,下面定义模板deploy.name
{{- define "deploy.name" -}}
demo-deploy-nginx
{{- end }}
其中:{{ - 表示删除左侧的空格 - }} 删除右侧的空格
此时可在模板文件中通过{{ template "deploy.name" . }} 引用该命名模板;
实现模板化:
提取需要模板化的数据,这里提取出deployment对象的name、labels、replicas、matchLabels、template的labels、template spec的name、image;service对象的name、selector labels、type、port、nodePort等配置;
我们再从提取出来的配置中挑选出name类与labels类配置定义为命名模板存放在_helpers.tpl文件中,其他的配置项定义在Values.yaml文件中;
_helpers.tpl文件内容如下:存放了deploy名称、service名称、deploy的lables、deploy中pod的lables;
{{- define "deploy.name" -}}
demo-deploy-nginx
{{- end }}
{{- define "service.name" -}}
demo-service-nginx
{{- end }}
{{- define "labels" -}}
demo: nginx
{{- end}}
{{- define "deploy.labels" -}}
deploy: nginx
{{- end}}
values.yaml 文件,此文件定义了副本数、镜像名称与版本、service类型、端口等:
# 定义模板默认值
replicaCount: 1
image:
repository: nginx
tag: 1.7.9
service:
type: NodePort
port: 80
nodePort: 30078
值文件定义好了此时需要在模板deployment、service文件中引用上述两个文件所定义的值,下面开始重构deployment.yaml与service.yaml文件:
service.yaml文件:
apiVersion: v1
kind: Service
metadata:
name: {{ template "service.name" . }}
spec:
selector:
{{ template "labels" . }}
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
nodePort: {{ .Values.service.nodePort }}
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ template "deploy.name" . }}
labels:
{{ template "deploy.labels" .}}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{ template "labels" . }}
template:
metadata:
labels:
{{ template "labels" . }}
spec:
containers:
- name: {{ .Chart.Name}}
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
ports:
- containerPort: 80
模板文件编写好后可以再重新使用Helm install部署nginx试试,执行前先执行helm delete running-chipmunk卸载掉之前安装的;
参考资料: https://docs.helm.sh/
文章首发地址:Solinx
http://www.solinx.co/archives/1247
Helm 入门指南的更多相关文章
- Kubernetes Helm入门指南
什么是Helm?这可不是暗黑破坏神里装备的名称:头盔,而是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.我们Helm和Kubernetes的关系,我们可以理解成y ...
- Activiti 工作流入门指南
概览 如我们的介绍部分所述,Activiti目前分为两大类: Activiti Core Activiti Cloud 如果你想上手Activiti的核心是否遵循了新的运行时API的入门指南:Acti ...
- Web API 入门指南 - 闲话安全
Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- yii2实战教程之新手入门指南-简单博客管理系统
作者:白狼 出处:http://www.manks.top/document/easy_blog_manage_system.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文 ...
- 【翻译】Fluent NHibernate介绍和入门指南
英文原文地址:https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started 翻译原文地址:http://www.cnblogs ...
- ASP.NET MVC 5 入门指南汇总
经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章言简意赅,篇幅适中,从一个web网站示例开始讲解 ...
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
我们在前一篇文章微软新神器-Power BI,一个简单易用,还用得起的BI产品中,我们初步介绍了Power BI的基本知识.由于Power BI是去年开始微软新发布的一个产品,虽然已经可以企业级应用, ...
- 一起学微软Power BI系列-官方文档-入门指南(2)获取源数据
我们在文章: 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍中,我们介绍了官方入门文档的第一章.今天继续给大家介绍官方文档中,如何获取数据源的相关内容.虽然是英文,但 ...
随机推荐
- 堆,set,优先队列
当我们需要高效的完成以下操作时: 1.插入一个元素 2.取得最小(最大)的数值,并且删除 能够完成这种操作的数据结构叫做优先队列 而能够使用二叉树,完成这种操作的数据结构叫做堆(二叉堆) 堆与优先队列 ...
- rabbitmq - (消息队列) 的基本原理介绍
介绍 MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订 ...
- Oracle SQL性能优化总结
1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 >选择数据的搜索路径 >运行“执 ...
- SpringSecurity的配置分析
在分析SpringSecurity前,基于多年前使用SpringSecurity和近年来使用Shiro的经验, SpringSecurity这些年在发展和SpringBoot整合之后,也逃不出以下的一 ...
- linux 清空catalina.out日志 不需要重启tomcat(五种方法)【转】
1.重定向方法清空文件 [root@localhost logs]# du -h catalina.out 查看文件大小17M catalina.out[root@localhost logs] ...
- 0ctf 2019 zero_task
一个条件竞争的洞,以前没有接触过.比赛完研究了wp复现下. new_thread结构体如下 new_thread: thread_area size0x8 thread_area+0x8 size 0 ...
- 帆软报表(finereport)使用row_number ()进行组内排序
ROW_NUMBER()函数将针对SELECT语句返回的每一行,从1开始编号,赋予其连续的编号.在查询时应用了一个排序标准后,只有通过编号才能够保证其顺序是一致的,当使用ROW_NUMBER函数时,也 ...
- [HASH]MOD运算用户哈希函数
一.概述 MOD(取模)运算配合质数的特性,可以实现一种简单的哈希算法. 二.基于的定理 在理解如何实现mod哈希前应当了解一些数学的定理: 1.x mod y = z ,实际上是x除以y的余数y的意 ...
- Mysql配置优化,库表设计
Mysql 服务器参数类型: 基于参数的作用域: 全局参数:set global autocommit = ON/OFF; 会话参数(会话参数不单独设置则会采用全局参数):set session au ...
- 末学者笔记——SAMBA服务、FTP服务讲解
samba服务 一.概念: Smb主要作为网络通信协议; Smb是基于cs(client,sever)架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 二. ...