Helm v3 的推荐

首先

这篇文章是根据”推荐使用Helm v2″进行的,对Helm v3进行了内容更新。

Helm是什么意思?

用现今产业的形式进行解释

HelmはKubernetes向けパッケージマネージャで、CNCFがホストするOSSです(成熟度レベル=graduate)。
パッケージはChartという形式でArtifact Hubや各OSSのリポジトリ等で公開されており、自作も可能です。

helm install Chart名でkubernetesクラスタ(以下”k8sクラスタ”)にChartをデプロイできます。

由“主观和偏见”所选取的主要Chart库。

helm/charts

2020/11/13にサポート終了。( Deprecation Timelineを参照 )

Artifact Hub
prometheus-community
gitlab.com
istio.io
Istio / Install with Helm
等々

准备k8s集群。

请为您准备您喜欢的环境。以下是我们的推荐。

公共云支持者

Google Kubernetes Engine ( GKE )

会員登録後、数ステップで無料枠で利用可!

在中国本土,只需要一个选项,对「オンプレ派」进行释义。
自建派

Minikube

手軽にシングルノードクラスタを構築できます。

Docker for Mac / Docker for Windows

dockerだけでなく、シングルノードのk8sクラスタとkubectlが同梱されています!
設定画面でEnable Kubernetesにチェックを入れるとすぐに使えます。

这篇文章的工作环境

我正在Ubuntu 18.04的机器上安装以下内容。

    • kubectl ( v1.18.3 )

 

    minikube ( v1.11.0 )
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:52:00Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get node
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   67s   v1.18.3
$

安装Helm

让我们立即开始使用Helm吧。

安装helm命令

请在安装了kubectl命令的机器上安装Helm命令。
请参考安装Helm的指南,并选择您喜欢的安装方式进行安装。

如果通过curl获取安装脚本并安装的话,命令应如下:

$ curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

确认版本

您可以使用helm version命令进行确认。

$ helm version
version.BuildInfo{Version:"v3.2.2", GitCommit:"a6ea66349ae3015618da4f547677a14b9ecc09b3", GitTreeState:"clean", GoVersion:"go1.13.12"}
$

现在可以使用helm命令部署应用程序了。

注意:要卸载:

如果你想要卸载,请删除helm命令。

$ which helm
/usr/local/bin/helm
$ sudo rm /usr/local/bin/helm

请确认帮助

最好先确认命令列表。

$ helm help
The Kubernetes package manager

Common actions for Helm:

- helm search:    search for charts
- helm pull:      download a chart to your local directory to view
- helm install:   upload the chart to Kubernetes
- helm list:      list releases of charts

Environment variables:

+------------------+--------------------------------------------------------------------------------------------------------+
| Name                                  | Description                                                                       |
+------------------+--------------------------------------------------------------------------------------------------------+
| $XDG_CACHE_HOME                       | set an alternative location for storing cached files.                             |
| $XDG_CONFIG_HOME                      | set an alternative location for storing Helm configuration.                       |
| $XDG_DATA_HOME                        | set an alternative location for storing Helm data.                                |
| $HELM_DRIVER                          | set the backend storage driver. Values are: configmap, secret, memory, postgres   |
| $HELM_DRIVER_SQL_CONNECTION_STRING    | set the connection string the SQL storage driver should use.                      |
| $HELM_NO_PLUGINS                      | disable plugins. Set HELM_NO_PLUGINS=1 to disable plugins.                        |
| $KUBECONFIG                           | set an alternative Kubernetes configuration file (default "~/.kube/config")       |
+------------------+--------------------------------------------------------------------------------------------------------+

Helm stores configuration based on the XDG base directory specification, so

- cached files are stored in $XDG_CACHE_HOME/helm
- configuration is stored in $XDG_CONFIG_HOME/helm
- data is stored in $XDG_DATA_HOME/helm

By default, the default directories depend on the Operating System. The defaults are listed below:

+------------------+---------------------------+--------------------------------+-------------------------+
| Operating System | Cache Path                | Configuration Path             | Data Path               |
+------------------+---------------------------+--------------------------------+-------------------------+
| Linux            | $HOME/.cache/helm         | $HOME/.config/helm             | $HOME/.local/share/helm |
| macOS            | $HOME/Library/Caches/helm | $HOME/Library/Preferences/helm | $HOME/Library/helm      |
| Windows          | %TEMP%\helm               | %APPDATA%\helm                 | %APPDATA%\helm          |
+------------------+---------------------------+--------------------------------+-------------------------+

Usage:
  helm [command]

Available Commands:
  completion  generate autocompletions script for the specified shell (bash or zsh)
  create      create a new chart with the given name
  dependency  manage a chart's dependencies
  env         helm client environment information
  get         download extended information of a named release
  help        Help about any command
  history     fetch release history
  install     install a chart
  lint        examines a chart for possible issues
  list        list releases
  package     package a chart directory into a chart archive
  plugin      install, list, or uninstall Helm plugins
  pull        download a chart from a repository and (optionally) unpack it in local directory
  repo        add, list, remove, update, and index chart repositories
  rollback    roll back a release to a previous revision
  search      search for a keyword in charts
  show        show information of a chart
  status      displays the status of the named release
  template    locally render templates
  test        run tests for a release
  uninstall   uninstall a release
  upgrade     upgrade a release
  verify      verify that a chart at the given path has been signed and is valid
  version     print the client version information

Flags:
      --add-dir-header                   If true, adds the file directory to the header
      --alsologtostderr                  log to standard error as well as files
      --debug                            enable verbose output
  -h, --help                             help for helm
      --kube-apiserver string            the address and the port for the Kubernetes API server
      --kube-context string              name of the kubeconfig context to use
      --kube-token string                bearer token used for authentication
      --kubeconfig string                path to the kubeconfig file
      --log-backtrace-at traceLocation   when logging hits line file:N, emit a stack trace (default :0)
      --log-dir string                   If non-empty, write log files in this directory
      --log-file string                  If non-empty, use this log file
      --log-file-max-size uint           Defines the maximum size a log file can grow to. Unit is megabytes. If the value is 0, the maximum file size is unlimited. (default 1800)
      --logtostderr                      log to standard error instead of files (default true)
  -n, --namespace string                 namespace scope for this request
      --registry-config string           path to the registry config file (default "/home/loft/.config/helm/registry.json")
      --repository-cache string          path to the file containing cached repository indexes (default "/home/loft/.cache/helm/repository")
      --repository-config string         path to the file containing repository names and URLs (default "/home/loft/.config/helm/repositories.yaml")
      --skip-headers                     If true, avoid header prefixes in the log messages
      --skip-log-headers                 If true, avoid headers when opening log files
      --stderrthreshold severity         logs at or above this threshold go to stderr (default 2)
  -v, --v Level                          number for the log level verbosity
      --vmodule moduleSpec               comma-separated list of pattern=N settings for file-filtered logging

Use "helm [command] --help" for more information about a command.
$

主要的helm命令

这是本文介绍的命令列表。你可以理解它类似于yum或apt等软件包管理器的命令体系。

コマンド説明helm repo listリポジトリ一覧を表示するhelm repo addリポジトリを追加するhelm searchデプロイ可能なChartを表示するhelm pullChartをダウンロードするhelm installアプリケーションをインストールする(k8sクラスタにデプロイする)helm listインストール済みのアプリケーションを表示するhelm uninstallアプリケーションをアンデプロイする

在Artifact Hub上搜索Chart。

让我们搜索一下发布了哪些图表。
您可以使用helm search hub命令来搜索Artifact Hub的图表。
此外,您可以使用后面介绍的步骤,使用helm search repo命令来搜索要添加的存储库中的图表。

这是通过prometheus进行搜索的示例。我们可以看到有关prometheus的各种开源软件的图表已经准备好。

$ helm search hub prometheus
URL                                                     CHART VERSION   APP VERSION     DESCRIPTION
https://artifacthub.io/packages/helm/prometheus...      13.4.0          2.24.0          Prometheus is a monitoring system and time seri...
https://artifacthub.io/packages/helm/prometheus...      13.0.0          2.22.1          Prometheus is a monitoring system and time seri...
https://artifacthub.io/packages/helm/cloudposse...      0.2.1                           Prometheus instance created by the CoreOS Prome...
https://artifacthub.io/packages/helm/nexclipper...      11.16.7         2.21.0          Prometheus is a monitoring system and time seri...
https://artifacthub.io/packages/helm/edu/promet...      11.6.0          2.19.0          Prometheus is a monitoring system and time seri...
https://artifacthub.io/packages/helm/banzaiclou...      7.3.4-thanos.4  2.4.3           Prometheus is a monitoring system and time seri...
https://artifacthub.io/packages/helm/prometheus...      2.12.1          v0.8.3          A Helm chart for k8s prometheus adapter
https://artifacthub.io/packages/helm/prometheus...      1.7.1           1.3.0           A Helm chart for prometheus pushgateway
https://artifacthub.io/packages/helm/wener/kube...      4.1.2           0.46.0          kube-prometheus collects Kubernetes manifests t...
https://artifacthub.io/packages/helm/bitnami/ku...      4.1.2           0.46.0          kube-prometheus collects Kubernetes manifests t...
()
$

查看代码库

除了Artifact Hub外,还存在其他提供Chart的存储库,您可以单独添加。

显示仓库目录

您可以使用helm repo list命令来确认可用的存储库。
在初始状态下,没有以下的存储库。

$ helm repo list
Error: no repositories to show
$

添加存储库

Helm公式的图表存储库(helm/charts)存在,并以当前表格中的URL地址作为存档,但目前已停止支持。

本文介绍了使用该图表的步骤,建议在官方文档或Artifact Hub等地方查找目标开源软件(OSS)的最新图表提供存储库,并将该存储库的URL添加到图表中。

我们来尝试一下添加Helm官方Chart (helm/charts)的稳定仓库。

这样可以部署charts/stable的Chart。

$ helm repo add stable https://charts.helm.sh/stable
"stable" has been added to your repositories
$
$ helm repo list
NAME    URL
stable  https://charts.helm.sh/stable
$

在存储库中搜索图表。

你可以使用helm search repo命令在已添加的存储库中搜索图表。

以下是使用Prometheus搜索库的示例。可以看到有关各种与Prometheus相关的开源软件的Chart。stable/prometheus的Chart版本为11.0.4,可以发现应用程序(本例中为Prometheus)的版本可用为2.16.0。
这样,可以确认Chart版本以及使用该版本Chart部署的应用程序版本。

$ helm search repo prometheus
NAME                            CHART VERSION   APP VERSION DESCRIPTION
()
stable/prometheus               11.0.4          2.16.0      Prometheus is a monitoring system and time seri...
stable/prometheus-adapter       2.2.0           v0.6.0      A Helm chart for k8s prometheus adapter
()
stable/prometheus-node-exporter 1.9.1           0.18.1      A Helm chart for prometheus node-exporter
stable/prometheus-operator      8.12.4          0.37.0      Provides easy monitoring definitions for Kubern...
()
stable/prometheus-pushgateway   1.3.0           1.2.0       A Helm chart for prometheus pushgateway
()
$

此外,您还可以使用helm search hub来搜索Artifact Hub的Chart。

另外,还可以通过helm install命令的–version参数指定Chart的版本,从而部署任意版本的Chart。

另外,您可以使用helm pull命令将Chart下载到本地。您可以自由修改已下载的Chart并进行部署,因此您还可以修改无法通过Chart预设参数进行更改的设置。如果有机会,我会在另一篇文章中介绍。

部署应用程序

让我们立刻将图表部署到k8s集群,早日确认工作完成。

我将在namespacehelm-test下部署stable/prometheus。
发布名称为test。
(发布名称将在helm list中显示为列表。此外,它将用作每个资源名称的前缀。)

$ # namespaceを作成
$ kubectl create namespace helm-test
$ # dry-run
$ helm install test stable/prometheus --namespace helm-test --dry-run
$ # デプロイ
$ helm install stable/prometheus --name test --namespace helm-test
$ # 確認
$ helm list -n helm-test
$ kubectl get po -n helm-test

确认应用程序部署的结果

查看 helm install 命令的结果。

这里附上了部署stable/prometheus的Chart时的命令输出,可能会有一些长。

通常在NOTES部分会包含基本的使用方法。

$ helm install test stable/prometheus --namespace helm-test
NAME: test
LAST DEPLOYED: Mon Jun  8 19:41:46 2020
NAMESPACE: helm-test
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
test-prometheus-server.helm-test.svc.cluster.local


Get the Prometheus server URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace helm-test -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace helm-test port-forward $POD_NAME 9090


The Prometheus alertmanager can be accessed via port 80 on the following DNS name from within your cluster:
test-prometheus-alertmanager.helm-test.svc.cluster.local


Get the Alertmanager URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace helm-test -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace helm-test port-forward $POD_NAME 9093
#################################################################################
######   WARNING: Pod Security Policy has been moved to a global property.  #####
######            use .Values.podSecurityPolicy.enabled with pod-based      #####
######            annotations                                               #####
######            (e.g. .Values.nodeExporter.podSecurityPolicy.annotations) #####
#################################################################################


The Prometheus PushGateway can be accessed via port 9091 on the following DNS name from within your cluster:
test-prometheus-pushgateway.helm-test.svc.cluster.local


Get the PushGateway URL by running these commands in the same shell:
  export POD_NAME=$(kubectl get pods --namespace helm-test -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
  kubectl --namespace helm-test port-forward $POD_NAME 9091

For more information on running Prometheus, visit:
https://prometheus.io/
$

确认资源

由于经常使用,可能需要确认部署、服务和配置映射。

$ kubectl get deployment -n helm-test
$ kubectl get pod -n helm-test
$ kubectl get service -n helm-test
$ kubectl get configmap -n helm-test

显示已安装的图表。

你可以通过 helm list 命令进行确认。


$ helm list -n helm-test
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART               APP VERSION
test    helm-test   1           2020-06-08 19:41:46.220696724 +0900 JST deployed    prometheus-11.0.4   2.16.0
$

确认应用程序的运行

在阅读 NOTES 并确认了使用方法后,可以确认在 k8s 集群上部署的资源,现在马上开始利用该应用程序。

普罗米修斯

执行NOTES的步骤。

$ export POD_NAME=$(kubectl get pods --namespace helm-test -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace helm-test port-forward $POD_NAME 9090
Prometheus.png

告警管理器

执行 NOTES 的步骤。

$ export POD_NAME=$(kubectl get pods --namespace helm-test -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace helm-test port-forward $POD_NAME 9093
Alertmanager.png

推送网关

执行NOTES的步骤。

$ export POD_NAME=$(kubectl get pods --namespace helm-test -l "app=prometheus,component=pushgateway" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace helm-test port-forward $POD_NAME 9091
Pushgateway.png

确认各应用程序的协作

请点击此处阅读有关Helm的介绍。对于Pushgateway->Prometheus->Alertmanager->Webhook的内容,我们已将其整理为另一篇文章。请务必查看。

卸载应用程序

您可以使用helm uninstall命令进行卸载操作。

$ helm list -n helm-test
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART               APP VERSION
test    helm-test   1           2020-06-08 19:41:46.220696724 +0900 JST deployed    prometheus-11.0.4   2.16.0
$ helm uninstall test -n helm-test
release "test" uninstalled
$ helm list -n helm-test
NAME    NAMESPACE   REVISION    UPDATED STATUS  CHART   APP VERSION
$

总结

我介绍了Helm v3的安装方法以及使用stable/prometheus作为示例的Chart的部署方法。

以下是有关Helm的推荐要点:

    • Chartが豊富

Prometheusを始めとして使用頻度の高いメジャーなOSSが豊富に公開されている

Chartに複数アプリケーションを連携設定済みで含めることができる

stable/prometheusの場合、Prometheus, Alertmanager, Pushgateway が含まれている
まとめてデプロイ、アンデプロイできる
連携設定

stable/prometheusの場合、Service Discoveryが設定済み

そのためアプリケーションをデプロイする側の負担が減っている

Chartはダウンロード&編集が可能な透明性とカスタマイズ性がある

何かの時にも安心

使用Helm可以轻松部署应用程序组。此外,它不仅仅限于可用的Chart模板,还具有可定制性。如果您希望将重点放在应用程序的使用上,而不是环境设置,并且希望在某些时候灵活修改配置和设置,那么我推荐您使用Helm。

备注

在撰写本文时我意识到,以下笔记中记录了Helm v2与Helm v3的差异。如果方便,请您查看一下。

广告
将在 10 秒后关闭
bannerAds