乐趣区

关于k8s:Kubernetes如何自动检测和处理弃用的API

作者:Stepan Stipl,DoiT International 高级云架构师。客座文章最后在 DoiT International 博客上发表。

随着 Kubernetes 1.16 可用一段时间,并开始在许多托管 Kubernetes 平台上迟缓推出,你可能据说过 API 弃用(deprecation)。尽管解决起来相当简略,然而如果无人参加,这种更改可能会重大地中断你的服务。

API 弃用是什么?

随着 Kubernetes 的个性集的倒退,API 也必须倒退以反对这种变动。有一些规定旨在保障兼容性和稳定性。这种状况不会在每个版本中都产生,但最终,你将不得不应用新的 API 版本和格局,因为旧的 API 将不再受反对。

为什么这对于 1.16 版本如此重要?

在最近几个 K8s 版本中保留了一些弃用的 API,最终在 Kubernetes 1.16 版本中被齐全删除。即以下 API 组和版本:

  • Deployment — extensions/v1beta1, apps/v1beta1 and apps/v1beta2
  • NetworkPolicy — extensions/v1beta1
  • PodSecurityPolicy — extensions/v1beta1
  • DaemonSet — extensions/v1beta1 and apps/v1beta2
  • StatefulSet — apps/v1beta1 and apps/v1beta2
  • ReplicaSet — extensions/v1beta1, apps/v1beta1 and apps/v1beta2

如果尝试在 1.16 中应用其中之一创立资源,操作将会失败。

如何查看我是否受到影响?

你能够手动遍历所有清单,但这可能相当耗时。如果有多个团队部署到集群中,或者在一个中央没有以后的所有清单,那么很容易失落一些清单,并且可能十分不理论。这就是 kubent(Kube-No-Trouble)来帮忙的中央。

问题是什么?

用于创立给定资源的 API 版本的信息通常是不容易找到,因为资源总是在外部转换为首选存储版本并存储在首选存储版本中。然而。如果你应用 kubectl 或 Helm 来部署资源,原始清单也存储在集群中,咱们能够利用它。如果是 kubectl,则模式为 kubectl.kubernetes.io/last-applied-configuration 正文;如果是 Helm,则模式为 ConfigMap 或 Secret。

如何解决弃用产生的问题

最简略的办法是装置:

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

这将把 kubent 的最新版本装置到 /usr/local/bin 中。

(如果你和我一样,不置信他人在博客文章中公布的随机脚本,请下载针对你的平台的最新版本,而后解压缩到你喜爱的任何中央。)

配置 kubectl 的以后上下文,以指向你想要检查和运行 kubent 工具的集群:

图 1:kubent 运行的示例输入

Kubent 将连贯到你的集群,检索所有可能受到影响的资源,扫描并打印那些受到影响的资源的摘要。

你还能够应用 -f json 标记来取得 JSON 格局的输入,这更适宜让你将其集成到你的 CI/CD 流水线中或进一步处理结果。对于可用配置选项的更多细节在 doitintl/kube-no-trouble 仓库的 README 文件中形容。

我应该如何解决检测到的资源?

在某些状况下,这就像扭转 manifest 中的 apiVersion 一样简略,但在其余状况下,构造可能曾经扭转,须要调整。另外,要留神,版本之间有很多默认值会发生变化(对于这方面的好文章是 David Schweikert 的 Kubernetes 1.16 API deprecations and changed defaults),因而,仅更改 apiVersion 并利用雷同的清单,就会失去不同的后果。例如,StatefulSet 的 updateStrategy.type 从 OnDelete 更改为 RollingUpdate,导致了十分不同的行为。

以前应用的 kubectl convert 命令现已弃用,可能不能依据后面提到的默认值正确地转换资源。

最好的办法可能是简略地利用资源(如果你应用 kubent 检测到它们,那么你曾经有了这些资源)并从 API 检索新版本。这将确保资源被正确地转换为新版本。你可能曾经留神到,kubectl 在某种程度上不确定地返回的版本。要申请一个特定的 API 版本,应用残缺的模式:

kubectl get ingress.v1beta1.extensions -o yaml

欢送反馈!

心愿这将帮忙你检测和解决 Kubernetes 集群中弃用的 API,免得这些 API 给你带来任何麻烦。

当初 kubent 工具还为时过早,如果你感觉它有用,我很乐意听到任何评论和倡议。平安的航行!⛵⛵⛵

额定参考:

  • Kube-No-Trouble – kubent GitHub 仓库 – https://github.com/doitintl/k…
  • 1.16 中删除了弃用 API:Vallery Lancey 博客文章通知你须要晓得的 – https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/

在 DoiT International 与 Stepan 工作!在咱们的职业网站上申请工程职位。

点击浏览网站原文。


CNCF (Cloud Native Computing Foundation) 成立于 2015 年 12 月,隶属于 Linux  Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。咱们通过将最前沿的模式民主化,让这些翻新为公众所用。扫描二维码关注 CNCF 微信公众号。

退出移动版