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

10
我们刚刚收到了GCP的电子邮件,通知我们我们的集群目前正在使用已过时的Beta API,需要升级到最新的API版本。
我们有3个集群在多个命名空间中运行多个资源,因此必须检测哪些资源已经过时,这可能会有些麻烦。
我们控制的资源,如服务、部署、水平自动伸缩、容忍故障的预算等,已经更新了。
但是我们有许多服务的清单文件都是自动生成的,例如由Halyard生成的Spinnaker服务或由Elastic Operator生成的ElasticSearch等。
是否有任何一种方法可以按API版本筛选所有资源,或者检测所有命名空间中的过时资源?
2个回答

26
为了查看您的集群支持哪些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

enter image description here


其他类似工具:


2
哇,我从来没有想到会有这样完美的解决方案!非常感谢你。 - Mauricio
不客气 :-) 很高兴能帮助到您 - CodeWizard
安装命令不再起作用了 :( - Thomas
工作得很好。但在我的情况下,我遇到了一个问题。它与我的kube-config有关。 因此,请参考此链接。 我需要更新我的apiVersion: 从'apiVersion:client.authentication.k8s.io/v1alpha1'到'apiVersion:client.authentication.k8s.io/v1beta1'。 - agfe2
还有一个自制的软件包。只需使用brew install kubent进行安装即可。 - schmichri

1
kdave检查集群中是否存在已弃用或删除的apiVersions,并以Prometheus指标格式导出它们。它从部署的helm releases中收集这些apiVersions。它可以让您看到以下问题的答案:
  • 集群中有多少应用程序使用了已弃用的apiVersions
  • 集群中有多少应用程序使用了已删除的apiVersions
  • 已弃用的apiVersions是否会在下一个版本或下两个版本中被删除
  • 这些已弃用或已删除的apiVersions的替代apiVersions是什么
kdave https://github.com/wayfair-incubator/kdave 和 k8s-used-api-versions https://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/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接