Skip to content

Commit

Permalink
Cleanup in-place upgrade CRDs (#7305)
Browse files Browse the repository at this point in the history
  • Loading branch information
abhinavmpandey08 authored Jan 17, 2024
1 parent a2916f2 commit 05f3d5f
Show file tree
Hide file tree
Showing 13 changed files with 495 additions and 147 deletions.
109 changes: 94 additions & 15 deletions config/crd/bases/anywhere.eks.amazonaws.com_controlplaneupgrades.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,56 +37,135 @@ spec:
spec:
description: ControlPlaneUpgradeSpec defines the desired state of ControlPlaneUpgrade.
properties:
cluster:
controlPlane:
description: ControlPlane is a reference to the KubeadmControlPlane
object to upgrade.
properties:
kind:
apiVersion:
description: API version of the referent.
type: string
name:
fieldPath:
description: 'If referring to a piece of an object instead of
an entire object, this string should contain a valid JSON/Go
field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within
a pod, this would take on a value like: "spec.containers{name}"
(where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]"
(container with index 2 in this pod). This syntax is chosen
only to have some well-defined way of referencing a part of
an object. TODO: this design is not final and this field is
subject to change in the future.'
type: string
type: object
controlPlane:
properties:
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
type: string
namespace:
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
type: string
resourceVersion:
description: 'Specific resourceVersion to which this reference
is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
type: string
uid:
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
type: string
type: object
coreDNSVersion:
type: string
etcdVersion:
type: string
kubeadmClusterConfig:
type: string
kubeletVersion:
description: EtcdVersion refers to the version of ETCD to upgrade
to.
type: string
kubernetesVersion:
description: KubernetesVersion refers to the Kubernetes version to
upgrade the control planes to.
type: string
machinesRequireUpgrade:
description: MachinesRequireUpgrade is a list of references to CAPI
machines that need to be upgraded.
items:
description: "ObjectReference contains enough information to let
you inspect or modify the referred object. --- New uses of this
type are discouraged because of difficulty describing its usage
when embedded in APIs. 1. Ignored fields. It includes many fields
which are not generally honored. For instance, ResourceVersion
and FieldPath are both very rarely valid in actual usage. 2.
Invalid usage help. It is impossible to add specific help for
individual usage. In most embedded usages, there are particular
\ restrictions like, \"must refer only to types A and B\" or
\"UID not honored\" or \"name must be restricted\". Those
cannot be well described when embedded. 3. Inconsistent validation.
\ Because the usages are different, the validation rules are different
by usage, which makes it hard for users to predict what will happen.
\ 4. The fields are both imprecise and overly precise. Kind is
not a precise mapping to a URL. This can produce ambiguity during
interpretation and require a REST mapping. In most cases, the
dependency is on the group,resource tuple and the version
of the actual struct is irrelevant. 5. We cannot easily change
it. Because this type is embedded in many locations, updates
to this type will affect numerous schemas. Don't make new
APIs embed an underspecified API type they do not control. \n
Instead of using this type, create a locally provided and used
type that is well-focused on your reference. For example, ServiceReferences
for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
."
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: 'If referring to a piece of an object instead of
an entire object, this string should contain a valid JSON/Go
field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within
a pod, this would take on a value like: "spec.containers{name}"
(where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]"
(container with index 2 in this pod). This syntax is chosen
only to have some well-defined way of referencing a part of
an object. TODO: this design is not final and this field is
subject to change in the future.'
type: string
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
type: string
namespace:
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
type: string
resourceVersion:
description: 'Specific resourceVersion to which this reference
is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
type: string
uid:
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
type: string
type: object
type: array
required:
- cluster
- controlPlane
- kubeadmClusterConfig
- kubeletVersion
- etcdVersion
- kubernetesVersion
- machinesRequireUpgrade
type: object
status:
description: ControlPlaneUpgradeStatus defines the observed state of ControlPlaneUpgrade.
properties:
ready:
description: Ready denotes that the all control planes have finished
upgrading and are ready.
type: boolean
requireUpgrade:
description: RequireUpgrade is the number of machines that still need
to be upgraded.
format: int64
type: integer
upgraded:
description: Upgraded is the number of machines that have been upgraded.
format: int64
type: integer
type: object
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,39 +38,112 @@ spec:
description: MachineDeploymentUpgradeSpec defines the desired state of
MachineDeploymentUpgrade.
properties:
cluster:
properties:
kind:
type: string
name:
type: string
type: object
kubeadmClusterConfig:
type: string
kubeletVersion:
type: string
kubernetesVersion:
description: KubernetesVersion refers to the Kubernetes version to
upgrade the control planes to.
type: string
machineDeployment:
description: MachineDeployment is a reference to the KubeadmControlPlane
object to upgrade.
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: 'If referring to a piece of an object instead of
an entire object, this string should contain a valid JSON/Go
field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within
a pod, this would take on a value like: "spec.containers{name}"
(where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]"
(container with index 2 in this pod). This syntax is chosen
only to have some well-defined way of referencing a part of
an object. TODO: this design is not final and this field is
subject to change in the future.'
type: string
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
type: string
namespace:
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
type: string
resourceVersion:
description: 'Specific resourceVersion to which this reference
is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
type: string
uid:
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
type: string
type: object
machinesRequireUpgrade:
description: MachinesRequireUpgrade is a list of references to CAPI
machines that need to be upgraded.
items:
description: "ObjectReference contains enough information to let
you inspect or modify the referred object. --- New uses of this
type are discouraged because of difficulty describing its usage
when embedded in APIs. 1. Ignored fields. It includes many fields
which are not generally honored. For instance, ResourceVersion
and FieldPath are both very rarely valid in actual usage. 2.
Invalid usage help. It is impossible to add specific help for
individual usage. In most embedded usages, there are particular
\ restrictions like, \"must refer only to types A and B\" or
\"UID not honored\" or \"name must be restricted\". Those
cannot be well described when embedded. 3. Inconsistent validation.
\ Because the usages are different, the validation rules are different
by usage, which makes it hard for users to predict what will happen.
\ 4. The fields are both imprecise and overly precise. Kind is
not a precise mapping to a URL. This can produce ambiguity during
interpretation and require a REST mapping. In most cases, the
dependency is on the group,resource tuple and the version
of the actual struct is irrelevant. 5. We cannot easily change
it. Because this type is embedded in many locations, updates
to this type will affect numerous schemas. Don't make new
APIs embed an underspecified API type they do not control. \n
Instead of using this type, create a locally provided and used
type that is well-focused on your reference. For example, ServiceReferences
for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533
."
properties:
apiVersion:
description: API version of the referent.
type: string
fieldPath:
description: 'If referring to a piece of an object instead of
an entire object, this string should contain a valid JSON/Go
field access statement, such as desiredState.manifest.containers[2].
For example, if the object reference is to a container within
a pod, this would take on a value like: "spec.containers{name}"
(where "name" refers to the name of the container that triggered
the event) or if no container name is specified "spec.containers[2]"
(container with index 2 in this pod). This syntax is chosen
only to have some well-defined way of referencing a part of
an object. TODO: this design is not final and this field is
subject to change in the future.'
type: string
kind:
description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
name:
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
type: string
namespace:
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
type: string
resourceVersion:
description: 'Specific resourceVersion to which this reference
is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
type: string
uid:
description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
type: string
type: object
type: array
required:
- cluster
- kubeadmClusterConfig
- kubeletVersion
- kubernetesVersion
- machineDeployment
- machinesRequireUpgrade
Expand All @@ -80,11 +153,17 @@ spec:
of MachineDeploymentUpgrade.
properties:
ready:
description: Ready denotes that the all machines in the MachineDeployment
have finished upgrading and are ready.
type: boolean
requireUpgrade:
description: RequireUpgrade is the number of machines in the MachineDeployment
that still need to be upgraded.
format: int64
type: integer
upgraded:
description: Upgraded is the number of machines in the MachineDeployment
that have been upgraded.
format: int64
type: integer
type: object
Expand Down
13 changes: 9 additions & 4 deletions config/crd/bases/anywhere.eks.amazonaws.com_nodeupgrades.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,18 +36,19 @@ spec:
spec:
description: NodeUpgradeSpec defines the desired state of NodeUpgrade.
properties:
coreDNSVersion:
type: string
etcdVersion:
description: EtcdVersion refers to the version of ETCD to upgrade
to. This field is optional and only gets used for control plane
nodes.
type: string
firstNodeToBeUpgraded:
description: FirstNodeToBeUpgraded signifies that the Node is the
first node to be upgraded. This flag is only valid for control plane
nodes and ignored for worker nodes.
type: boolean
kubernetesVersion:
description: 'TODO(in-place): Determine if there''s a way to get these
dynamically instead of expecting it from the CRD.'
description: KubernetesVersion refers to the Kubernetes version to
upgrade the node to.
type: string
machine:
description: Machine is a reference to the CAPI Machine that needs
Expand Down Expand Up @@ -94,8 +95,12 @@ spec:
description: NodeUpgradeStatus defines the observed state of NodeUpgrade.
properties:
completed:
description: Completed denotes that the upgrader has completed running
all the operations and the node is successfully upgraded.
type: boolean
conditions:
description: Conditions defines current state of the NodeUpgrade,
including the state of init containers, that facilitate the upgrade.
items:
description: Condition defines an observation of a Cluster API resource
operational state.
Expand Down
Loading

0 comments on commit 05f3d5f

Please sign in to comment.