Kubernetes 如何处理同一资源的多个 API 版本?
How does Kubernetes handle multiple API versions for the same resource?
在 Kubernetes 中,我们可以使用不同的 API 版本请求资源:
kubectl get roles.v1.rbac.authorization.k8s.io foo -n bar -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: foo
namespace: bar
rules:
- apiGroups:
- ""
resources:
- endpoints
- secrets
verbs:
- create
- get
- watch
- list
- update
kubectl get roles.v1beta1.rbac.authorization.k8s.io foo -n bar -oyaml
Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: foo
namespace: bar
rules:
- apiGroups:
- ""
resources:
- endpoints
- secrets
verbs:
- create
- get
- watch
- list
- update
- 用于创建资源的 API 版本是否会对存储在 ETCD 中的资源产生影响?
- 如果在较新的 API 版本 (v1) 尚不存在时存储了资源,那么在删除较旧的 API 版本 (v1beta1) 时是否会出现问题?
- 升级到删除
rbac.authorization.k8s.io/v1beta1
的 Kubernetes v1.22 是否会破坏已经 created/stored 的资源?
- 如何处理不同 API 版本之间的资源转换?
If a resource was stored when the newer API version (v1) did not exist
yet, would this be a problem when the older API version (v1beta1) is
removed?
Kubernetes 支持庞大的弹性弃用系统,允许您及时创建、迁移和维护 API 版本,但是(跳到您的下一个问题,您有时应该手动升级 API 版本到最新的)
您可以检查 Kubernetes Deprecation Policy guide,这是保持集群正常工作的重要部分。
主要规则:
- 规则 #1:API 元素只能通过增加 API 组的版本来删除。
- 规则 #2:API 对象必须能够在给定版本中的 API 版本之间往返而不会丢失信息,但在某些版本中不存在的整个 REST 资源除外版本。
- 规则 #3:至少在 stable 发布新的 API 版本之前,给定音轨中的 API 版本可能不会被弃用。
- 规则 #4a:除了每条轨道中的最新 API 版本外,较旧的 API 版本在宣布弃用一段时间后必须得到支持。
- 规则 #4b:给定组的“首选”API 版本和“存储版本”可能不会升级,直到发布了同时支持新版本和先前版本的版本
您还可以检查 table,它描述了在一系列后续版本中支持哪些 API 版本。
Would upgrading to Kubernetes v1.22, which removes
rbac.authorization.k8s.io/v1beta1, break already created/stored
resources?
我想是的,你必须根据 1.22 RBAC deprecation resources
做一些动作
How are resource transformations between different API versions
handled?
在 Kubernetes 中,我们可以使用不同的 API 版本请求资源:
kubectl get roles.v1.rbac.authorization.k8s.io foo -n bar -oyaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: foo
namespace: bar
rules:
- apiGroups:
- ""
resources:
- endpoints
- secrets
verbs:
- create
- get
- watch
- list
- update
kubectl get roles.v1beta1.rbac.authorization.k8s.io foo -n bar -oyaml
Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
name: foo
namespace: bar
rules:
- apiGroups:
- ""
resources:
- endpoints
- secrets
verbs:
- create
- get
- watch
- list
- update
- 用于创建资源的 API 版本是否会对存储在 ETCD 中的资源产生影响?
- 如果在较新的 API 版本 (v1) 尚不存在时存储了资源,那么在删除较旧的 API 版本 (v1beta1) 时是否会出现问题?
- 升级到删除
rbac.authorization.k8s.io/v1beta1
的 Kubernetes v1.22 是否会破坏已经 created/stored 的资源? - 如何处理不同 API 版本之间的资源转换?
If a resource was stored when the newer API version (v1) did not exist yet, would this be a problem when the older API version (v1beta1) is removed?
Kubernetes 支持庞大的弹性弃用系统,允许您及时创建、迁移和维护 API 版本,但是(跳到您的下一个问题,您有时应该手动升级 API 版本到最新的)
您可以检查 Kubernetes Deprecation Policy guide,这是保持集群正常工作的重要部分。
主要规则:
- 规则 #1:API 元素只能通过增加 API 组的版本来删除。
- 规则 #2:API 对象必须能够在给定版本中的 API 版本之间往返而不会丢失信息,但在某些版本中不存在的整个 REST 资源除外版本。
- 规则 #3:至少在 stable 发布新的 API 版本之前,给定音轨中的 API 版本可能不会被弃用。
- 规则 #4a:除了每条轨道中的最新 API 版本外,较旧的 API 版本在宣布弃用一段时间后必须得到支持。
- 规则 #4b:给定组的“首选”API 版本和“存储版本”可能不会升级,直到发布了同时支持新版本和先前版本的版本
您还可以检查 table,它描述了在一系列后续版本中支持哪些 API 版本。
Would upgrading to Kubernetes v1.22, which removes rbac.authorization.k8s.io/v1beta1, break already created/stored resources?
我想是的,你必须根据 1.22 RBAC deprecation resources
做一些动作How are resource transformations between different API versions handled?