Как использовать кроссплан для установки карт управления (с провайдером) в другой кластер
Я рассматриваю возможность использования crossplane в качестве инструмента для развертывания различных решений наших клиентов и столкнулся с одной проблемой:
Мы хотим установить crossplane в один кластер на GCP (который мы создаем вручную) и использовать этот crossplane для предоставления нового кластера, на котором мы можем установить helm charts и развернуть как обычно. Основная проблема до сих пор заключается в том, что мы не выяснили, как заставить crossplane установить рулевые диаграммы в другие кластеры, кроме самого себя.
Это то, для чего мы пытались:
Конфиг провайдера в примере:
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 Не удается запланировать модули: gvisor}).
Я пробовал кроссплан всего пару дней, поэтому я знаю, что могу подходить к этому с совершенно неправильной точки зрения, но мне нравится обещание кроссплана и его подход по сравнению с Terraform и подобными.
Итак, вопрос: я думаю совершенно неправильно или упускаю что-то очевидное. Второй тест с kubeconfig сейчас кажется довольно сложным (много шагов в правильном порядке для его достижения).
Спасибо
1 ответ
Как вы заметили, с
InjectedIdentity
для случая, когда
provider-helm
устанавливает выпуск helm в тот же кластер.
Для развертывания в других кластерах провайдеру-шлему требуется файл удаленного кластера, который необходимо предоставить в виде секрета Kubernetes и указать ссылку из . Таким образом, пока вы предоставили право на внешний кластер, доступный из вашего кластера Crossplane (также известного как плоскость управления), provider-helm должен иметь возможность развернуть выпуск на удаленном кластере.
Итак, похоже, что вы находитесь на правильном пути в отношении настройки provider-helm, и, поскольку вы наблюдали, как что-то развертывается во внешнем кластере, вы предоставили действительный , и provider-helm мог получить доступ и аутентифицироваться в кластере.
Последняя ошибка, которую вы получаете, звучит как некоторая несовместимость между вашим кластером и выпуском , например, внешний кластер допускает только модули с
gvisor
и приложение, которое вы хотите установить с помощью провайдерского руля, соответственно не имеет некоторых меток.
В качестве шага по устранению неполадок вы можете попробовать установить эту диаграмму helm с точно такой же конфигурацией во внешний кластер через helm cli, используя тот же созданный вами kubeconfig.
Что касается неудобства создания Kubeconfig, о котором вы упомянули, то provider-helm нужен способ доступа к этому внешнему кластеру Kubernetes, а поскольку
kubeconfig
является наиболее распространенным способом для этой цели. Однако, если вы видите другую альтернативу, которая упрощает некоторые распространенные варианты использования, ее можно реализовать, и было бы здорово, если бы вы могли создать запрос функции в репо для этого.
Наконец, мне интересно, как вы создаете эти внешние кластеры. Если есть смысл создавать их и с Crossplane, например, если GKE с provider-gcp, то можно составить руль вместе с ресурсом GKE Cluster, который просто создаст соответствующий секрет и
ProviderConfig
когда вы создаете новый кластер, вы можете проверить это на примере: https://github.com/crossplane-contrib/provider-helm/blob/master/examples/in-composition/composition.yaml#L147