
这篇文章是我们
最近关于Kubernetes-
Helm的程序包管理器历史的
出版物的合乎逻辑的延续。 这次,我们将再次解决当前Helm(
2.x版 )及其托管图表和存储库的设备和功能问题,之后我们将继续练习在Kubernetes集群中安装Helm并使用图表的实践。
参赛作品
Helm是一个图表管理工具。该图表描述了在Kubernetes集群中实例化应用程序所需的数据集。 它可以具有嵌入式图表,并且既可以用来描述由许多相关资源组成的成熟服务,也可以用来描述各个独立的组件。 例如,
稳定的/ gitlab-ce图表
使用独立的redis和postgresql图表描述了完整的解决方案。
可以在同一群集中无限次数地设置图表。 因此,在不同环境中的应用程序推出逻辑的描述可以并且应该存储在同一张图表上。
Helm的客户端负责创建图表,并将
Tiller组件与用户参数一起传输到Kubernetes集群。 反过来,Tiller负责已发布图表实例发布的生命周期。
(以防万一,让我提醒您,Helm的下一个重大更新-版本3-将不再具有Tiller。)现在-首先是第一件事。
安装与升级
头盔需要Kubernetes才能工作。 您可以使用本地安装的
Minikube (另请参见“ 使用Minikube的Kubernetes入门 ”)或任何其他可用群集。
让我们从安装客户端开始:选择
发行版 ,下载并解压缩系统的档案,传输可执行文件...
$ curl https://storage.googleapis.com/kubernetes-helm/helm-v2.10.0-linux-amd64.tar.gz | tar -zxv $ sudo mv linux-amd64/helm /usr/local/bin/helm
接下来,在群集中安装Tiller。 默认情况下,Tiller安装在
kube-system
命名空间的
kubectl
上下文kubectl
(
kubectl config current-context
)中,但是可以使用适当的选项和环境变量对其进行更改-它们在help(
helm init --help
)中进行了描述。 让我们完成安装并查看集群中创建的资源:
$ helm init $HELM_HOME has been configured at /home/habr/.helm. (Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.) Happy Helming! $ kubectl get all --selector=name=tiller --namespace kube-system NAME READY STATUS RESTARTS AGE po/tiller-deploy-df4fdf55d-h5mvh 0/1 Running 0 5s NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/tiller-deploy 10.107.191.68 <none> 44134/TCP 5s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/tiller-deploy 1 1 1 0 5s NAME DESIRED CURRENT READY AGE rs/tiller-deploy-df4fdf55d 1 1 0 5s
现在,Tiller已安装在集群中,并且可以进行发布管理以及与Kubernetes API的交互。
注意 :在Tiller的安装和升级(选项--upgrade
)期间,您可以指定特定的映像,而不是默认使用最新的稳定版本。 任意图像的名称由--tiller-image
选项确定,并且与--canary-image
选项一起使用,当Tiller推出时,将使用--canary-image
。 Canary映像允许您使用Tiller,其代码版本对应于master分支。服务数据存储在群集中的特殊资源
ConfigMaps
,因此,卸载和重新安装Tiller不会导致以前安装的版本中的数据丢失。
图表储存库
图表存储库-用于存储和分发图表的HTTP服务器。 有关存储库中图表的信息存储在
index.yaml
文件中。 它还指示可以从何处加载每个图表。 大多数情况下,这些图表与
index.yaml
文件一起存储,但是没有什么阻止它们被放置在另一台服务器上的。 通常,文件结构可以归结为平面形式:
. ├── index.yaml ├── artifactory-7.3.0.tgz ├── docker-registry-1.5.2.tgz ... └── wordpress-2.1.10.tgz
默认情况下,Helm使用
官方Kubernetes图表存储库 。 它包含精心设计的当前图表,用于解决许多应用问题。 该存储库称为
稳定库:
$ helm repo list NAME URL stable https://kubernetes-charts.storage.googleapis.com
如有必要,
创建自己的存储库不会有任何问题。 服务器要求最低,因此,像大多数公共图表存储库一样,它可以托管在GitHub Pages上。 您可以在
文档中阅读有关工具的更多信息以及必要的步骤。
使用图表存储库时,可以添加和删除它们。 为了使图表版本为最新,您必须定期更新索引。 我将举一个公共
bitnami存储库的示例,其中大多数图表在官方Helm存储库中使用:
$ helm repo add bitnami https://charts.bitnami.com/bitnami "bitnami" has been added to your repositories $ helm repo update Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "bitnami" chart repository ...Successfully got an update from the "stable" chart repository Update Complete. Happy Helming! $ helm repo remove bitnami "bitnami" has been removed from your repositories
下一步-
搜索存储库。 不带参数的
helm search
显示所有可用图表:
$ helm search NAME CHART VERSION APP VERSION DESCRIPTION stable/acs-engine-autoscaler 2.2.0 2.1.1 Scales worker nodes within agent pools stable/aerospike 0.1.7 v3.14.1.2 A Helm chart for Aerospike in Kubernetes stable/anchore-engine 0.2.1 0.2.4 Anchore container analysis and policy evaluation engine s... stable/apm-server 0.1.0 6.2.4 The server receives data from the Elastic APM agents and ... stable/ark 1.2.1 0.9.1 A Helm chart for ark stable/artifactory 7.3.0 6.1.0 Universal Repository Manager supporting all major packagi... ... stable/weave-cloud 0.2.2 0.2.0 Weave Cloud is a add-on to Kubernetes which provides Cont... stable/weave-scope 0.9.3 1.6.5 A Helm chart for the Weave Scope cluster visualizer. stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites. stable/xray 0.4.1 2.3.0 Universal component scan for security and license invento... stable/zeppelin 1.0.1 0.7.2 Web-based notebook that enables data-driven, interactive ... stable/zetcd 0.1.9 0.0.3 CoreOS zetcd Helm chart for Kubernetes
在
Chart.yaml
的可选
keywords
字段中
Chart.yaml
开发人员指定用于简化图表存储库中搜索的标记:
$ helm search web NAME CHART VERSION APP VERSION DESCRIPTION stable/cerebro 0.3.1 0.8.1 A Helm chart for Cerebro - a web admin tool that replaces... stable/chronograf 0.4.5 1.3 Open-source web application written in Go and React.js th... stable/jasperreports 2.0.4 7.1.0 The JasperReports server can be used as a stand-alone or ... stable/joomla 2.0.9 3.8.12 PHP content management system (CMS) for publishing web co... stable/kubernetes-dashboard 0.7.2 1.8.3 General-purpose web UI for Kubernetes clusters stable/odoo 2.0.7 11.0.20180815 A suite of web based open source business apps. stable/phabricator 2.1.9 2018.34.0 Collection of open source web applications that help soft... stable/redmine 4.1.0 3.4.6 A flexible project management web application. stable/rethinkdb 0.1.4 0.1.0 The open-source database for the realtime web stable/schema-registry-ui 0.1.0 v0.9.4 This is a web tool for the confluentinc/schema-registry i... stable/superset 0.1.2 0.24.0 Apache Superset (incubating) is a modern, enterprise-read... stable/testlink 2.0.3 1.9.17 Web-based test management system that facilitates softwar... stable/tomcat 0.1.0 7 Deploy a basic tomcat application server with sidecar as ... stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites. ... $ helm search cms blog NAME CHART VERSION APP VERSION DESCRIPTION stable/drupal 1.1.3 8.5.6 One of the most versatile open source content management ... stable/joomla 2.0.9 3.8.12 PHP content management system (CMS) for publishing web co... stable/wordpress 2.1.10 4.9.8 Web publishing platform for building blogs and websites
注意:使用helm search
命令时,可能会遇到几个过滤器的不稳定操作:结果的可用性取决于指示的顺序和过滤器的数量。将搜索范围缩小到几个选项之后,您可以使用
helm inspect
命令对图表进行更详细的分析。 它显示图表文件
Chart.yaml
,
values.yaml
和
README.md
。 每个部分可以使用相应的参数分别显示:
chart
,
values
和
readme
。
在官方存储库中,图表记录精美,包含使用示例,有些图表甚至具有现成的生产配置。 例如,
稳定/ wordpress提供了一个良好的
readme
(有关其在控制台中的输出,请参见helm inspect readme stable/wordpress
) 。
搜索是查找负担得起的包裹的好方法。 找到软件包后,可以使用它在群集中安装应用程序。
首次申请
例如,选择已经提到的
稳定/ wordpress图表。
它使用
values.yaml
文件中描述的参数。 您可以覆盖YAML文件中的参数,然后在安装过程中传输该文件(选项
-f
,--
--values
)。 此外,可以在命令行上直接覆盖它们(选项
--set
,--
--set-string
和
--set-file
)。 所有选项均可使用任意次数; 同时,在命令行上的覆盖优先于带有参数的文件。
设置图表时,可以使用
--name
选项设置发布名称,也可以使用Helm生成的随机名称。
设置
生产配置图,更改博客名称,禁用将WordPress数据保存在
PersistentVolumeClaim
(有关持久存储的更多信息,请参阅Kubernetes文档 ) :
$ curl https://raw.githubusercontent.com/helm/charts/master/stable/wordpress/values-production.yaml --output values-production.yaml $ helm install --name habr --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml stable/wordpress NAME: habr LAST DEPLOYED: Fri Aug 31 15:17:57 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 0s habr-wordpress Opaque 2 0s ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 0s habr-mariadb 1 0s habr-mariadb-tests 1 0s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 0s habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 0s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 3 3 0 0s ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 0s ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 0s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-7955b95fd-hh7b9 0/1 ContainerCreating 0 0s habr-wordpress-7955b95fd-tgsxk 0/1 ContainerCreating 0 0s habr-wordpress-7955b95fd-xjz74 0/1 ContainerCreating 0 0s habr-mariadb-0 0/1 ContainerCreating 0 0s NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
如果使用成熟的集群,则可以遵循上述
NOTES块中的建议。 如果您拥有Minikube,请按照以下步骤在浏览器中打开网站:
$ minikube service habr-wordpress Waiting, endpoint for service is not ready yet... Opening kubernetes service default/habr-wordpress in default browser...
恭喜,该应用程序处于群集中!

带有WordPress的详细图表出现在所有Helm版本的列表中:
$ helm list NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE habr 1 Fri Aug 31 15:17:57 2018 DEPLOYED wordpress-2.1.10 4.9.8 default
下一步是更新我们的版本,并通过博客更改图像。 例如,将使用来自相同Docker存储库(
4.9.8-ol-7
)的另一个标签:
$ helm upgrade habr --set "image.tag=4.9.8-ol-7" --set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml stable/wordpress Release "habr" has been upgraded. Happy Helming! LAST DEPLOYED: Fri Aug 31 15:21:08 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 3m habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 3m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 4 2 0 3m ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 3m ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 3m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-66f4fd6b74-gqwhh 0/1 Pending 0 0s habr-wordpress-66f4fd6b74-mf6vj 0/1 Pending 0 0s habr-wordpress-7955b95fd-hh7b9 1/1 Running 2 3m habr-wordpress-7955b95fd-tgsxk 1/1 Running 2 3m habr-wordpress-7955b95fd-xjz74 0/1 Terminating 2 3m habr-mariadb-0 1/1 Running 0 3m ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 3m habr-wordpress Opaque 2 3m ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 3m habr-mariadb 1 3m habr-mariadb-tests 1 3m NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
请注意,
在更新 Tiller时,会将收到的图表与参数与最后保存的图表进行比较,并在Kubernetes API中执行相应的请求,并且
不会考虑发布资源的
当前状态 。 重要的是要了解此功能并且不要犯错误:
- 该更新与安装没有什么不同:Helm客户端将Tiller图表与参数一起发送,因此您需要小心并记住使用在安装过程中(或在上一次更新期间)设置的参数来指定参数和文件,这些参数和文件不应被忽略。 在上面的示例中,这是
--set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml
--set "wordpressBlogName=Flant's Blog!" --set "persistence.enabled=false" -f values-production.yaml
。 - 使用Helm推出的应用程序只能使用Helm进行维护:Helm将不考虑使用
kubectl
手动更改,并且可能导致不可逆转的后果。
因此,逻辑上的结论是:该
过程应该是自动化的 ,并且应该仅通过提交到Git存储库,更改图表文件和CI配置文件来执行更改。
始终可以按以下方式检查集群中应用程序发布组件的状态:
$ helm status habr LAST DEPLOYED: Fri Aug 31 15:21:08 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Secret NAME TYPE DATA AGE habr-mariadb Opaque 2 4m habr-wordpress Opaque 2 4m ==> v1/ConfigMap NAME DATA AGE habr-mariadb-init-scripts 1 4m habr-mariadb 1 4m habr-mariadb-tests 1 4m ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE habr-mariadb ClusterIP 10.111.7.232 <none> 3306/TCP 4m habr-wordpress ClusterIP 10.106.129.88 <none> 80/TCP,443/TCP 4m ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE habr-wordpress 3 4 2 3 4m ==> v1beta1/StatefulSet NAME DESIRED CURRENT AGE habr-mariadb 1 1 4m ==> v1beta1/Ingress NAME HOSTS ADDRESS PORTS AGE wordpress.local-habr wordpress.local 80, 443 4m ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE habr-wordpress-66f4fd6b74-gqwhh 0/1 Pending 0 1m habr-wordpress-66f4fd6b74-mf6vj 1/1 Running 0 1m habr-wordpress-7955b95fd-hh7b9 1/1 Running 3 4m habr-wordpress-7955b95fd-tgsxk 1/1 Running 3 4m habr-mariadb-0 1/1 Running 1 4m NOTES: 1. Get the WordPress URL: You should be able to access your new WordPress installation through https://wordpress.local/admin 2. Login with the following credentials to see your blog echo Username: user echo Password: $(kubectl get secret --namespace default habr-wordpress -o jsonpath="{.data.wordpress-password}" | base64 --decode)
Helm允许您
回滚到特定的发行版 。 当前有两个修订:
$ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 DEPLOYED wordpress-2.1.10 Upgrade complete
将应用程序还原到其原始状态:
$ helm rollback habr 1 Rollback was a success! Happy Helming!
现在,修订历史记录已补充了一条记录:
$ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 SUPERSEDED wordpress-2.1.10 Upgrade complete 3 Fri Aug 31 15:25:06 2018 DEPLOYED wordpress-2.1.10 Rollback to 1
文章即将结束,不再需要发布吗?
$ helm delete habr release "habr" deleted
真的删除了吗?
该命令将删除与发行版关联的Kubernetes资源,但不会删除发行版本身 。 有关该版本的所有信息仍然可用,包括其历史记录:
$ helm list --all NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE habr 3 Fri Aug 31 15:25:06 2018 DELETED wordpress-2.1.10 4.9.8 default
$ helm history habr REVISION UPDATED STATUS CHART DESCRIPTION 1 Fri Aug 31 15:17:57 2018 SUPERSEDED wordpress-2.1.10 Install complete 2 Fri Aug 31 15:21:08 2018 SUPERSEDED wordpress-2.1.10 Upgrade complete 3 Fri Aug 31 15:25:06 2018 DELETED wordpress-2.1.10 Deletion complete
注意 :按计划,可以将远程发行版回滚到以前的版本,但是在最新版本中,此功能不起作用- 有关详细信息,请参见问题#3722 。要完全删除发行版,请使用
--purge
选项:
$ helm delete --purge habr release "habr" deleted
总结
本文讨论了Helm 2的基本体系结构,其组件及其功能,以及基本的基元,图表,发行版和图表存储库。 我们在Kubernetes集群中安装了Helm,并了解了发行生命周期和使用它的基本命令。
本系列中的以下材料将专门讨论
创建自己的图表的主题-在其中,我将讨论图表的结构,标准化和调试工具。
更新 :
此链接提供了新的文章。
聚苯乙烯