0、安装Helm
安装Helm
下载helm安装包,releases
解压tar.gz文件
mv linux-amd64/helm /usr/bin/helm
接着就可以使用helm。
一、 什么是Helm
Helm是针对K8s的包管理器,使得打包、配置、部署应用/微服务到K8s集群中,变得简单容易。如果没有Helm, K8s的各种资源相互依赖,必须被手动的创建,这样将会复杂又浪费时间。 Helm由1个命令行的Helm client组成, 用户可以通过命令行的helm client去接入Kubernets API server。 用户的Helm permissions通过用户的kubeconfig file进行配置和定义。
Helm所使用的打包格式叫Chart。1个Chart是一系列文件的集合,定义了部署微服务所需要的k8s resources。所有的chart文件被添加到1个目录中,这个目录的名字就是helm chart的名字。
Example:
tree
.
├── Chart.yaml
├── README.md
├── templates
│ ├── Kafka-zk-tls-cert-client.yaml
│ ├── _helpers.tpl
│ ├── _logshipper-helpers.tpl
│ ├── configmap.yaml
│ ├── kafka-client-ca-certificate.yaml
│ ├── kafka-client-client-ca-certificate.yaml
│ ├── kafka-server-certificate.yaml
│ ├── kafka-ss.yaml
│ ├── kafka-svc-client.yaml
│ ├── kafka-svc.yaml
│ ├── logshipper-configmap.yaml
│ ├── logshipper-tls-cert-lt-client.yaml
│ ├── pdb.yaml
│ ├── rolebinding.yaml
│ ├── sasl-secret.yaml
│ ├── service-account.yaml
│ └── service-nodeport.yaml
├── values.schema.json
└── values.yaml
1 directory, 21 files
1) 必须的文件
Chart.yaml 描述chart, chart的name和version必须被定义。
values.yaml 包含chart的所有参数和默认值,默认值可以被覆盖,当微服务部署的时候。
2)可选的文件
LICENSE 普通的明文表示license的信息。
README.md 1个README文件。
requirements.yaml 列出对于其他charts的依赖。
子目录templates下面包含以下文件:
YAML-files: 定义要create的k8s resources。
NOTES.txt: 当chart部署的时候,显示的文本。
_helpers.tpl:可以用到YAML-files中templates
二、Helm是如何工作的
每当执行Helm install命令,charts被发送给Helm中的Go template 渲染机,解析chart结构。提供chart的方式由.tar.gz文件或者目录。
当Helm命令执行的时候,chart可以存储到本地也可以是remote repo。通过templates files, Helm对象被创建在机器中,使得通过helm对象去访问templates之间的values提供了可能。
YAML-files最终被生成,helm调用适当的k8s api去创建resource,就像chart中所定义/指定的那样。
Helm对象有:
Chart:Chart.yaml 的内容
Values:values.yaml文件提供的传给template的和用户提供的(用户提供指的是通过helm install or helm upgrade操作提供。)
Release:release对象本身。release name和类似的东西,这些可以在deploy时候被创建,通过release对象被访问到。
Files:用该对象访问/接入charts中除template files外的一般文件。
Capabilities:k8集群的Capabilities,包含类似于k8s版本信息的东西。
Template:主要是关于当前正在执行的template的信息。
更多helm内置对象,https://helm.sh/docs/chart_template_guide/#built-in-objects
Helm简单的命令:
helm list
helm status serviceName
helm get all serviceName
helm upgrade
helm history serviceName
helm rollback serviceName 1
helm version
version.BuildInfo{Version:"v3.6.2", GitCommit:"ee407bdf364942bcb8e8c665f82e15aa28009b71", GitTreeState:"clean", GoVersion:"go1.16.5"}
helm --help
The Kubernetes package manager
........
export NAMESPACE="schema-registry-sr-install"
helm list -n $NAMESPACE
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
eric-data-coordinator-zk eric-schema-registry-sr-install 1 2021-07-20 16:42:13.0619995 +0800 CST deployed eric-data-coordinator-zk-1.17.0+17
eric-data-message-bus-kf eric-schema-registry-sr-install 1 2021-08-12 20:57:50.0334071 +0800 CST deployed eric-data-message-bus-kf-1.16.0+27
kubectl get pods -n $NAMESPACE
NAME READY STATUS RESTARTS AGE
eric-data-coordinator-zk-0 1/1 Running 56 98d
eric-data-message-bus-kf-0 1/1 Running 45 75d
eric-data-message-bus-kf-1 1/1 Running 42 75d
eric-data-message-bus-kf-2 1/1 Running 42 75d
三、Helm chart设计原则(如何创建简单的Helm chart)
https://docs.bitnami.com/kubernetes/how-to/create-your-first-helm-chart/