最近在做Kubernetes 的系统升级(升级至1.22.10),经过检查发现系统中还在使用一些已经废弃的API,主要是一些ingress nginx配置
Kubernetes 1.22版本中废弃的API包括:
【变更】MutatingWebhookConfiguration和ValidatingWebhookConfiguration资源不再支持admissionregisration.k8s.io/v1beta1 API。如果使用旧版本API创建准入或变换Webhook配置,会导致配置创建失败,进而影响Webhook服务的使用,请尽快使用admissionregisration.k8s.io/v1替代。
【变更】CustomResourceDefinition资源不再支持apiextensions.k8s.io/v1beta1 API。如果使用旧版本API创建自定义资源定义,会导致定义创建失败,进而影响调和(reconcile)该自定资源的控制器,请尽快使用apiextensions.k8s.io/v1替代。
【变更】APIService资源不再支持apiregistration.k8s.io/v1beta1API。如果使用旧版本API管理Kubernetes扩展API服务,会影响Kubernetes扩展API的服务,请尽快使用apiregistration.k8s.io/v1替代。
【变更】TokenReview资源不再支持authentication.k8s.io/v1beta1 API。如果使用旧版本API进行授权的验证,会导致验证失败,进而影响应用的正常工作,请尽快使用authentication.k8s.io/v1替代。
【变更】SubjectAccessReview资源不再支持authorization.k8s.io/v1beta1 API。如果使用旧版本API进行授权的验证,会导致验证失败,进而影响应用的正常工作,请尽快使用authorization.k8s.io/v1替代。
【变更】CertificateSigningRequest资源不再支持certificate.k8s.io/v1beta1 API。如果使用旧版本API请求签发证书,会导致签发失败,请使用certificate.k8s.io/v1替代。
【变更】Lease资源不再支持coordination.k8s.io/v1beta1 API。如果使用旧版本API进行选主操作,会导致选主失败,进而影响应用的正常工作,请尽快使用coordination.k8s.io/v1替代。
【变更】Ingress和IngressClass资源不再支持networking.k8s.io/v1beta1和extensions/v1beta1 API。如果使用旧版本API管理Ingress,会影响应用对外暴露服务,请尽快使用networking.k8s.io/v1替代。
【变更】ClusterRole、ClusterRoleBinding、Role和RoleBinding资源不再支持rbac.authorization.k8s.io/v1beta1 API。如果使用旧版本API管理RBAC资源,会影响应用的权限服务,甚至无法在集群内正常使用,请尽快使用rbac.authorization.k8s.io/v1替代。
【变更】CSIDriver、CSINode、StorageClass和VolumeAttachment资源不再支持storage.k8s.io/v1beta1 API。如果使用旧版本API管理CSI资源,会影响集群内的存储服务提供,导致集群内无法正常使用CSI,请尽快使用storage.k8s.io/v1替代。
【变更】PriorityClass资源不再支持scheduling.k8s.io/v1beta1 API。如果使用旧版本API管理集群内的容器组优先类型,会导致操作失败,请使用scheduling.k8s.io/v1替代。
【废弃】Dockershim目前被标记为废弃,计划于1.24版本后移除。
我们本次需要替换的主要是:
【变更】Ingress和IngressClass资源不再支持networking.k8s.io/v1beta1和extensions/v1beta1 API。如果使用旧版本API管理Ingress,会影响应用对外暴露服务,请尽快使用networking.k8s.io/v1替代。
但是networking.k8s.io/v1beta1的配置编写格式和networking.k8s.io/v1的配置编写格式是不一样的
networking.k8s.io/v1beta1
- path:
backend:
serviceName:
servicePort:
networking.k8s.io/v1 编写格式
path:
pathType: ImplementationSpecific
- backend:
service:
name:
port:
number:
可以看到变化还是比较大的,如果一个域名的配置全部都重新改格式的话,工作量太大,这时候我们就可以使用kubectl convert插件去进行格式转化:
二、kubectl convert
转换配置文件为不同的API版本,支持YAML和JSON格式。
该命令将配置文件名,目录或URL作为输入,并将其转换为指定的版本格式,如果目标版本未指定或不支持,则转换为最新版本。
默认输出将以YAML格式打印出来,可以使用- o选项改变输出格式。
语法
可以使用kubectl-convert命令(kubectl convertv1.20 之前)自动转换现有对象:
kubectl convert -f ingress.yaml
将“ingress.yaml”指定的资源的实时状态转换为最新版本
kubectl convert -f ingress.yaml --local -o json
将当前目录下的所有文件转换为最新版本,并将其全部创建。
kubectl convert -f . | kubectl create -f -
将jingress.yaml API版本替换为 networking.k8s.io/v1,并转换格式后输入到新文件内
kubectl convert -f ingress.yaml --output-version networking.k8s.io/v1 > ingress_new.yaml
请注意,这可能会使用非理想的默认值。要了解有关特定资源的更多信息,请查看 KubernetesAPI参考