我正在将集群升级到 Kubernetes v1.16。有一些关于弃用的说明在该更新中。其中一个注意事项是删除了apiVersion
extensions/v1beta1
for ,升级前Deployment
应使用。apiVersion
apps/v1
这听起来很简单,但我却不知道如何真正实现这种改变。
我们更新了 YAML 文件以包含较新的apiVersion
;也就是说,包含Deployment
以以下内容开头的 YAML 文件,
apiVersion: apps/v1
kind: Deployment
但是,如果我们kubectl apply
将此发送到我们的服务器,然后将kubectl get deployment -o yaml
其返回以验证更改,还没有更新;apiVerison
服务器报告的仍然是:
apiVersion: extensions/v1beta1
kind: Deployment
metadata
annotations:
[...]
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion": "apps/v1", ...}
我metadata.annotations
在这里包含了字段;您可以看到其中的注释kubectl
甚至承认它正在应用具有正确名称的清单apiVersion
,但资源仍然返回旧版本!
链接的弃用通知还谈到了使用kubectl convert
;我们也尝试过。AFAICT,kubectl convert
仅适用于资源的离线 YAML 表示,甚至kubectl apply
对的结果进行 -ingkubectl convert
也不会改变上述行为。
我也尝试kubectl patch
修补该特定字段,但再次验证表明没有发生实际变化。 (输出kubectl patch
也表明没有任何变化。)
我实际上如何更新此资源的 Kubernetes 版本?
(一些小说明:这个集群是一个 Azure AKS 实例;Azure 实际上将此资源标记为需要注意。)
答案1
感谢向后兼容性!!!
kubectl get deployment XXX
显然是模棱两可的,因为服务器在多个 api 组中有部署。当资源存在于多个 api 组中时,kubectl 将使用包含该资源的服务器发布的发现文档中列出的第一个组。为了向后兼容,这是扩展 api 组。
尝试:
kubectl get deploy.extensions XXX
并
kubectl get deploy.apps XXX
验证您的部署是否确实存在于两个 api 组中。
https://github.com/kubernetes/kubernetes/issues/58131#issuecomment-356823588
答案2
- 安装/配置 kubectl-convert 插件
- kubectl-convert -f 已弃用版本.yaml --输出版本 networking.k8s.io/v1