【问题标题】:Getting my k8s microservice application's non-namespaced dependancies获取我的 k8s 微服务应用程序非命名空间依赖项
【发布时间】:2021-06-06 18:57:16
【问题描述】:

如果我在命名空间中有一个微服务应用程序,我可以使用 k8s api 轻松获取该命名空间中的所有命名空间资源。但是,我无法查看微服务应用程序正在使用哪些非命名空间资源。如果我想查看我的非命名空间资源,我只能一次查看它们,而没有指示哪些是微服务应用程序中的依赖项。

如何找到与我的应用程序相关的依赖项?我希望能够引用应用的命名空间资源正在使用的 PersistentVolumes、StorageClasses、ClusterRoles 等内容。

【问题讨论】:

  • 我还没有见过这样的工具。但也许 k9scli 可以。我还没有详细查看。
  • 所以你的整个应用程序只在一个命名空间中。您是否在这些命名空间资源中使用任何标签/选择器?您在这个特定的命名空间中还有其他内容吗?列出所有非命名空间资源的简单方法,但仅列出具有特定命名空间的依赖项可能很粗糙。
  • @PjoterS 我希望有一个不依赖于标签/选择器的解决方案,以防您想将此方法用于您自己制作的应用程序。命名空间资源我当然可以做,还没有找到非命名空间的东西。

标签: kubernetes containers microservices client-go kubernetes-go-client


【解决方案1】:

您的代码在命名空间内的 pod 容器中运行,使用使用 pod.spec.serviceAccountName 设置的 serviceaccount 运行。 如果未设置,它将使用默认服务帐户运行

您需要创建一个 clusterRole 以授予对集群范围资源特定动词的访问权限,然后在 pod 命名空间中通过 roleBinding将此 clusterRole 分配给服务帐户> 针对之前创建的clusterRole。

然后,您的 pod,使用 kubernetes 客户端,并使用“集群内配置”身份验证方法,将能够查询 apiserver 以获取/列出/监视/删除/补丁......上述集群范围的资源.

【讨论】:

  • 这样的查询会是什么样子?它只能区分我的应用程序正在使用的资源吗?我在 apiserver 上找不到看起来会执行此操作的查询。
  • 听起来您真正想要的是某种跟踪结合您从 pod 名称构建的图表,然后通过 ownerref 查找父级及其父级。然后,您将查询将您的 pod 标签作为选择器的服务。然后你会查询你的 pod 使用的 pvc 并找到它是 pv 等等......
  • 由于没有对非命名空间资源的引用,是否必须根据类型单独找到它们?对于 PV,我可以使用 PVC,但对于 clusterroles,我需要查询所有这些并整理出与应用程序无关的那些。对于卷,我需要查看 volumeMounts 的所有资源。每种非命名空间资源类型都有独特的搜索方式。
  • 是的,会很乏味
【解决方案2】:

这绝对是一项不平凡的任务,因为dependency 可以通过多种方式发挥作用:每当一个对象“使用”另一个对象时,我们就可以识别出依赖关系。问题是这种“使用”关系可以采取多种形式:例如,Pod 可以在其定义中引用Volume(这将是一种直接依赖关系),但也可以使用PersistentVolumeClaim 这将然后通过使用 StorageClass 来实例化 PV —— 这些关系只有在应用 YAML 定义的运行时为 Kubernetes 所知。

换句话说:

  • 要追踪依赖关系,您必须检查正在使用的资源的 YAML 描述,了解每个资源的语义:每个资源中没有单个 depends: 值,但需要遵循例如 spec.storageClassPVCspec.volumes:Pod 等。
  • 在某些情况下,这甚至还不够:例如,要匹配 ServicesPods 这甚至还不够,因为必须匹配每一侧的端口。
  • 所有这些都需要通过从正在运行的 K8s 集群中提取 YAML 来完成,因为资源之间的某些关系在实例化之前是未知的。

您可以查看 Daniele Polencic 的 How do you visualise dependencies in your Kubernetes YAML files? 文章,其中展示了一些可用于可视化依赖关系的工具:

没有任何静态工具可以分析 YAML 文件。但是您可以使用Weave ScopeKubeView 可视化集群中的依赖关系,或者使用Istio 跟踪流量。

【讨论】:

    猜你喜欢
    • 2021-09-13
    • 1970-01-01
    • 2019-02-02
    • 2021-10-13
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多