Перейти к основному содержимому

Kubernetes и Crossplane

Kubernetes-библиотека превращает любой зарегистрированный Go API type в ресурс Graphene: initialize делает apply и ждёт, reconcile лечит drift, finalize удаляет. Ресурсы Crossplane используют тот же механизм; provider и credentials принадлежат кластеру пользователя.

Client и типы

client := k8slib.NewClientFromSecret(
pipeline.Secret(ctx, "kubeconfig"),
k8slib.WithScheme(providerapis.AddToScheme),
)

Kubeconfig разрешается из секрета только внутри run worker. Встроенные Kubernetes-типы зарегистрированы по умолчанию; WithScheme добавляет CRD из их нативных Go-пакетов.

Декларация ресурса

network := k8slib.Resource(ctx, client, "net", &vpc.Network{
Spec: vpc.NetworkSpec{ForProvider: vpc.NetworkParameters{
FolderID: &params.FolderId,
}},
},
k8slib.WithReady(func(live *vpc.Network) bool {
return live.Status.GetCondition(xpv1.TypeReady).Status == corev1.ConditionTrue
}),
k8slib.WithTimeout[vpc.Network](30*time.Minute),
k8slib.WithResourceOption[vpc.Network](pipeline.WithLabels(labels)),
)

Аргумент name становится и id записи, и metadata.name; конфликтующее имя в object отклоняется. Ready возвращает живой типизированный object вместе со status, который записал кластер или provider.

Опции

ОпцияПо умолчаниюКонтракт
WithReady(fn)соглашение kstatus/Ready conditionопределить готовность по live object
WithDrifted(fn)drift только при исчезновениирешить, нужен ли повторный apply desired state
WithValidate(fn)нетотклонить desired state до activity
WithReconcileEvery(d)30sпериод проверки drift
WithPollInterval(d)5sпериод опроса readiness
WithTimeout(d)20mпредел ожидания convergence
WithResourceOption(...)владелец runparent, children, labels и flows

Первая декларация Go kind фиксирует handlers этого worker. Для следующих экземпляров используйте те же опции.

Сразу после apply у managed resources Crossplane часто нет conditions; задавайте WithReady по реальному сигналу provider. Для связей Kubernetes objects предпочитайте нативные reference fields: кластер разрешит их без переноса сгенерированных ids через workflow history.

Сейчас проект имеет unit coverage библиотеки, но не поставляет conformance suite с живым kind-кластером. Поведение provider должно быть частью тестируемого контракта вашего пайплайна.

Локальные тесты

Моделирование зависимостей и проверка пайплайна описаны в руководстве по локальным тестам.