gpt4 book ai didi

amazon-web-services - 创建k8s资源并等待完成继续下一步

转载 作者:行者123 更新时间:2023-12-05 00:44:42 25 4
gpt4 key购买 nike

我需要创建一个 k8s 资源,这需要一些时间才能可用,为此,我使用以下内容

https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/controller/controllerutil#example-CreateOrUpdate

op, err := controllerutil.CreateOrUpdate(context.TODO(), c, deploy, func() error {

})

func2()

现在我需要在对象创建完成后立即调用func2(可能需要 2-3 分钟才能完成),我应该怎样做才是正确的?

我发现了这个,但不知道如何组合它们......

https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg#hdr-Watching_and_EventHandling

我正在使用 kubebuilder

最佳答案

上面的方法更适合cli使用。

当您使用 kubebuilder 或 Operator sdk 时,您需要在协调函数中处理它。

通常,您有一个自定义资源可以触发 Controller 协调功能。创建自定义资源后,您可以创建部署,而不是返回空的 reconcile.Result(将其标记为已完成),您可以返回带有 Requeue 属性的 reconcile.Result。

reconcile.Result{Requeue: true}

因此,在下次运行期间,您检查部署是否准备就绪。如果没有,那么您再次重新排队。一旦准备好,您将返回一个空的 reconcile.Result 结构。

另请记住,协调函数始终需要是幂等的,因为它将在 Controller 重新启动期间以及默认情况下每 10 小时再次运行一次。

或者,您还可以在创建的部署上使用所有者引用,然后设置 Controller ,以便在拥有的资源(部署)上发生更新时协调所有者资源(您的自定义资源)。对于operator sdk,可以在SetupWithManager函数中进行配置,默认情况下仅使用For选项函数。这里需要添加Owns选项功能。

// SetupWithManager sets up the controller with the Manager.
func (r *YourReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&yourapigroup.YourCustomResource{}).
Owns(&appv1.Deployment{}).
Complete(r)
}

我从未使用过这种方法,因此可能需要添加更多代码才能使其工作。

如果您不需要任何终结器代码,那么使用所有者引用也可以派上用场,因为在删除自定义资源时,kubernetes 会自动删除您拥有的资源(部署)。

关于amazon-web-services - 创建k8s资源并等待完成继续下一步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66321672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com