【问题标题】:How to use kubernetes helm from a CI/CD pipeline hosted outside the k8s cluster如何从托管在 k8s 集群外部的 CI/CD 管道中使用 kubernetes helm
【发布时间】:2019-05-01 06:41:14
【问题描述】:

我正在使用 kubernetes helm 将应用程序部署到我的集群。当 helm 使用集群的 kube-config 文件部署到集群时,我的笔记本电脑上一切正常。

我想使用我的 CI/CD 服务器(与我的集群分开)中的 helm 将应用程序自动部署到我的集群。我创建了一个 k8s 服务帐户供我的 CI/CD 服务器使用。但是如何为服务帐户创建一个 kube-config 文件,以便 helm 可以使用它从我的 CI/CD 服务器连接到我的集群??

或者这不是从 CI/CD 服务器使用 Helm 的正确方法吗?

【问题讨论】:

  • 这是正确的做法。您只需复制 ~/.kube 目录即可获取所需的配置。

标签: continuous-integration kubernetes continuous-deployment kubectl kubernetes-helm


【解决方案1】:

Helm 通过使用已安装的 kubectl 与您的集群通信来工作。这意味着,如果您可以通过 kubectl 访问您的集群,您就可以在该集群中使用 helm。

不要忘记确保您使用正确的上下文,以防您的 kubcfg 文件中有多个集群。您可以通过运行 kubectl config current-context 并将其与 kubecfg 中的集群详细信息进行比较来检查。

您可以在 Helm 的文档中找到更多详细信息,查看quick start guide 了解更多信息。

【讨论】:

    【解决方案2】:

    为什么不直接在 Kubernetes 集群中运行 CI 服务器,然后就不必管理访问集群的机密?我们在 Jenkins X 上这样做了,效果很好——我们可以在管道中运行 kubectl 或 helm 就好了。

    【讨论】:

    • 当被问到这个问题时,Jenkin X 根本不存在。在我通常的设置中,我至少有 2 个集群,staging 和 prod,而且我通常不会在 prod 上运行构建内容。拥有 2 个集群并且当构建/部署未在部署应用程序的同一集群上运行时,问题再次出现。
    • 因为 repo 在集群之外并且 webhook 无法与我的集群通信?使 PR 构建变得如此困难
    【解决方案3】:

    在这种情况下,您需要将kubectl 安装在您确定供 CI/CD 服务器使用的任何从站或代理上,或者在您的自动化中即时安装kubectl,然后确保您有 OR 能够生成一个 kubeconfig 来使用。

    回答问题:

    但是如何为服务帐户创建 kube-config 文件...

    您可以使用 kubectl config set-clusterkubectl config set-credentialskubectl config set-context 在默认或自定义 kubeconfig 文件中设置与 kubectl 一起使用的新集群​​、凭据和上下文。如果您设置了 KUBECONFIG 环境变量并指向 kubeconfig 文件,则可以使用,或者在设置新条目时只需传递 -kubeconfig 以指向自定义文件。

    这里是 v1.6 的 the relevant API documentation

    【讨论】:

      【解决方案4】:

      我们创建了helmsman,它为您提供了声明性语法来管理集群中的 helm 图表。无论您在何处运行它,它都会为您配置 kubectl(以及 helm)。它也可以从 docker 容器中使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-02
        • 2019-01-06
        • 1970-01-01
        • 2019-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多