一、Helm 简介

Helm 是 Kubernetes 的包管理工具,用于创建、打包和部署应用程序。它使用称为 Chart 的打包文件来描述 Kubernetes 资源对象的集合,从而简化了 Kubernetes 应用程序的部署和管理。

二、Helm 包含两个组件:

Helm 客户端:用于创建、打包和部署 Chart。

Tiller 服务器:在 Kubernetes 集群中运行,负责管理已安装的 Chart。(Helm 3 中,Tiller 服务器被移除,因此不再需要单独安装 Tiller)

Helm 客户端与 Tiller 服务器通过 Kubernetes API 通信,以创建、更新和删除 Kubernetes 资源对象。

三、安装Helm

1. 安装Helm客户端

安装包地址:https://github.com/helm/helm/releases

Kubernetes集群(版本为1.8或更高版本)
kubectl命令行工具
curl命令行工具
首先,我们需要从Helm官方网站下载Helm二进制文件。请根据您的操作系统下载相应的二进制文件。例如,在Linux系统上,我们可以使用以下命令来下载Helm v3.7.0:
curl https://get.helm.sh/helm-v3.7.0-linux-amd64.tar.gz -o helm.tar.gz
然后,我们需要将二进制文件解压缩并将可执行文件移动到系统路径中。例如,在Linux系统上,我们可以使用以下命令:
tar -zxvf helm.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm

验证是否成功安装

'version.BuildInfo{Version:"v3.7.0", GitCommit:"eeac83883cb4014fe60267ec6373570374ce770b", GitTreeState:"clean", GoVersion:"go1.16.8"}

2.创建Chart

创建一个nginx的chart

[root@longxi-01 home]# helm create nginx
Creating nginx

查看结构

[root@longxi-01 home]# tree nginx/
nginx/
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

3 directories, 10 files

Chart.yaml: Chart的元数据,包括Chart名称、版本、描述、维护者等信息。
values.yaml: 包含Chart的默认值和配置选项。使用者可以通过自定义values来覆盖默认值。
charts/: 包含Chart所依赖的其他Chart。这些依赖项也称为子Chart。
templates/: 包含Kubernetes资源的模板文件。这些模板文件使用Go语言的模板引擎来渲染Kubernetes YAML文件。
helpers/: 包含一些通用的Go语言模板文件,可以在其他模板文件中重用。
LICENSE: Chart的许可证。
README.md: Chart的文档,包括如何使用Chart、如何配置Chart等等。
下面是一些常用的目录和文件:
templates/deployment.yaml: 用于定义Kubernetes Deployment资源的模板文件。
templates/service.yaml: 用于定义Kubernetes Service资源的模板文件。
templates/ingress.yaml: 用于定义Kubernetes Ingress资源的模板文件。
templates/configmap.yaml: 用于定义Kubernetes ConfigMap资源的模板文件。
templates/secret.yaml: 用于定义Kubernetes Secret资源的模板文件。
values.yaml: 包含Chart的默认值和配置选项。使用者可以通过自定义values来覆盖默认值。
Chart.yaml: Chart的元数据,包括Chart名称、版本、描述、维护者等信息。

配置并启用Chart

接下来,我们需要配置 Chart,指定应用名称、镜像等信息。在 nginx 目录下,打开 values.yaml 文件,将其修改为如下内容:

replicaCount: 1

image:
  repository: nginx
  tag: stable
  pullPolicy: IfNotPresent

nameOverride: ""
fullnameOverride: ""

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: false
  annotations: {}
  path: /
  hosts:
    - chart-example.local
  tls: []

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

nodeSelector: {}

tolerations: []

affinity: {}

启动

[root@longxi-01 ~]# cd /home/nginx/
[root@longxi-01 nginx]# helm install nginx .

NAME: nginx
LAST DEPLOYED: Wed Dec 13 23:00:33 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=nginx,app.kubernetes.io/instance=nginx" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

helm通过离线镜像包安装_kubernetes

四、拓展:

1. 添加常用的chart源

#添加阿里云的源
[root@longxi-01 nginx]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#更新
[root@longxi-01 nginx]# helm repo update 
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈Happy Helming!⎈
#查看源
[root@longxi-01 nginx]# helm repo  list
NAME    URL                                                   
stable  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#按源查询
[root@longxi-01 nginx]# helm search repo gitlab
NAME                    CHART VERSION   APP VERSION     DESCRIPTION              
stable/gitlab-ce        0.2.1                           GitLab Community Edition 
stable/gitlab-ee        0.2.1                           GitLab Enterprise Edition
#官网查询,慢一点但是比较全面
[root@longxi-01 nginx]#  helm search hub gitlab