cam*_*mme 5 kubernetes crossplane
我正在评估 crossplane 作为我们的首选工具来部署客户不同的解决方案,并且一直在解决一个问题:
我们希望将 crossplane 安装到 GCP 上的一个集群(我们手动创建),并使用该 crossplane 来配置新集群,我们可以在该集群上安装 Helm Charts 并像往常一样进行部署。到目前为止,主要问题是我们还没有弄清楚如何告诉 crossplane 将 helm Chart 安装到除自身之外的其他集群中。
这就是我们尝试的目的:
示例中的提供者配置:
apiVersion: helm.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
name: helm-provider
spec:
credentials:
source: InjectedIdentity
Run Code Online (Sandbox Code Playgroud)
...它可以工作,但将所有内容安装到与 crossplane 相同的集群中。
另一个例子:
apiVersion: helm.crossplane.io/v1beta1
kind: ProviderConfig
metadata:
name: default
spec:
credentials:
source: Secret
secretRef:
name: cluster-credentials
namespace: crossplane-system
key: kubeconfig
Run Code Online (Sandbox Code Playgroud)
...这需要大量的 makefile 脚本来更容易地为新集群生成 kubeconfig,并且 kubecoinfig 仍然会给出很多错误(但确实开始在新集群中创建一些东西,但它并不能一直工作。错误如:“ PodUnschedulable 无法调度 pod:gvisor})。
我只尝试了 crossplane 几天,所以我知道我可能会从完全错误的角度来处理这个问题,但与 Terraform 等相比,我确实喜欢 crossplane 的承诺及其方法。
所以问题是:我的想法完全错误,或者我错过了一些明显的东西。使用 kubeconfig 进行的第二次测试现在感觉相当复杂(要实现它需要按正确顺序执行许多步骤)。
谢谢
正如您所注意到的,ProviderConfigwithInjectedIdentity适用于provider-helm将 helm 版本安装到同一集群中的情况。
要部署到其他集群,provider-helm 需要kubeconfig远程集群的文件,该文件需要作为 Kubernetes 密钥提供并从ProviderConfig. 因此,只要您提供了可从 Crossplane 集群(也称为控制平面)访问的外部集群的权限 ,provider-helm 就应该能够将版本部署到远程集群。kubeconfig
因此,看起来您在配置provider-helm方面走在正确的轨道上,并且由于您观察到某些内容被部署到外部集群,因此您提供了一个有效的kubeconfig,并且provider-helm可以访问集群并对其进行身份验证。
您收到的最后一个错误听起来像是您的集群和release之间存在一些不兼容,例如外部集群仅允许pod使用gvisor,并且您想要使用provider helm安装的应用程序没有相应的一些标签。
作为故障排除步骤,您可以尝试使用您构建的相同 kubeconfig 通过 helm cli 将具有完全相同配置的 Helm Chart 安装到外部集群。
关于您提到的构建 Kubeconfig 的不便,provider-helm 需要一种访问外部 Kubernetes 集群的方法,因为这kubeconfig是实现此目的最常见的方法。但是,如果您看到另一种替代方案可以使某些常见用例变得更容易,则可以实现这一点,如果您可以在存储库中为此创建功能请求,那就太好了。
最后,我想知道您是如何创建这些外部集群的。如果使用 Crossplane 创建它们也有意义,例如,如果 GKE 具有提供程序-gcp,那么您可以将helm与 GKE 集群资源一起组成ProviderConfig,该资源只会创建适当的秘密,并且ProviderConfig当您创建新集群时,您可以以此为例: https: //github.com/crossplane-contrib/provider-helm/blob/master/examples/in-composition/composition.yaml#L147
| 归档时间: |
|
| 查看次数: |
2779 次 |
| 最近记录: |