通过API部署Helm图表的代码示例?

时间:2018-03-16 01:20:31

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

我正在寻找在没有CLI调用的情况下部署Helm图表的任何代码示例。这背后的原因是:

  1. 我的公司使用AWS CodePipeline / CodeBuild / CodeDeploy编写了几个现有的管道。他们不想花更多时间重新编写所有管道。
  2. 我的公司没有任何计划仅为部署维护额外的实例。
  3. AWS CodePipeline可以触发Lambda,理论上我可以编写一些Python代码来完成工作,如果Helm提供Python客户端的话。
  4. 目前我从中窃取了Lambda函数:

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

    虽然这不提供与Helm相同的级别功能。我们必须提供我们的发布名称系统,模板系统等。换句话说,如果我对清单进行了大的更改,并且不处理第一次部署(意味着将清单部署到空的K8S集群),它的功能很差。我们使用Github,虽然不是很相关。

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

    请让我知道我错过的地方。感谢。

2 个答案:

答案 0 :(得分:2)

你可以通过示例和Python3支持找到我的pyhelm分支。

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 ::

的图表文件夹
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'}})
t.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 {....
}

答案 1 :(得分:1)

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

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