【问题标题】:Code sample to deploy a Helm chart via API?通过 API 部署 Helm 图表的代码示例?
【发布时间】:2018-08-24 23:49:22
【问题描述】:

我正在寻找任何无需通过 CLI 调用即可部署 Helm 图表的代码示例。这背后的原因是:

  1. 我的公司有几个使用 AWS CodePipeline / CodeBuild / CodeDeploy 编写的现有管道。他们不喜欢花更多时间重写所有管道。
  2. 我的公司没有任何维护额外实例的计划,只是为了部署。
  3. AWS CodePipeline 可以触发 Lambda,如果 Helm 提供 Python 客户端,理论上我可以编写一些 Python 代码来完成这项工作。

目前我从这里窃取 Lambda 函数:

https://github.com/aws-samples/aws-kube-codesuite

而这并没有提供与 Helm 相同的级别功能。我们必须提供我们的release-name系统,模板系统等。换句话说,如果我对manifest有很大的变化,它的功能就会很差,并且不处理第一次部署(意味着将manifest部署到一个空的K8S集群)。我们使用 Github,虽然不是很相关。

对于 Helm 图表的 python 客户端,我能找到的最好的是 pip 上列出的 pyhelm。但是它没有调用部署的示例代码,并且来自一些用户组/论坛的反馈,安装过程很痛苦。有人还指出了 azure/draft 和另一个 repo,但我不知道如何提出一个仅使用 Python 部署 Helm 图表的可靠示例。

请告诉我我想念的地方。谢谢。

【问题讨论】:

标签: python amazon-web-services kubernetes kubernetes-helm


【解决方案1】:

您可以找到我的 pyhelm fork 示例和 Python3 支持。

git clone git@github.com:andriisoldatenko/pyhelm.git
cd pyhelm && python setup.py install

如何使用 Pyhelm

首先你需要 repo_url 和图表名称来下载图表

from pyhelm.repo import from_repo

chart_path = chart_versions = from_repo('https://kubernetes-charts.storage.googleapis.com/', 'mariadb')

print(chart_path)
"/tmp/pyhelm-kibwtj8d/mongodb"

现在可以看到mongodb的那个chart文件夹::

In [3]: ls -la /tmp/pyhelm-kibwtj8d/mongodb
total 40
drwxr-xr-x  7 andrii  wheel   224 Mar 21 17:26 ./
drwx------  3 andrii  wheel    96 Mar 21 17:26 ../
-rwxr-xr-x  1 andrii  wheel     5 Jan  1  1970 .helmignore*
-rwxr-xr-x  1 andrii  wheel   261 Jan  1  1970 Chart.yaml*
-rwxr-xr-x  1 andrii  wheel  4394 Jan  1  1970 README.md*
drwxr-xr-x  8 andrii  wheel   256 Mar 21 17:26 templates/

下一步构建 ChartBuilder 实例以使用 Tiller 进行操作::

from pyhelm.chartbuilder import ChartBuilder

chart = ChartBuilder({'name': 'mongodb', 'source': {'type': 'directory', 'location': '/tmp/pyhelm-kibwtj8d/mongodb'}})

# than we can get chart meta data etc
In [9]: chart.get_metadata()
Out[9]:
name: "mongodb"
version: "0.4.0"
description: "Chart for MongoDB"

安装图表::

from pyhelm.chartbuilder import ChartBuilder
from pyhelm.tiller import Tiller

chart = ChartBuilder({'name': 'mongodb', 'source': {'type': 'directory', 'location': '/tmp/pyhelm-kibwtj8d/mongodb'}})
chart.install_release(chart.get_helm_chart(), dry_run=False, namespace='default')

Out[9]:
release {
  name: "fallacious-bronco"
  info {
    status {
      code: 6
    }
    first_deployed {
      seconds: 1521647335
      nanos: 746785000
    }
    last_deployed {
      seconds: 1521647335
      nanos: 746785000
    }
    Description: "Dry run complete"
  }
  chart {....
}

【讨论】:

  • 谢谢。但我坚持使用 pygit2(尝试了 python 2.7.10 和 3.6.4)。它一直在询问 libgit2 版本 0.27.x,而 Mac OSX 上的官方版本是 0.26.3。我稍后会在 Ubuntu 上试用。
  • @MingXie 你有没有机会查看pygit2.org/install.html的官方安装说明?顺便说一句,在我的 fork 中,我删除了 libgit2 依赖项,因为它对我的项目来说是不必要的。
  • 是的,我摆脱了 libgit2 和 pygit2 的问题,谢谢。但是,即使在具有修复 44134 端口和主机的本地 minikube 中,我仍然会遇到此问题:grpc._channel._Rendezvous: <_rendezvous of rpc that terminate with connect failed>
  • 变量t从何而来?如果要使用集群中安装的Tiller,如何初始化?
  • 不错的收获!替换s/t/chart/
【解决方案2】:

我建议将official python client 用于 Kubernetes 而不是 Helm。它要求您自己编写部署、服务、持久卷等,但它会比任何其他方法都快。请记住,您必须弄清楚如何进行集群身份验证才能通过客户端进行更改,但是 repo 中有几个示例。我对 AWS Lambda 了解不多,无法提供有关它如何/是否会起作用的任何信息。

Helm 是一个很棒的产品,但它面向命令行,而不是使用需要 GRPC 的 API。当然,可以使用 Helm proto 文件和 Python 的 GRPC 客户端为 Tiller(Helm 的 API 服务器)创建 Python 库,但似乎没有人构建的库在社区中受到关注。

【讨论】:

  • 其实我已经按照你描述的方式做了,和aws-kube-codesuite一样。试着找到更优雅的方法。
猜你喜欢
  • 2020-04-21
  • 2020-03-19
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2020-01-11
相关资源
最近更新 更多