【问题标题】:Reconcile dependent objects k8s controller runtime协调依赖对象 k8s 控制器运行时
【发布时间】:2020-04-14 15:19:13
【问题描述】:

我正在尝试实现一个 k8s 控制器,它应该监视两个自定义资源,然后通过创建部署、服务等来协调它们。问题是应该首先创建自定义资源 A 和自定义资源 B(当然我们不'不知道顺序)然后我应该执行核对。在 Reconcile 函数中,我可以一次访问其中一个。在继续协调之前确保两者都已创建的最佳方法是什么?

【问题讨论】:

  • 也许您可以尝试使用container probes 来检查是否创建了资源?另一个想法可能是使用helmchart hooks,所以它可能会等到这些资源被创建,然后执行创建部署、服务等。如果这就是您要找的,请告诉我。

标签: kubernetes


【解决方案1】:

正如我在 cmets 中提到的,您可以尝试使用任一

Container probes

探测是由 kubelet 在容器上定期执行的诊断。为了执行诊断,kubelet 调用由 Container 实现的 Handler。共有三种类型的处理程序:

ExecAction:在 Container 内执行指定的命令。如果命令以状态码 0 退出,则认为诊断成功。

TCPSocketAction:在指定端口上针对容器的 IP 地址执行 TCP 检查。如果端口打开,则认为诊断成功。

HTTPGetAction:在指定端口和路径上针对容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于 200 且小于 400,则认为诊断成功。


每个探测都有以下三种结果之一:

成功:容器通过了诊断。 失败:容器未能通过诊断。 未知:诊断失败,因此不应采取任何措施。


kubelet 可以选择对正在运行的容器执行三种探测并做出反应:

livenessProbe:表示Container是否正在运行。如果 liveness 探测失败,kubelet 会杀死 Container,Container 会受到其重启策略的约束。如果 Container 不提供 liveness probe,则默认状态为 Success。

readinessProbe:指示容器是否准备好为请求提供服务。如果就绪探测失败,端点控制器会从与 Pod 匹配的所有服务的端点中删除 Pod 的 IP 地址。初始延迟之前的默认就绪状态是失败。如果 Container 不提供就绪探测,则默认状态为 Success。

startupProbe:指示Container内的应用程序是否启动。如果提供了启动探测,则所有其他探测都将被禁用,直到它成功为止。如果启动探测失败,kubelet 会杀死 Container,Container 会受到其重启策略的约束。如果 Container 不提供启动探测,则默认状态为 Success。

其他链接:

Helm

Helm 是一个管理图表的工具。图表是预先配置的 Kubernetes 资源包。

使用 Helm 来:

  • 查找并使用打包为 Helm Charts 的流行软件在​​ Kubernetes 中运行
  • 以 Helm 图表的形式共享您自己的应用程序
  • 为您的 Kubernetes 应用创建可重现的构建
  • 智能管理您的 Kubernetes 清单文件
  • 管理 Helm 包的发布

根据您的情况,您可以使用helm hooks,因此它可能会等到这些资源被创建后再执行创建部署、服务等。

其他链接:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多