最近个人学习Helm,感觉Helm的功能很强大!分享一些干货给大家吧,希望有所帮助!

基本概念

Chart

一个Helm包,包含在K8S集群内,运行一个应用,工具或者服务所需要的所有的资源定义,类似于一个RPM包

Repository

Charts在这里被汇集并共享,它有点像Fedora Package Database,但是是用于kubernetes packages

Release

一个Release相当于一个Chart运行在K8S集群中的一个实例,一个Chart可以在相同集群中安装多次,每次安装,一个Release就被创建,例如MySQL chart,如果你想让两个数据库运行在你的集群,你可以安装相同的Chart多次,每一次一个release,它拥有自己的Release名字。

部署

可以参考如下的网站进行安装

https://helm.sh/doc/intro/install/

https://kubeapps.com/doc/getting-started/

Helm基础命令

基础命令篇

添加公有Repo

helm repo add https://charts.bitnami.com/bitnami

添加私有Repo

helm repo add --username=no-user --password admin@123 https://github.bithaha.com/helm

列出Repo

helm repo list

列出已经安装的charts

helm list

  • 注意 默认是查看default命名空间下
  • 若要切换,-n namespace即可,如:

helm list -n abc

搜索Repo

helm search repo nginx

安装helm包

helm install bitnami-nginx bitnami/nginx

  • 注意 默认是安装到default命名空间下
  • 若指定命名空间,请务必确保命名空间存在的情况之下再指定 :

helm install bitnami-nginx bitnami/nginx -n abc

helm设置参数

设置参数

helm install bithaha bithaha/test-helm --version 0.1.0 --set replicaCount=2,image.tag=1.21

这段意思大概是安装一个test-helm,版本是0.1.0,设置副本数量为2,images的版本是1.21

查看参数

helm get values test-helm

重置一下value

helm upgrade bithaha bithaha/test-helm --reset-values

显示所有的values

helm get values -a bithaha

helm创建自己的charts

创建chart

helm create qqq-helm

检查chart

helm lint qqq-helm

打包chart

helm package qqq-helm

Helm模板

官方文档

https://helm.sh/docs/chart_temlpate_guide/getting_started/

chart默认结构

tree qqai-helm
qqai-helm
|
>charts
>chart.yaml
>templates
——》 deployment.yaml
——》 _helpers.tpl
——》 hpa.yaml
——》 ingress.yaml
——》 NOTES.txt
——》 serviceaccount.yaml
——》 service.yaml
——》 tests
>test-connection.yaml
>values.yaml

templates目录

# 目录结构
>templates
——》 deployment.yaml
——》 _helpers.tpl
——》 hpa.yaml
——》 ingress.yaml
——》 NOTES.txt
——》 serviceaccount.yaml
——》 service.yaml
——》 tests
>test-connection.yaml

templates实战

1、在templates目录中创建一个configmap的YAML文件

cat >/root/qqai-helm/templates/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "fook"
EOF

2、测试模板可用性

helm install --debug --dry-run qqai-helm-demo ./qqai-helm

常用的对象说明

Release

Release.Name: Install的时候的名称

Release.Namespace: 命名空间,这个没啥好解释的,默认值是default

Release.IsUpgrade:是升级,如果true那就升级了。

Values,Chart

Values: 来自于values.yaml中定义的参数,默认的Value是空值的

Chart: 来自于Chart.yaml中定义的参数,可以根据需要灵活搭配

Values文件

Values来自于多个源,下面是覆盖顺序,最后的优先

  • Chart中的values.yaml文件
  • 子Chart中的values.yaml文件
  • 。。。。。。

Values实战

cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name }}
fruit: {{ .Values.shuiguo }}
EOF

验证一下吧

helm install --debug --dry-run qqai-helm-demo ./qqai-helm

模板函数与管道符

引用上述的案例吧

cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name }}
fruit: {{ .Values.shuiguo }}
EOF

若将上述案例添加相关的函数,可以像下面这样的做法

cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name |repeat 5 }}
age: {{ .Values.mingzi.age |default "18" }}
fruit: {{ .Values.shuiguo | upper | quote}}
EOF

流程控制概述

可以通过流程控制来控制helm的逻辑流程,保证部署的正确性。

流程控制-if/else: 如果或者

基本格式

{{ if PIPELINE }}
# Do something
{{ else if OTHER PIPELINE }}
# Do something
{{ else }}
# Default case
{{ end }}

范例

还是请我们老演员登场

cat /root/qqai-helm/values.yaml <<EOF
banben: v1
shuiguo: apple
mingzi:
name: zhangsan
# age: 30
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
name: {{ .Values.mingzi.name |repeat 5 }}
age: {{ .Values.mingzi.age |default "18" }}
fruit: {{ .Values.shuiguo | upper | quote}}
{{ if eq .Values.mingzi.age "30" }}mug: "true"{{ end }}
EOF

流程控制-with: 指定一个范围

这里需要一个范例来解释下with的具体含义

cat /root/qqai-helm/values.yaml <<EOF
mingzi:
name: zhangsan
age: ten
EOF cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- with .Values.mingzi }}
name: {{ .name|default "lisi"|quote }}
age: {{ .age |upper|quote }}
{{- end }}
EOF

错误示范:

cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: {{ .Values.banben}}
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
{{- with .Values.mingzi }}
name: {{ .name|default "lisi"|quote }}
age: {{ .age |upper|quote }}
release: {{ .Release.Name }}
{{- end }}
EOF

流程控制-range: For循环

下面演示range如何循环起来

Values.yaml

cat /root/qqai-helm/values.yaml <<EOF
mingzi:
name: zhangsan
age: ten
job:
- sales
- engineer
- guestserver
EOF

configmap.yaml

cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}
data:
config: prometheus
{{- with .Values.mingzi }}
name: {{ mingzi|upper }}
{{- end}}
group: |-
{{- range .Values.job }}
- {{ .|title|quote }}
{{- end}}
EOF

Helm之变量--Variables

下面一个示范教你如何来定义变量

# 普通的定义
cat /root/qqai-helm/configmap.yaml <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
config: "hello world"
{{- $relname :=.Release.Name -}}
{{- with .Values.favorite }}
drink: {{ .drink|default "coka" |quote }}
release: {{ $relname }}
{{- end}}

Templates

下面案例可以告诉你怎么定义这个模板

# 定义一个模板
{{- define "qqai-helm.labels" }}
labels:
generator: helm
date: {{ now | htmlDate }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
name:{{ .Release.Name }}-configmap
# 此处引用模板
{{- template "qqai-helm-labels" }}
data:
myvalue: "hello world"
一定注意格式,一定注意格式,一定注意格式

NOTES.txt

帮助信息,在安装时可以提醒用户如何操作,随便写写就好,要让用户明白即可。

最后希望大家在写的过程中一定注意格式!注意格式!注意格式!第一次写,希望各位有所收货。

Helm干货!速度围观!的更多相关文章

  1. Kubernetes笔记(三):Gitlab+Jenkins Pipeline+Docker+k8s+Helm自动化部署实践(干货分享!)

    通过前面两篇文章,我们已经有了一个"嗷嗷待哺"的K8s集群环境,也对相关的概念与组件有了一个基本了解(前期对概念有个印象即可,因为只有实践了才能对其有深入理解,所谓"纸上 ...

  2. 干货分享:SQLSERVER使用裸设备

    干货分享:SQLSERVER使用裸设备 这篇文章也适合ORACLE DBA和MYSQL DBA 阅读 裸设备适用于Linux和Windows 在ORACLE和MYSQL里也是支持裸设备的!! 介绍 大 ...

  3. 记录我这一年的技术之路(nodejs纯干货)

    2015年12月28日23:19:54 更新koa应用.学习型网站和开发者工具等 coding伊始 开始认认真真的学习技术还是2015.10.21日开始的,记得很清楚,那天,是我在龙湖正式学习的第一天 ...

  4. AFNetworking 3.0 源码解读 总结(干货)(下)

    承接上一篇AFNetworking 3.0 源码解读 总结(干货)(上) 21.网络服务类型NSURLRequestNetworkServiceType 示例代码: typedef NS_ENUM(N ...

  5. [干货]Chloe官网及基于NFine的后台源码毫无保留开放

    扯淡 经过不少日夜的赶工,Chloe 的官网于上周正式上线.上篇博客中LZ说过要将官网以及后台源码都会开放出来,为了尽快兑现我说过的话,趁周末,我稍微整理了一下项目的源码,就今儿毫无保留的开放给大家, ...

  6. 干货!IT小伙伴们实用的网站及工具大集合!持续更新!

    1.Git 还在担心自己辛辛苦苦写的代码被误删了吗?还在担心自己改错了代码不能挽回吗?还在苦恼于多人开发合作找不到一个好的工具吗?那么用Git就对 了,Git是一个开源的分布式版本控制系统,用以有效. ...

  7. Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

    接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理. 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下 ...

  8. PHP干货技巧文,一些PHP性能的优化

    PHP优化对于PHP的优化主要是对php.ini中的相关主要参数进行合理调整和设置,以下我们就来看看php.ini中的一些对性能影响较大的参数应该如何设置. # vi /etc/php.ini (1) ...

  9. 继续送假期干货——响应式图片工具smartImg

    中午看<众妙之门>看到一个响应式图片处理工具(点此查看)的介绍,然后就心血来潮想着不妨自己写一个基于JQ的吧,于是就又有了这么一个干货给大家. smartImg 的全部文件可以从我的Git ...

随机推荐

  1. java方法---可变参数

    可变参数 在方法的声明中,在指定参数类型后面加一个...(省略号) 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数必须在它之前声明:

  2. Postfix别名邮件与SASL验证

    Postfix别名邮件与SASL验证 环境简介 系统: CentOS 8.3.2011 软件包: postfix-2:3.3.1-12.el8.x86_64 cyrus-sasl-2.1.27-5.e ...

  3. 存储更弹性,详解 Fluid “ECI 环境数据访问” 新功能

    近期,Fluid 支持了阿里云 ECI 应用,并将 JuiceFS Runtime Controller 设置为默认安装:JuiceFS 也就此功能与 Fluid 完成了集成和测试工作. 用户可以在 ...

  4. webgl(three.js)实现室内三维定位,3D定位,3D楼宇bim、实时定位三维可视化解决方案——第十四课(定位升级版)

    序: 还是要抽出时间看书的,迷上了豆豆的作品,最近在看<天幕红尘>,书中主人公的人生价值观以及修为都是让我惊为叹止.很想成为那样的人,但是再看看自己每天干的事,与时间的支配情况,真是十分的 ...

  5. 2021年3月-第01阶段-Linux基础-Linux系统概念-Linux命令

    Linux系统基本概念 图形界面: Ctrl+Shift +号 //调整命令终端变大 Ctrl - 号 //调整命令终端变小 命令终端: ~ 家目录:用户的私有场所,其他用户不能随便访问 root超级 ...

  6. 聊聊计算机之Intel CPU的MESI协议

    1.on-chip概念 on-chip:每个CPU有好几个物理核,它们分布在CPU上,称为on-chip on-chip first cache:每个核内的一级缓存 on chip branch ta ...

  7. Python实验报告——第2章 Python语言基础

    实验报告 [实验目的] 1.熟悉在线编程平台. 2.掌握基本的 python 程序编写.编译与运行程序的方法. [实验条件] 1.PC机或者远程编程环境 [实验内容] 1.完成第二章实例01-07,实 ...

  8. 分布式MinIO快速入门

    官方文档地址:http://docs.minio.org.cn/docs/master/distributed-minio-quickstart-guide Minio服务基于命令行传入的参数自动切换 ...

  9. C# 使用原生 System.IO.Compression 实现 zip 的压缩与解压

    zip 是一个非常常见的压缩包格式,本文主要用于说明如何使用代码 文件或文件夹压缩为 zip压缩包及其解压操作, 我们采用的是 微软官方的实现,所以也不需要安装第三方的组件包. 使用的时候记得 usi ...

  10. 关于使用git传输文件到GitHub

    git status(查看本地git仓库情况) git add "文件名(精确到文件拓展名)" git commit -m "说明"(提交到上传缓存区域) gi ...