主页

Helm

1.1 概念

Helm 是 Kubernetes 的包管理器,Helm 可以使用 Charts 启动 Kubernetes 集群,提供可用的工作流:

  • 一个 Redis 集群
  • 一个 Postgres 数据库
  • 一个 HAProxy 边界负载均衡

特性:

  • 查找并使用流行的软件,将其打包为 Helm Charts,以便在 Kubernetes 中运行
  • 以 Helm Charts 的形式共享您自己的应用程序
  • 为您的 Kubernetes 应用程序创建可复制的构建
  • 智能地管理您的 Kubernetes 清单文件
  • 管理 Helm 包的发行版

1.2 先决条件

想成功和正确地使用Helm,需要以下前置条件。

  • 一个 Kubernetes 集群
  • 确定你安装版本的安全配置
  • 安装和配置Helm。

1.3 安装helm

直接下载helm二级制包即可

wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
tar xf helm-v3.6.3-linux-amd64.tar && mv linux-amd64/helm /usr/local/bin

配置命令自动补全

helm completion bash > /etc/bash_completion.d/helm

添加一个Repo,或者从 Artifact Hub中查找有效的Helm chart仓库。

helm repo add bitnami https://charts.bitnami.com/bitnami #bitnami仓库
helm repo add stable https://charts.helm.sh/stable #官方helm仓库

1.4 使用helm

1.4.1 下载后安装(zookeeper)

  • 拉取helm包

    helm pull bitnami/zookeeper
  • 修改values.yaml相应配置:副本数、auth、持久化
  • 安装至k8s集群

    helm install -n public-service zookeeper  .

1.4.2 直接安装(kafka)

helm install kafka bitnami/kafka --set zookeeper.enabled=false --set replicaCount=3 --set externalZookeeper.servers=zookeeper --set persistence.enabled=false -n public-service

1.5 helm基础命令

  • 下载一个包:helm pull
  • 创建一个包:helm create
  • 安装一个包:helm install
  • 查看:helm list
  • 查看安装参数:helm get values
  • 更新:helm upgrade
  • 删除:helm delete

1.6 helm目录结构

helm create helm-test
cd helm-test && tree

├── charts # 依赖文件
├── Chart.yaml # 当前chart的基本信息
    apiVersion:Chart的apiVersion,目前默认都是v2
    name:Chart的名称
    type:图表的类型[可选]
    version:Chart自己的版本号
    appVersion:Chart内应用的版本号[可选]
    description:Chart描述信息[可选]
├── templates # 模板位置
│   ├── deployment.yaml
│   ├── _helpers.tpl # 自定义的模板或者函数
│   ├── ingress.yaml
│   ├── NOTES.txt #Chart安装完毕后的提醒信息
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests # 测试文件
│       └── test-connection.yaml
└── values.yaml #配置全局变量或者一些参数

1.7 Helm内置变量

  • Release.Name: 实例的名称,helm install指定的名字
  • Release.Namespace: 应用实例的命名空间
  • Release.IsUpgrade: 如果当前对实例的操作是更新或者回滚,这个变量的值就会被置为true
  • Release.IsInstall: 如果当前对实例的操作是安装,则这边变量被置为true
  • Release.Revision: 此次修订的版本号,从1开始,每次升级回滚都会增加1
  • Chart: Chart.yaml文件中的内容,可以使用Chart.Version表示应用版本,Chart.Name表示Chart的名称

1.8 Helm常用函数

参考官方文档

trim

去除去除字符两边的空格

trim "   hello    "  // 返回hello

trimAll

从字符串的前面或后面删除给定的字符

trimAll "$" "$5.00" //返回5.00

trimSuffix

去除字符串的指定后缀

trimSuffix "-" "hello-" //返回 hello

title

转换为标题大小写

title "hello world" //返回 Hello World

repeat

重复指定字符

substr

字符切片,需指定start end string

substr 0 5 "hello world" // 返回hello

nospace

从字符串中删除所有空格

nospace "hello w o r l d" //返回helloworld

contains

是否包含指定的字符,返回布尔值

contains "cat" "catch" //返回true

default

如果在value中取不到指定变量,则使用default指定的值

quote/squote

字符加双引号/单引号

cat

将多个字符串连接成一个,用空格隔开

cat "hello" "beautiful" "world" //返回hello beautiful world

indent

将给定字符串中的每一行缩进到指定的缩进宽度。这在对齐多行字符串时很有用

nindent

与 indent 函数相同,但在字符串的开头添加一个新行

1.9 Helm流程控制

控制结构(在模板语言中称为"actions")提供给你和模板作者控制模板迭代流的能力。 Helm的模板语言提供了以下控制结构:

  • if/else, 用来创建条件语句
  • with, 用来指定范围
  • range, 提供"for each"类型的循环

除了这些之外,还提供了一些声明和使用命名模板的关键字:

  • define 在模板中声明一个新的命名模板
  • template 导入一个命名模板
  • block 声明一种特殊的可填充的模板块

If/Else

第一个控制结构是在按照条件在一个模板中包含一个块文本。即if/else块。

基本的条件结构看起来像这样:

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

如果是以下值时,管道会被设置为 false

  • 布尔false
  • 数字0
  • 空字符串
  • nil (空或null)
  • 空集合(map, slice, tuple, dict, array)

在所有其他条件下,条件都为true。

控制空格

模板声明的大括号语法可以通过特殊的字符修改,并通知模板引擎取消空白。{{- (包括添加的横杠和空格)表示向左删除空白, 而 -}}表示右边的空格应该被去掉。 一定注意空格就是换行

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  drink: {{ .Values.favorite.drink | default "tea" | quote }}
  food: {{ .Values.favorite.food | upper | quote }}
  {{- if eq .Values.favorite.drink "coffee" }} #使用{{-取消渲染后的空行
  {{ indent 2 "mug:true" }}
  {{- end }}

修改使用with的范围

如果需要一个部分多次取值,但这部分值都在value的同一个作用域下,可以使用with切换到当前作用域,直接取值即可,而无需指定作用域

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  {{- end }}

使用range操作循环

先在values.yaml文件添加一个披萨的配料列表

favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions

修改模板把这个列表打印到配置映射中

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  {{- end }}
  toppings: |-
    {{- range .Values.pizzaToppings }} #使用range循环
    - {{ . | title | quote }}
    {{- end }}    

渲染的模板为

apiVersion: v1
kind: ConfigMap
metadata:
  name: edgy-dragonfly-configmap
data:
  myvalue: "Hello World"
  drink: "coffee"
  food: "PIZZA"
  toppings: |-
    - "Mushrooms"
    - "Cheese"
    - "Peppers"
    - "Onions"    

1.10 Helm演示项目

rabbitmq-cluster

版权属于:admin
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
0
查看目录

目录

来自 《Helm快速入门》
评论

本篇文章评论功能已关闭

博主很懒,啥都没有
26 文章数
1 评论量
11 分类数
27 页面数
已在风雨中度过 5年175天15小时43分