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等软件包管理器的命令体系。
在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
告警管理器
执行 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
推送网关
执行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
确认各应用程序的协作
请点击此处阅读有关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的差异。如果方便,请您查看一下。