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

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?

勾选What to do