轻松检测 Kubernetes 上已弃用的资源

Easily detect deprecated resources on Kubernetes

我们刚刚收到一封来自 GCP 的电子邮件,通知我们我们的集群目前正在使用已弃用的 Beta APIs,我们需要升级到最新的 API 版本。

我们在多个命名空间中有 3 个集群 运行 多个资源,因此必须遍历所有资源来检测哪些已过时会有点痛苦。

我们控制的那些,例如服务、部署、horizo​​ntalpodautoscalers、poddisruptionbudgets 等,那些已经更新了。

但是我们有很多服务的清单文件是自动生成的,例如Halyard生成的Spinnaker服务,或者Elastic Operator生成的ElasticSearch等

有没有什么方法可以按 API 版本过滤所有资源,或者有什么方法可以检测所有命名空间中已弃用的资源?

为了查看您的集群API支持哪些

# Print out supported API's in the cluster
kubectl api-versions

为了查看已弃用的 API,您可以使用此工具。
这正是您所要求的,它将打印包含已弃用 API 的资源列表。

https://github.com/doitintl/kube-no-trouble

# sample output from the official docs:


$./kubent
6:25PM INF >>> Kube No Trouble `kubent` <<<
6:25PM INF Initializing collectors and retrieving data
6:25PM INF Retrieved 103 resources from collector name=Cluster
6:25PM INF Retrieved 132 resources from collector name="Helm v2"
6:25PM INF Retrieved 0 resources from collector name="Helm v3"
6:25PM INF Loaded ruleset name=deprecated-1-16.rego
6:25PM INF Loaded ruleset name=deprecated-1-20.rego
_____________________________________________________________________
>>> 1.16 Deprecated APIs <<<
---------------------------------------------------------------------
KIND         NAMESPACE     NAME                    API_VERSION
Deployment   default       nginx-deployment-old    apps/v1beta1
Deployment   kube-system   event-exporter-v0.2.5   apps/v1beta1
Deployment   kube-system   k8s-snapshots           extensions/v1beta1
Deployment   kube-system   kube-dns                extensions/v1beta1
_____________________________________________________________________
>>> 1.20 Deprecated APIs <<<
---------------------------------------------------------------------
KIND      NAMESPACE   NAME           API_VERSION
Ingress   default     test-ingress   extensions/v1beta1

正在安装kubent

# install `kubent`
sh -c "$(curl -sSL 'https://git.io/install-kubent')"

运行 kubent

kubent


其他类似工具:

kdave 检查集群中任何已弃用或删除的 apiVersions 并以 Prometheus 指标格式导出它们。它从部署的 helm 版本中收集这些 apiVersions 它可以让你有知名度并回答这些问题

  • 集群中有多少应用程序使用已弃用的 apiVersions
  • 集群中有多少应用程序使用已删除的 apiVersions
  • 是否会在下一个版本中删除已弃用的 apiVersions 或 接下来的两个版本
  • 这些已弃用或删除的替换 apiVersions 是什么 api版本

kdave https://github.com/wayfair-incubator/kdave 和 k8s-used-api-versionshttps://github.com/wayfair-incubator/k8s-used-api-versions

https://www.linkedin.com/pulse/kubernetes-used-api-versions-operator-ahmed-elbakry/ https://www.linkedin.com/pulse/kubernetes-deprecated-api-versions-exporter-ahmed-elbakry/