【问题标题】:How do I use crossplane to Install helm charts (with provider-helm) into other cluster如何使用 crossplane 将 helm 图表(使用 provider-helm)安装到其他集群中
【发布时间】:2021-10-29 17:28:15
【问题描述】:

我正在评估将 crossplane 用作我们为客户部署不同解决方案的首选工具,但我一直在努力解决一个问题:

我们想在 GCP 上的一个集群(我们手动创建)上安装 crossplane,并使用该 crossplane 来配置新集群,我们可以在该集群上安装 helm 图表并像往常一样部署。 到目前为止的主要问题是我们还没有弄清楚如何告诉 crossplane 将舵图安装到其他集群而不是它自己。

这是我们尝试过的:

示例中的provider-config:

apiVersion: helm.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
  name: helm-provider
spec:
  credentials:
    source: InjectedIdentity

...它可以工作,但会将所有内容安装到与 crossplane 相同的集群中。

还有另一个例子:

apiVersion: helm.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
  name: default
spec:
  credentials:
    source: Secret
    secretRef:
      name: cluster-credentials
      namespace: crossplane-system
      key: kubeconfig

...这需要大量的 makefile 脚本才能更轻松地为新集群生成 kubeconfig,并且 kubecoinfig 仍然会产生很多错误(但确实开始在新集群中创建一些东西,但它并不能正常工作方式。获取错误,例如:" PodUnschedulable Cannot schedule pods: gvisor})。

我只尝试了 crossplane 几天,所以我知道我可能从一个完全错误的角度来解决这个问题,但我确实喜欢 crossplane 的承诺及其与 Terraform 等类似的方法。

所以问题是:我的想法完全错误,或者我遗漏了一些明显的东西。 使用 kubeconfig 进行的第二次测试现在感觉非常复杂(按照正确的顺序执行许多步骤)。

谢谢

【问题讨论】:

    标签: kubernetes crossplane


    【解决方案1】:

    如您所见,ProviderConfigInjectedIdentity 适用于 provider-helm 将 helm 版本安装到同一集群中的情况。

    要部署到其他集群,provider-helm 需要远程集群的 kubeconfig 文件,该文件需要作为 Kubernetes 机密提供并从 ProviderConfig 引用。因此,只要您向可以从您的 Crossplane 集群(又名控制平面)可访问的外部集群提供 正确 kubeconfig,provider-helm 就应该是能够将版本部署到远程集群。

    因此,您似乎在配置 provider-helm 方面走在了正确的轨道上,并且由于您观察到某些东西被部署到外部集群,因此您提供了一个有效的 kubeconfig,provider-helm 可以访问并验证集群。

    您遇到的最后一个错误听起来像是您的集群和版本之间存在一些不兼容,例如外部集群只允许使用 gvisor 的 pod,而您要使用 provider helm 安装的应用程序没有相应的标签。

    作为故障排除步骤,您可以尝试使用您构建的相同 kubeconfig,通过 helm cli 将具有完全相同配置的 helm chart 安装到外部集群。

    关于您提到的构建 Kubeconfig 的不便,provider-helm 需要一种访问外部 Kubernetes 集群的方法,因为kubeconfig 是用于此目的的最常用方法。但是,如果您看到另一种替代方案可以使某些常见用例的工作变得更容易,则可以实现这一点,如果您可以在 repo 中为此创建一个功能请求,那就太好了。

    最后,我想知道您是如何创建这些外部集群的。如果用 Crossplane 创建它们也有意义,例如如果 GKE 带有 provider-gcp,那么,您可以 compose 一个 helm ProviderConfig 和一个 GKE 集群资源一起创建适当的秘密和 ProviderConfig 当您创建一个新集群时,您可以检查这个作为示例:https://github.com/crossplane-contrib/provider-helm/blob/master/examples/in-composition/composition.yaml#L147

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-16
      • 2021-07-07
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 2019-11-13
      • 1970-01-01
      相关资源
      最近更新 更多