From 42eea5f5a5d569b44c628b8c9f1646465f244c10 Mon Sep 17 00:00:00 2001 From: Jason DeTiberus Date: Mon, 14 Oct 2019 16:45:11 -0400 Subject: [PATCH] Add ControlPlane CAEP --- .../20191017-kubeadm-based-control-plane.md | 578 ++++++++++++++++++ .../controlplane/controlplane-init-1.plantuml | 47 ++ .../controlplane/controlplane-init-1.png | Bin 0 -> 48557 bytes .../controlplane/controlplane-init-2.plantuml | 52 ++ .../controlplane/controlplane-init-2.png | Bin 0 -> 49759 bytes .../controlplane/controlplane-init-3.plantuml | 51 ++ .../controlplane/controlplane-init-3.png | Bin 0 -> 46702 bytes .../controlplane/controlplane-init-4.plantuml | 39 ++ .../controlplane/controlplane-init-4.png | Bin 0 -> 22012 bytes .../controlplane/controlplane-init-6.plantuml | 52 ++ .../controlplane/controlplane-init-6.png | Bin 0 -> 54489 bytes .../controlplane/controlplane-init-7.plantuml | 55 ++ .../controlplane/controlplane-init-7.png | Bin 0 -> 53289 bytes .../images/machine-states-preboot/README.md | 27 - 14 files changed, 874 insertions(+), 27 deletions(-) create mode 100644 docs/proposals/20191017-kubeadm-based-control-plane.md create mode 100644 docs/proposals/images/controlplane/controlplane-init-1.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-1.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-2.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-2.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-3.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-3.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-4.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-4.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-6.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-6.png create mode 100644 docs/proposals/images/controlplane/controlplane-init-7.plantuml create mode 100644 docs/proposals/images/controlplane/controlplane-init-7.png delete mode 100644 docs/proposals/images/machine-states-preboot/README.md diff --git a/docs/proposals/20191017-kubeadm-based-control-plane.md b/docs/proposals/20191017-kubeadm-based-control-plane.md new file mode 100644 index 000000000000..de2d1fadba28 --- /dev/null +++ b/docs/proposals/20191017-kubeadm-based-control-plane.md @@ -0,0 +1,578 @@ +--- +title: Kubeadm Based Control Plane Management +authors: + - "@detiber” + - "@chuckha” + - "@randomvariable" + - "@dlipovetsky" +reviewers: + - "@ncdc" + - "@timothysc" + - "@vincepri" + - "@akutz" + - "@jaypipes" + - "@pablochacin" + - "@rsmitty" + - "@CecileRobertMichon" + - "@hardikdr" + - "@sbueringer" +creation-date: 2019-10-17 +last-updated: 2019-11-08 +status: implementable +--- + +# Kubeadm Based Control Plane Management + +## Table of Contents + +- [Control Plane Management](#control-plane-management) + - [Table of Contents](#table-of-contents) + - [Glossary](#glossary) + - [References](#references) + - [Summary](#summary) + - [Motivation](#motivation) + - [Goals](#goals) + - [Additional goals of the default kubeadm machine-based Implementation](#additional-goals-of-the-default-kubeadm-machine-based-implementation) + - [Non-Goals / Future Work](#non-goals--future-work) + - [Proposal](#proposal) + - [User Stories](#user-stories) + - [Identified features from user stories](#identified-features-from-user-stories) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [New API Types](#new-api-types) + - [Modifications required to existing API Types](#modifications-required-to-existing-api-types) + - [Behavioral Changes from v1alpha2](#behavioral-changes-from-v1alpha2) + - [Behaviors](#behaviors) + - [Create](#create) + - [Scale Up](#scale-up) + - [Scale Down](#scale-down) + - [Delete of the entire KubeadmControlPlane (kubectl delete controlplane my-controlplane)](#delete-of-the-entire-kubeadmcontrolplane-kubectl-delete-controlplane-my-controlplane) + - [Cluster upgrade (using create-swap-and-delete)](#cluster-upgrade-using-create-swap-and-delete) + - [Constraints and Assumptions](#constraints-and-assumptions) + - [Control plane healthcheck](#control-plane-healthcheck) + - [Adoption of pre-v1alpha3 Control Plane Machines](#adoption-of-pre-v1alpha3-control-plane-machines) + - [Code organization](#code-organization) + - [Risks and Mitigations](#risks-and-mitigations) + - [etcd membership](#etcd-membership) + - [Upgrade where changes needed to KubeadmConfig are not currently possible](#upgrade-where-changes-needed-to-kubeadmconfig-are-not-currently-possible) + - [Design Details](#design-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Alpha -> Beta Graduation](#alpha---beta-graduation) + - [Upgrade Strategy](#upgrade-strategy) + - [Alternatives](#alternatives) + - [Implementation History](#implementation-history) + +## Glossary + +The lexicon used in this document is described in more detail [here](https://github.com/kubernetes-sigs/cluster-api/blob/master/docs/book/src/reference/glossary.md). Any discrepancies should be rectified in the main Cluster API glossary. + +### References + +[Kubernetes Control Plane Management Overview](https://docs.google.com/document/d/1nlWKEr9OP3IeZO5W2cMd3A55ZXLOXcnc6dFu0K9_bms/edit#) + +## Summary + +This proposal outlines a new process for Cluster API to manage control plane machines as a single concept. This includes +upgrading, scaling up, and modifying the underlying image (e.g. AMI) of the control plane machines. + +The control plane covered by this document is defined as the Kubernetes API server, scheduler, controller manager, DNS +and proxy services, and the underlying etcd data store. + +## Motivation + +During 2019 we saw control plane management implementations in each infrastructure provider. Much like +bootstrapping was identified as being reimplemented in every infrastructure provider and then extracted into Cluster API +Bootstrap Provider Kubeadm (CABPK), we believe we can reduce the redundancy of control plane management across providers +and centralize the logic in Cluster API. We also wanted to ensure that any default control plane management that we +for the default implementation would not preclude the use of alternative control plane management solutions. + +### Goals + +- To establish new resource types for control plane management +- To support single node and multiple node control plane instances, with the requirement that the infrastructure provider supports some type of a stable endpoint for the API Server (Load Balancer, VIP, etc). +- To enable declarative orchestrated control plane upgrades +- To provide a default machine-based implementation using kubeadm +- To provide a kubeadm-based implementation that is infrastructure provider agnostic +- To enable declarative orchestrated replacement of control plane machines, such as to rollout an OS-level CVE fix. +- To manage a kubeadm-based, "stacked etcd" control plane +- To enable scaling of the number of control plane nodes +- To support pre-existing, user-managed, external etcd clusters +- To support only user-initiated remediation: + E.g. user deletes a Machine. Control Plane Provider reconciles by removing the corresponding etcd member and updating related metadata + +### Non-Goals / Future Work + +Non-Goals listed in this document are intended to scope bound the current v1alpha3 implementation and are subject to change based on user feedback over time. + +- To manage non-machine based topologies, e.g. + - Pod based control planes. + - Non-node control planes (i.e. EKS, GKE, AKS). +- To manage control plane deployments across failure domains, follow up work for this will be tracked on [this issue](https://github.com/kubernetes-sigs/cluster-api/issues/1647). +- To define a mechanism for providing a stable API endpoint for providers that do not currently have one, follow up work for this will be tracked on [this issue](https://github.com/kubernetes-sigs/cluster-api/issues/1687) +- To predefine the exact contract/interoperability mechanism for alternative control plane providers, follow up work for this will be tracked on [this issue](https://github.com/kubernetes-sigs/cluster-api/issues/1727) +- To manage CA certificates outside of what is provided by Kubeadm bootstrapping +- To manage etcd clusters in any topology other than stacked etcd (externally managed etcd clusters can still be leveraged). +- To address disaster recovery constraints, e.g. restoring a control plane from 0 replicas using a filesystem or volume snapshot copy of data persisted in etcd. +- To support rollbacks, as there is no datastore rollback guarantee for Kubernetes. Consumers should perform backups of the cluster prior to performing potentially destructive operations. +- To mutate the configuration of live, running clusters (e.g. changing api-server flags), as this is the responsibility of the [component configuration working group](https://github.com/kubernetes/community/tree/master/wg-component-standard). +- To support auto remediation. Using such a mechanism to automatically replace machines may lead to unintended behaviours and we want to have real world feedback on the health indicators chosen and remediation strategies developed prior to attempting automated remediation. +- To provide configuration of external cloud providers (i.e. the [cloud-controller-manager](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/)).This is deferred to kubeadm. +- To provide CNI configuration. This is deferred to external, higher level tooling. +- To provide the upgrade logic to handle changes to infrastructure (networks, firewalls etc…) that may need to be done to support a control plane on a newer version of Kubernetes (e.g. a cloud controller manager requires updated permissions against infrastructure APIs). We expect the work on [add-on components](https://github.com/kubernetes/community/tree/master/sig-cluster-lifecycle#cluster-addons)) to help to resolve some of these issues. +- To provide automation around the horizontal or vertical scaling of control plane components, especially as etcd places hard performance limits beyond 3 nodes (due to latency). +- To support upgrades where the infrastructure does not rely on a Load Balancer for access to the API Server. +- To implement a fully modeled state machine and/or Conditions, a larger effort for Cluster API more broadly is being organized on [this issue](https://github.com/kubernetes-sigs/cluster-api/issues/1658)) + +## Proposal + +### User Stories + +1. As a cluster operator, I want my Kubernetes clusters to have multiple control plane machines to meet my SLOs with application developers. +2. As a developer, I want to be able to deploy the smallest possible cluster, e.g. to meet my organization’s cost requirements. +3. As a cluster operator, I want to be able to scale up my control plane to meet the increased demand that workloads are placing on my cluster. +4. As a cluster operator, I want to be able to remove a control plane replica that I have determined is faulty and should be replaced. +5. As a cluster operator, I want my cluster architecture to be always consistent with best practices, in order to have reliable cluster provisioning without having to understand the details of underlying datastores, replication etc… +6. As a cluster operator, I want to know if my cluster’s control plane is healthy in order to understand if I am meeting my SLOs with my end users. +7. As a cluster operator, I want to be able to quickly respond to a Kubernetes CVE by upgrading my clusters in an automated fashion. +8. As a cluster operator, I want to be able to quickly respond to a non-Kubernetes CVE that affects my base image or Kubernetes dependencies by upgrading my clusters in an automated fashion. +9. As a cluster operator, I would like to upgrade to a new minor version of Kubernetes so that my cluster remains supported. +10. As a cluster operator, I want to know that my cluster isn’t working properly after creation. I have ended up with an API server I can access, but kube-proxy isn’t functional or new machines are not registering themselves with the control plane. + +#### Identified features from user stories + +1. Based on the function of kubeadm, the control plane provider must be able to scale the number of replicas of a control plane from 1 to X, meeting user stories 1 through 4. +2. To address user story 5, the control plane provider must provide validation of the number of replicas in a control plane. Where the stacked etcd topology is used (i.e., in the default implementation), the number of replicas must be an odd number, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members). When external etcd is used, any number is valid. +3. In service of user story 5, the kubeadm control plane provider must also manage etcd membership via kubeadm as part of scaling down (`kubeadm` takes care of adding the new etcd member when joining). +4. The control plane provider should provide indicators of health to meet user story 6 and 10. This should include at least the state of etcd and information about which replicas are currently healthy or not. For the default implementation, health attributes based on artifacts kubeadm installs on the cluster may also be of interest to cluster operators. +5. The control plane provider must be able to upgrade a control plane’s version of Kubernetes as well as updating the underlying machine image on where applicable (e.g. virtual machine based infrastructure). + +### Implementation Details/Notes/Constraints + +#### New API Types + +KubeadmControlPlane: + +```go +package v1alpha3 + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + cabpkv1 "sigs.k8s.io/cluster-api-bootstrap-provider-kubeadm/api/v1alpha2" +) + +// KubeadmControlPlaneSpec defines the desired state of KubeadmControlPlane. +type KubeadmControlPlaneSpec struct { + // Number of desired machines. Defaults to 1. When stacked etcd is used only + // odd numbers are permitted, as per [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members). + // This is a pointer to distinguish between explicit zero and not specified. + // +optional + Replicas *int32 `json:"replicas,omitempty"` + + // Version defines the desired Kubernetes version. + Version string `json:"version"` + + // InfrastructureTemplate is a required reference to a custom resource + // offered by an infrastructure provider. + InfrastructureTemplate corev1.ObjectReference `json:"infrastructureTemplate"` + + // KubeadmConfigSpec is a KubeadmConfigSpec + // to use for initializing and joining machines to the control plane. + KubeadmConfigSpec cabpkv1.KubeadmConfigSpec `json:"kubeadmConfigSpec"` +} + +// KubeadmControlPlaneStatus defines the observed state of KubeadmControlPlane. +type KubeadmControlPlaneStatus struct { + // Selector is the label selector in string format to avoid introspection + // by clients, and is used to provide the CRD-based integration for the + // scale subresource and additional integrations for things like kubectl + // describe.. The string will be in the same format as the query-param syntax. + // More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors + // +optional + Selector string `json:"selector,omitempty"` + + // Total number of non-terminated machines targeted by this control plane + // (their labels match the selector). + // +optional + Replicas int32 `json:"replicas,omitempty"` + + // Total number of non-terminated machines targeted by this control plane + // that have the desired template spec. + // +optional + UpdatedReplicas int32 `json:"updatedReplicas,omitempty"` + + // Total number of fully running and ready control plane machines. + // +optional + ReadyReplicas int32 `json:"readyReplicas,omitempty"` + + // Total number of unavailable machines targeted by this control plane. + // This is the total number of machines that are still required for + // the deployment to have 100% available capacity. They may either + // be machines that are running but not yet ready or machines + // that still have not been created. + // +optional + UnavailableReplicas int32 `json:"unavailableReplicas,omitempty"` + + // Initialized denotes whether or not the control plane has the + // uploaded kubeadm-config configmap. + // +optional + Initialized bool `json:"initialized,omitempty”` + + // Ready denotes that the KubeadmControlPlane API Server is ready to + // receive requests. + // +optional + Ready bool `json:"ready,omitempty"` + + // ErrorReason indicates that there is a problem reconciling the + // state, and will be set to a token value suitable for + // programmatic interpretation. + // +optional + ErrorReason KubeadmControlPlaneStatusError `json:"errorReason,omitempty"` + + // ErrorMessage indicates that there is a problem reconciling the + // state, and will be set to a descriptive error message. + // +optional + ErrorMessage *string `json:"errorMessage,omitempty"` + +// +kubebuilder:object:root=true +// +kubebuilder:resource:path=controlplanes,shortName=cp,scope=Namespaced,categories=cluster-api +// +kubebuilder:storageversion +// +kubebuilder:subresource:status +// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector + +// KubeadmControlPlane is the Schema for the KubeadmControlPlane API. +type KubeadmControlPlane struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + Spec KubeadmControlPlaneSpec `json:"spec,omitempty"` + Status KubeadmControlPlaneStatus `json:"status,omitempty"` +} + +// +kubebuilder:object:root=true + +// KubeadmControlPlaneList contains a list of KubeadmControlPlane. +type KubeadmControlPlaneList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata,omitempty"` + Items []KubeadmControlPlane `json:"items"` +} + +func init() { + SchemeBuilder.Register(&KubeadmControlPlane{}, &KubeadmControlPlaneList{}) +} + +type KubeadmControlPlaneStatusError string + +// A more descriptive kind of error that represents an error condition that +// should be set in the KubeadmControlPlane.Status. The "Reason" field is meant for short, +// enum-style constants meant to be interpreted by control planes. The "Message" +// field is meant to be read by humans. +type KubeadmControlPlaneError struct { + Reason KubeadmControlPlaneStatusError + Message string +} + +func (e *KubeadmControlPlaneError) Error() string { + return e.Message +} + +const ( + // InvalidConfigurationKubeadmControlPlaneError indicates that the kubeadm control plane + // configuration is invalid. + InvalidConfigurationKubeadmControlPlaneError KubeadmControlPlaneStatusError = "InvalidConfiguration" + + // UnsupportedChangeKubeadmControlPlaneError indicates that the kubeadm control plane + // spec has been updated in an unsupported way. That cannot be + // reconciled. + UnsupportedChangeKubeadmControlPlaneError KubeadmControlPlaneStatusError = "UnsupportedChange" + + // CreateKubeadmControlPlaneError indicates that an error was encountered + // when trying to create the kubeadm control plane. + CreateKubeadmControlPlaneError KubeadmControlPlaneStatusError = "CreateError" + + // UpdateKubeadmControlPlaneError indicates that an error was encountered + // when trying to update the kubeadm control plane. + UpdateKubeadmControlPlaneError KubeadmControlPlaneStatusError = "UpdateError" + + // DeleteKubeadmControlPlaneError indicates that an error was encountered + // when trying to delete the kubeadm control plane. + DeleteKubeadmControlPlaneError KubeadmControlPlaneStatusError = "DeleteError" +) +``` + +With the following validations: + +- If `KubeadmControlPlane.Spec.KubeadmConfigSpec` does not define external etcd (webhook): + - `KubeadmControlPlane.Spec.Replicas` is an odd number. + - Configuration of external etcd is determined by introspecting the provided `KubeadmConfigSpec`. +- `KubeadmControlPlane.Spec.Replicas` is >= 0 or is nil +- `KubeadmControlPlane.Spec.Version != ""` (openapi) +- `KubeadmControlPlane.Spec.KubeadmConfigSpec` must be treated as immutable (via webhook) + +And the following defaulting: + +- `KubeadmControlPlane.Spec.Replicas: 1` (openapi or webhook) + +#### Modifications required to existing API Types + +- Add `Cluster.Spec.ControlPlaneRef` defined as: + +```go + // ControlPlaneRef is an optional reference to a provider-specific resource that holds + // the details for provisioning the Control Plane for a Cluster. + // +optional + ControlPlaneRef *corev1.ObjectReference `json:"controlPlaneRef,omitempty"` +``` + +- Add `Cluster.Status.ControlPlaneReady` defined as: + +```go + // ControlPlaneReady defines if the control plane is ready. + // +optional + ControlPlaneReady bool `json:"controlPlaneReady,omitempty"` +``` + +#### Behavioral Changes from v1alpha2 + +- If Cluster.Spec.ControlPlaneRef is set: + - [Status.ControlPlaneInitialized](https://github.com/kubernetes-sigs/cluster-api/issues/1243) is set based on the value of Status.Initialized for the referenced resource. + - Status.ControlPlaneReady is set based on the value of Status.Ready for the referenced resource, this field is intended to eventually replace Status.ControlPlaneInitialized as a field that will be kept up to date instead of set only once. +- Current behavior will be preserved if `Cluster.Spec.ControlPlaneRef` is not set. +- CA certificate secrets that were previously generated by the Kubeadm bootstrapper will now be generated by the KubeadmControlPlane Controller, maintaining backwards compatibility with the previous behavior if the KubeadmControlPlane is not used. +- The kubeconfig secret that was previously created by the Cluster Controller will now be generated by the KubeadmControlPlane Controller, maintaining backwards compatibility with the previous behavior if the KubeadmControlPlane is not used. + +#### Behaviors + +##### Create + +- After a KubeadmControlPlane object is created, it must bootstrap a control plane with a given number of replicas. +- If an error occurs, `KubeadmControlPlane.Status.ErrorStatus` and `KubeadmControlPlane.Status.ErrorMessage` are populated. +- `KubeadmControlPlane.Spec.Replicas` must be an odd number. +- Can create an arbitrary number of control planes if etcd is external to the control plane, which will be determined by introspecting `KubeadmControlPlane.Spec.KubeadmConfigSpec`. +- Creating a KubeadmControlPlane with > 1 replicas is equivalent to creating a KubeadmControlPlane with 1 replica followed by scaling the KubeadmControlPlane to the desired number of replicas +- The kubeadm bootstrapping configuration provided via `KubeadmControlPlane.Spec.KubeadmConfigSpec` should specify the `InitConfiguration`, `ClusterConfiguration`, and `JoinConfiguration` stanzas, and the KubeadmControlPlane controller will be responsible for splitting the config and passing it to the underlying Machines created as appropriate. + - This is different than current usage of `KubeadmConfig` and `KubeadmConfigTemplate` where it is recommended to specify `InitConfiguration`/`ClusterConfiguration` OR `JoinConfiguration` but not both. +- The underlying query used to find existing Control Plane Machines is based on the following hardcoded label selector: + +```yaml + selector: + matchLabels: + cluster.x-k8s.io/cluster-name: my-cluster + cluster.x-k8s.io/control-plane: "" +``` + +- Generate CA certificates if they do not exist +- Generate the kubeconfig secret if it does not exist + +Given the following `cluster.yaml` file: + +```yaml +kind: Cluster +apiVersion: cluster.x-k8s.io/v1alpha3 +metadata: + name: my-cluster + namespace: default +spec: + clusterNetwork: + pods: + cidrBlocks: ["192.168.0.0/16"] + controlPlaneRef: + kind: KubeadmControlPlane + apiVersion: cluster.x-k8s.io/v1alpha3 + name: my-controlplane + namespace: default + infrastructureRef: + kind: AcmeCluster + apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 + name: my-acmecluster + namespace: default +--- +kind: KubeadmControlPlane +apiVersion: cluster.x-k8s.io/v1alpha3 +metadata: + name: my-control-plane + namespace: default +spec: + replicas: 1 + version: v1.16.0 + infrastructureTemplate: + kind: AcmeProviderMachineTemplate + apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 + namespace: default + name: my-acmemachinetemplate + kubeadmConfigSpec: + initConfiguration: + nodeRegistration: + name: '{{ ds.meta_data.hostname }}' + kubeletExtraArgs: + cloud-provider: acme + clusterConfiguration: + apiServer: + extraArgs: + cloud-provider: acme + controllerManager: + extraArgs: + cloud-provider: acme + joinConfiguration: + controlPlane: {} + nodeRegistration: + name: '{{ ds.meta_data.hostname }}' + kubeletExtraArgs: + cloud-provider: acme +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +kind: AcmeProviderMachineTemplate +metadata: + name: my-acmemachinetemplate + namespace: default +spec: + osImage: + id: objectstore-123456abcdef + instanceType: θ9.medium + iamInstanceProfile: "control-plane.cluster-api-provider-acme.x-k8s.io" + sshKeyName: my-ssh-key +--- +apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2 +kind: AcmeCluster +metadata: + name: my-acmecluster + namespace: default +spec: + region: antarctica-1 +``` + +![controlplane-init-1](images/controlplane/controlplane-init-1.png) +![controlplane-init-2](images/controlplane/controlplane-init-2.png) +![controlplane-init-3](images/controlplane/controlplane-init-3.png) +![controlplane-init-4](images/controlplane/controlplane-init-4.png) + +##### Scale Up + +- Allow scale up a control plane with stacked etcd to only odd numbers, as per + [etcd best practice](https://etcd.io/docs/v3.3.12/faq/#why-an-odd-number-of-cluster-members). +- However, allow a control plane using an external etcd cluster to scale up to other numbers such as 2 or 4. +- Scale up operations must not be done in conjunction with an upgrade operation, this should be enforced using a validation webhook. +- Scale up operations *could* be blocked based on the Health status + - for stacked etcd quorum must be considered + - for external etcd only availability of etcd should be considered. + - Health status is described below. + +![controlplane-init-6](images/controlplane/controlplane-init-6.png) + +##### Scale Down + +- Scale down a stacked control plane + - For each replica being deleted: + - Remove the replica’s etcd member from the etcd cluster + - Update the kubeadm generated config map +- Scale down a control plane with an external etcd + - Same as above minus etcd management +- Scale down operations must not be done in conjunction with an upgrade operation, this should not impact manual operations for recovery. This should also be enforced using a validation webhook. +- Scale down operations *could* be blocked based on the Health status + - for stacked etcd quorum must be considered + - for external etcd only availability of etcd should be considered. + - Health status is described below. +- Scale to 0 must be rejected for the initial support, see below for deletion workflows. + +![controlplane-init-7](images/controlplane/controlplane-init-7.png) + +##### Delete of the entire KubeadmControlPlane (kubectl delete controlplane my-controlplane) + +- Completely removing the control plane and issuing a delete on the underlying machines. + - Deletion is equivalent to a scale to 1 followed by a deletion of a single replica control plane. +- User documentation should focus on deletion of the Cluster resource rather than the KubeadmControlPlane resource. +- Cluster deletion will need to be modified to ensure KubeadmControlPlane deletion is done in the proper order. + +##### Cluster upgrade (using create-swap-and-delete) + +- Triggered on any changes to Version or the InfrastructureTemplate used (the KubeadmConfiguration is treated and validated as immutable). + - Must be able to trigger an upgrade for the underlying machine image (e.g. nothing in the above list has changed but an upgrade is required) + - Possible implementations include (not necessary to hammer out exact implementation right now): + - Manually bumping a Generation field on the KubeadmControlPlane object + - Adding a field that is not the Generation field for users to manually bump to trigger an upgrade + - Adding a timestamp field, something like `nextUpgrade` which can be set to a specific time in the future (far future if no upgrades are desired) and an upgrade will run when that timestamp is passed. Good for scheduling upgrades/SLOs & quickly modifying to NOW or yesterday if an upgrade is required immediately. Would potentially update the field value to some interval (2 months from now?) +- An upgrade will look like this: + - Serially go through each control plane replica not at the current config hash + - Check health of any replicas for the current config hash + - Uniquely mark the existing replica machine through setting an annotation and persisting the change (cluster.x-k8s.io/control-plane/selected-for-upgrade) + - Check cluster health + - Provision a new machine at the correct version + - Poll on health of replicas with the current config hash + - Poll on cluster health with the correct replica number + - Remove the replica’s etcd member from the etcd cluster + - Update the kubeadm generated config map + - Delete the marked controlplane machine +- Determining if a Machine is "up to date" will be done through the use of an annotation (controlplane.cluster.x-k8s.io/configuration-hash) that is placed on the Machine at creation time. The value of this annotation is generated by computing the Hash of the KubeadmControlPlaneSpec (minus the replicas field). This would allow triggering an Upgrade based on any changes to Version, InfrastructureTemplate, or the KubeadmConfiguration used (when a new configuration is referenced in a new InfrastructureTemplate). + - For example, a CVE is patched in containerd and updated images are available. Note that the Kubernetes version is not changed. To trigger an upgrade, the user updates the image in the InfrastructureTemplate (as in the Acme cluster example above, the image is stored in InfrastructureTemplate.Spec.OSImage.ID). +- The controller should tolerate the manual removal of a replica during the upgrade process. A replica that fails during the upgrade may block the completion of the upgrade. Removal or other remedial action may be necessary to allow the upgrade to complete. + +###### Constraints and Assumptions + +* A stable endpoint (provided by DNS or IP) for the API server will be required in order to allow for machines to maintain a connection to control plane machines as they are swapped out during upgrades. This proposal is agnostic to how this is achieved, and is being tracked in https://github.com/kubernetes-sigs/cluster-api/issues/1687. The control plane controller will use the presence of the apiEndpoints status field of the cluster object to determine whether or not to proceed. This behaviour is currently implicit in the implementations for cloud providers that provider a load balancer construct. + +* Infrastructure templates are expected to be immutable, so infrastructure template contents do not have to hashed in order to detect + changes. + +##### Control plane healthcheck + +- Will be used during scaling and upgrade operations. +- There will also be a signal to indicate a healthcheck that could not be made, e.g. due to a network partition. +- For stacked control planes, we will present etcd quorum status within the `KubeadmControlPlane.Status.Ready` field, and also report the number of active cluster members through `KubeadmControlPlane.Status.ReadyReplicas`. +- The addition of status fields will be done conservatively to prevent them being relied upon even as we choose to deprecate them in the future. +- Unlike previous lifecycle managers (see Alternatives), ComponentStatus will be not be used as it is deprecated. +- Examples of specific checks we may perform include: + - Checking the managed cluster has a kubeadm-config configmap, which will mark the cluster as Initialized + - Checking the managed cluster has a kubelet-$version-configmap matching the desired + version to check the state of upgrades + - Checking the status of all pods marked with the system-cluster-critical priorityClass within the managed cluster, and providing a count of ready vs total. + - Running PodExec etcdctl, or port-forwarding to etcd to get etcd cluster health information + - Checking the status of pods marked with the app=kube-dns label as a proxy for information about the health of CNI. + +##### Adoption of pre-v1alpha3 Control Plane Machines + +- Existing control plane Machines will need to be updated with labels matching the expected label selector. +- The KubeadmConfigSpec can be re-created from the referenced KubeadmConfigs for the Machines matching the label selector. + - If there is not an existing initConfiguration/clusterConfiguration only the joinConfiguration will be populated. +- In v1alpha2, the Cluster API Bootstrap Provider is responsible for generating certificates based upon the first machine to join a cluster. The OwnerRef for these certificates are set to that of the initial machine, which causes an issue if that machine is later deleted. For v1alpha3, control plane certificate generation will be replicated in the KubeadmControlPlane provider. Given that for v1alpha2 these certificates are generated with deterministic names, i.e. prefixed with the cluster name, the migration mechanism should replace the owner reference of these certificates during migration. The bootstrap provider will need to be updated to only fallback to the v1alpha2 secret generation behavior if Cluster.Spec.ControlPlaneRef is nil. +- To ease the adoption of v1alpha3, the migration mechanism should be built into Cluster API controllers. + +#### Code organization + +The types introduced in this proposal will live in the `cluster.x-k8s.io` API group. The controller(s) will also live inside `sigs.k8s.io/cluster-api`. + +### Risks and Mitigations + +#### etcd membership + +- If the leader is selected for deletion during a replacement for upgrade or scale down, the etcd cluster will be unavailable during that period as leader election takes place. Small time periods of unavailability should not significantly impact the running of the managed cluster’s API server. +- Replication of the etcd log, if done for a sufficiently large datastore and saturates the network, machines may fail leader election, bringing down the cluster. To mitigate this, the control plane provider will only create machines serially, ensuring cluster health before moving onto operations for the next machine. +- When performing a scaling operation, or an upgrade using create-swap-delete, there are periods when there are an even number of nodes. Any network partitions or host failures that occur at this point will cause the etcd cluster to split brain. Etcd 3.4 is under consideration for Kubernetes 1.17, which brings non-voting cluster members, which can be used to safely add new machines without affecting quorum. [Changes to kubeadm](https://github.com/kubernetes/kubeadm/issues/1793) will be required to support this and is out of scope for the timeframe of v1alpha3. + +#### Upgrade where changes needed to KubeadmConfig are not currently possible + +- We don't anticipate that this will immediately cause issues, but could potentially cause problems when adopt new versions of the Kubeadm configuration that include features such as kustomize templates. These potentially would need to be modified as part of an upgrade. + +## Design Details + +### Test Plan + +Standard unit/integration & e2e behavioral test plans will apply. + +### Graduation Criteria + +#### Alpha -> Beta Graduation + +This work is too early to detail requirements for graduation to beta. At a minimum, etcd membership and quorum risks will need to be addressed prior to beta. + +### Upgrade Strategy + +- v1alpha2 managed clusters that match certain known criteria should be able to be adopted as part of the upgrade to v1alpha3, other clusters should continue to function as they did previously. + +## Alternatives + +For the purposes of designing upgrades, two existing lifecycle managers were examined in detail: kops and Cloud Foundry Container Runtime. Their approaches are detailed in the accompanying "[Cluster API Upgrade Experience Reports](https://docs.google.com/document/d/1RnUG9mHrS_qmhmm052bO6Wu0dldCamwPmTA1D0jCWW8/edit#)" document. + +## Implementation History + +- [x] 10/17/2019: Initial Creation diff --git a/docs/proposals/images/controlplane/controlplane-init-1.plantuml b/docs/proposals/images/controlplane/controlplane-init-1.plantuml new file mode 100644 index 000000000000..5353a47a7a9c --- /dev/null +++ b/docs/proposals/images/controlplane/controlplane-init-1.plantuml @@ -0,0 +1,47 @@ +@startuml +title User creates a Cluster with KubeadmControlPlane +actor User + +' -- GROUPS START --- + +box #lightgreen +participant "API Server" +end box + +box #lightslategray +participant "Cluster API Cluster Controller" +end box + +' -- GROUPS END --- + +User->"API Server":kubectl apply -f cluster.yaml +"API Server"-->>"Cluster API Cluster Controller": New Cluster + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Cluster Controller Reconcile +activate "Cluster API Cluster Controller" + +note over "Cluster API Cluster Controller": - ✅ Cluster.Status.InfrastructureReady is false\n- ✅ Cluster.Spec.ControlPlaneRef is populated\n- ✅ Cluster.Spec.ControlPlaneRef -> Status.Ready is false + +opt Required only if the object hasn't been seen before +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Add watcher for \nCluster.Spec.ControlPlaneRef.Kind objects +end + +opt Required only if the infrastructure object doesn't have a Cluster owner reference +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Spec.InfrastructureRef -> OwnerReferences[0] to Cluster +"Cluster API Cluster Controller"->"API Server": Patch AWSCluster +"Cluster API Cluster Controller"<<--"API Server": Response +end + +opt Required only if the control plane object doesn't have a Cluster owner reference +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Spec.ControlPlaneRef -> OwnerReferences[0] to Cluster +"Cluster API Cluster Controller"->"API Server": Patch KubeadmControlPlane +"Cluster API Cluster Controller"<<--"API Server": Response +end + +"Cluster API Cluster Controller"->"API Server": Patch Cluster Status +"Cluster API Cluster Controller"<<--"API Server": Response + +deactivate "Cluster API Cluster Controller" + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-1.png b/docs/proposals/images/controlplane/controlplane-init-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d8735c37d4f7793a0b3daf3c51c0a5acbba1f24f GIT binary patch literal 48557 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"KubeadmControlPlane Controller": Cluster Updated + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":Enqueues KubeadmControlPlane Reconcile + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":KubeadmControlPlane Controller Reconcile +activate "KubeadmControlPlane Controller" + +note over "KubeadmControlPlane Controller": - ✅ KubeadmControlPlane.OwnerReferences \ncontains a Cluster + +"KubeadmControlPlane Controller"->"API Server": Get Cluster +"KubeadmControlPlane Controller"<<--"API Server": Response + +note over "KubeadmControlPlane Controller": - ✅ Cluster.Status.InfrastructureReady is true\n- ✅ KubeadmControlPlane instance is valid + +"KubeadmControlPlane Controller"->"API Server": Get Machines maching label selector +"KubeadmControlPlane Controller"<<--"API Server": Response + +opt KubeadmControlPlane.Spec.Replicas >= 1, no existing Machines found + +"KubeadmControlPlane Controller"->"API Server": Create KubeadmConfig from KubeadmControlPlane.Spec.KubeadmConfigSpec +"KubeadmControlPlane Controller"<<--"API Server": Response + +"KubeadmControlPlane Controller"->"API Server": Create InfrastructureMachine from KubeadmControlPlane.Spec.InfrastructureTemplate +"KubeadmControlPlane Controller"<<--"API Server": Response + +"KubeadmControlPlane Controller"->"API Server": Create Machine using refs from created KubeadmConfig and InfrastructureMachine resources +"KubeadmControlPlane Controller"<<--"API Server": Response + +end + +"KubeadmControlPlane Controller"->"API Server": Patch KubeadmControlPlane +"KubeadmControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-2.png b/docs/proposals/images/controlplane/controlplane-init-2.png new file mode 100644 index 0000000000000000000000000000000000000000..9213c94a7dd91edee06f6ac4dfbd3702941a2418 GIT binary patch literal 49759 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 VuZsLs9pq~oYC7k#&Ro6!{{YkPl63$8 literal 0 HcmV?d00001 diff --git a/docs/proposals/images/controlplane/controlplane-init-3.plantuml b/docs/proposals/images/controlplane/controlplane-init-3.plantuml new file mode 100644 index 000000000000..aaf41581386d --- /dev/null +++ b/docs/proposals/images/controlplane/controlplane-init-3.plantuml @@ -0,0 +1,51 @@ +@startuml +title User creates a Cluster with KubeadmControlPlane + +' -- GROUPS START --- + +box #lightgreen +participant "API Server" +end box + +box #violet +participant "KubeadmControlPlane Controller" +end box + +' -- GROUPS END --- + +note right of "KubeadmControlPlane Controller":Watches KubeadmControlPlanes,\nClusters, and owned Machines + +"API Server"-->>"KubeadmControlPlane Controller": Machine Updated + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":Enqueues KubeadmControlPlane Reconcile + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":KubeadmControlPlane Controller Reconcile +activate "KubeadmControlPlane Controller" + +note over "KubeadmControlPlane Controller": - ✅ KubeadmControlPlane.OwnerReferences \ncontains a Cluster + +"KubeadmControlPlane Controller"->"API Server": Get Cluster +"KubeadmControlPlane Controller"<<--"API Server": Response + +note over "KubeadmControlPlane Controller": - ✅ Cluster.Status.InfrastructureReady is true\n- ✅ KubeadmControlPlane instance is valid + +"KubeadmControlPlane Controller"->"API Server": Get Machines maching label selector +"KubeadmControlPlane Controller"<<--"API Server": Response + +opt KubeadmControlPlane.Spec.Replicas >= 1, 1 or more existing Machines found that is "Ready" + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":Set KubeadmControlPlane.Status.Initialized = true + +opt num Machines matches Replicas, and all Machines "Ready" + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":Set KubeadmControlPlane.Status.Ready = true + +end + +end + +"KubeadmControlPlane Controller"->"API Server": Patch KubeadmControlPlane +"KubeadmControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-3.png b/docs/proposals/images/controlplane/controlplane-init-3.png new file mode 100644 index 0000000000000000000000000000000000000000..29770f3ded84d7a2090af9aed3acc3d1d2cc265d GIT binary patch literal 46702 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ð@nYKy3RyI}3I>ODD?lu2zXdD-MUdu9bd-wM!y}4nuxu z%v;Y2GOs>ed&uGl+tY+`3Hna?mTYGrO%M0Qk2pLTELnrVqjMfleL_@J6jNcjMU$?g zW6JY_NBG75>#s97L1;bs29|0IU>tz50_vr~xDj;3LXKJKKqQ1vV@>uvkA z2}u=Unnv>P|H%tZE)rolN#jEr_8+4xM5p--V!G)A<(7vUX+=uf<*t6~#`r%Va9k`~fc>wfFowwl%FMb3 zt(*7NIGE5-DdiG#r?nco^kMTbGtsssJ%McdC~9$WQJf*;f~OfoAp^OWgA7eAJ1Z-z z%;=F<5iNAszqvwBb-pgLEWBf;9w{&k2vzpMdZB$GP1CxrogWzjE}XVa@VeOY-#bc< zbn)-lkq72*V6bIUz$bb@EGLHCpWxL0rZ$Cl>O{I(Vdmj;7nNKWe4ey!dd~;)55$c@ z4XvH`Pgq9nY>7pk zhL8OCNJon)=`do`+pse-83tw9TXI}{0v2z4lb z1105^uJSTg-GEryA8b*HZo<-ODQ>(LDs2za<5G~9*=qPr!ek%ItjdYFGa&1a@)pyOAw7K(9 zGcUQC)Yh&o7Um#x(}Z9EFBHsBzz@P()lfCLm$A~pU2nPJJfg}j2? zKfP3%cV_bZrKnwuIcE3 z4rd8T4N{8@Ab{5jlbukpKV3a!)VrRCN8Ll*(r88Fi_kSI|JrFwKZ;tJm&i8VAMIE+ zYt*gGTyFBr>jr-iDCi$(YeHazed8{?I7Ux8VNe#>xTThc#m1Jw^3BUTboJ_>=j=#I zazooOyfRZ z?&08=`rt^WEvu&Ww3!9RH}7Yr0f=lk1^Oc>QF-^#A^@^eJ#;oPP4Zy{-%@xO8@mh~ z0_B-T)sg0V5d#=OCd>odHI)N%Y$F@nL`T70YZTH=VeD7T9Ug&JJ_!-k_YCcY9e=kQ zA|8V;(n8-(2}+^0CIKF#RO?JHZ`b~Q@PKp$*#kUZll2}m#=4f34sXJCs< zN~(@0AYjYCp_&~SStNOLR@DW(1qhpQNHhf8hT{McIB+(Ta*%N61*Jg;3Q*71+x~-^ zC7I2I4~>O&pC~6hVL_S1d5vQjiy&X9CPn%fFr1({0)_C(#@i|(ZCIT+1&pBJS~N>L!Gm4cmWg^huN+D_j$8$ z!P;3dhLoCxWon*90-noKz()nUbRB-ws-6T&{al*ElO6EamqWelShBqs$46PvD(-Lv zKQ8v}c2+rYmoJyZH~lJN@@?p2>C3G4hVds@6?BW&vE&V`GeO?bfvL-?vd0vr2mX`; zVWD#vW#_VnLeC)m&vl!h8UDe_^F?8lmE}bgn>q6K$`IN2M41gf{cXR|jxF+3QKG8X zcK&X+n<{TNbY>n8*me`;zMjRretjN17sj!D^r6(t(VH0m@nyw3WsQ@!lSLj~%lc)z zOs_}#c9vU5*k7nXzH4CVUA-zGa~AGQh;2dj)4sVYv|A=Ip?7S|#ZLa+Zm#Tdbv;f*kT<$$OeDRUX>wGt0dk`WeLb`g~8)srrGSKTCJ%YS4Y}_pKLB&EH*<@+VJ~RoI+F?(6=!*K$Mc@i7{hfaru3 z&e^NWM=3WW4Sd@CDO)>396$F>^y$A#nGR~OiCjPGAK>o~?F>sxD&&dJvK_#q94d+x zm`ht|r`r`)9fNTJ;u^>yHK5x8lt^L4|53W&eMj4+-zn8#0nP(~V>)?1oH~t-7l=I zwu}=w=mF_1VKgR|A}_b)+RRwBV{jXPFwV)S#MJO(X8VT^6sv)jx`Z=#7S4T{%;}Zf z+0la6-VEZi0n>(NA)mMDiu|8lXRc3Pmn~A%TMQHsSxL7#H6Fp&i!#RwY&Pc1)p0n2 zX;f_Nsw`s)BN@bcmR@kv!uB*?ks!*3)=Nyx60t@Z=W%Ma_dK`<>XnX^(BlUlzEv~B zl16v*Bv=(h8GO~z)YAPA4_DHFwcQ{Pkpwe|3=IKJ4-G;A0hsv(t+3b>wJUVnuHspe z^22J#<_I%XDit)*DQRgil&$QWmJxc+WJt2WF&A2~S3ncGp6%CjO~^F%FcjX#;YNbpUNW`7Z=bMkth}Kl2E1_%OIQUtO*oJADO9fkv&4!tB2QC`3%gkkbSh5yj9DlE6 zUIS+MlWNhjJQrHl3;!x^%&v9-sqe7zhKy+d)FgimfvR&4G5h`5gIaX6CGS@r0ZAvc z(Q~04xelye8z#Jc(>PY$sn0=5XI+yrf33~)g7A>Hq_6ynD=1uT?j%W}3_rb@-JG#2 zfAMzLi2k)(UNAO`A&aMc>}fQ3S@LSXuAZ%iS}$e8)r@}5kZ8+! zi)!w7tw~)MKCarVyDMY1Xt>WJac+f!(iEF(M}bcH9!Sw|8tR}hbGvH7miOng(mdp5CIQLQ;xQ-j=TqMfiR;v zEU%xXW@D5|a;#Hw7!qWt(Q$uNr$mQ-xHZRG_crG77gd#jknJsYAVQ3IX4~YKONyBS z115YGFzm!>`ty+1mX(%v`!3q!WW~h9q@`h$#(5Cv0ER6SP6jkUtPKmA|C42jPB6v; z5F4&br9b-8Gr;V1Y|j%E7f0lLP_-LS!08uhzk)Xf_y!XHXP23@)@3fo8i`%9ZksN7 zMs>EUGXWvQ(8#-fi#Hu&M5W)nyS*05>M|mgm-_F9xXBNQ5<$sm8LFRhzZvZ-`zadD z?#58#v%ClpCt|uA3qU&8c1fV@=#?CTGv?-)IcP_5e3YB>UaqlShV@)>vJEMT_lqOF z57M7Xhmwq)qy{gd9gMJOsy;Zz`2k!DRF`>>jI#PZ~!#dorW3{5DN=nbAg4$j)!AVNR^b7JbGjRb#g0AF$R1L zC_;0~oPpq-Z(BpFbC(6ZxDDpJI&+{DKAcTU}|Zt zue0!y$@=$POb6x5-Hg7Pfyp_vmv6BdqupNNrBchga_7VzN2Eme)9oh{{d>4Hn0lcO zhO$tOE67`_G`7X1(16+$rg?kmh++j|M9h#BZFi=(>8G5Rm8KAUCEtey-n6F`y&|)Q z^?euAnUl^D#f<5drHe!TSsxRV@2DeqD5PUeJH1ENv1t8;T@fG8Xr)ExI0c#T>{z^O zz_E$l25BQhGg!vYXbaK%A)=$PtyN1e7!@OjXNgsnE?n3rPR#ycA3QLCA>K!m^S!aF zhDz`J=qbjoU}pI@E#c5#ab#|pF@Xz)2a6vpXaKilAS@|k>VTLW6o=fli&xv2y$C{pO66%vv02-IMCFuv!r=Rv}3*^#aMxvxF)U<#C=N z(}psv+QdE5;DFe0h1|Be+=+>y(IKAR4i`P$!UrME$Be$@oNY+L7W`3@@(s*#F~ioU0Q(s;1hHphhI5_<9M z`FFa9oy~&eHPU z!2<^loK#mo7(6gI2&iQ-q;$<`y6n3T9oIaqqvHU)IZsajH`^9xhJm5C`@1F-Cta3M z)v#%2RmNhf*zn(d0M30HH|zrCvi$N3*GDP`#$(c7i;PE@WS9vHkN-BBlBzrJ?jMDw z0~w2Orx>t50Mj|xH*GQjKnO~lp!0|b1>DuOkmeS^i9haw#e(QQ9BqnVn|qq>t2J9a zvfMM43!Hww;IiiKm*8M9M=SE=A0f<1OkAk&s%BGdQ5nEB7<}Sza$Wgc;udIfnz*#u zeBI9x>M=Pqx`9Fw7ZS2WywelY)11!m@$vm6n>0fc4oTWaLCgn{snEDVv&MzW!|eN# z0@}8P*Vza@azC?ROLI;$6en`g^!q@{u?C6}>Khvy!KJ@R(G^xN9_oTy`l3V*URRq& zpA$C%U71pL(JNDx)XhDoH%)NlSYB%{Oqfp;S`j3cuM#ME?T3JFlox(^q!5V1KBMF| z?8&>&c-o*(2*fZCh=g8qm;?Sdpo0|8ckQf<)Ce_F2c?+>eso zZtliCJ9_dPaLXg}+p(ClHH~vm%0Vp27t6o=c`@`9&t=c&MP8)z6}^!QebX|7>g*xz zuyXhAoE3MLB!Q^L4R}B=%{MUsplE!=zcH&HKD^q~QZo@uljN<+*jUfa@ZutiSRX-O z@~i8olD62BZ4M1nZ{;Ffm~R0>CbzFCxjAEu=r`JR#$U~nbL})X;X@#8-pJj=X15Ar zM7KL8)3;B<8;c|la6bM4`_{VA%g*RL-KkWpyA zKuV9IB)7O9ZbUdPbaI*BDEo%B@Z?042qG#*Dy!bmeHJu4@PNym>6SK&&t)$ufFPR@ zRgiG=a^Sl2i#Eu4K-}n3|Kr~UbF~S?1F?OGjD77=RN~@Xtn<$?*+|v6z$J!dJeAuM zF)ezrUWn09`let-jzR#gwaZzHa_|cwA24FpcZVcr&aj>-W;(*0&_Yi-dKig&XYo{g zJm+q75Z5n=^>N+_^!@0PMnx8HG!lL-IX3pXKxJQzlkV@GksC&_C~+fPA7IN*)ya;ZdIxe#)Krn-(=j*7Yee*sY$|BC>"Cluster API Cluster Controller": KubeadmControlPlane updated + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Cluster Controller Reconcile +activate "Cluster API Cluster Controller" + +opt Cluster.Spec.ControlPlaneRef -> Status.Initialized is true + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.ControlPlaneInitialized = true + +opt Cluster.Spec.ControlPlaneRef -> Status.Ready is true + +"Cluster API Cluster Controller"-> "Cluster API Cluster Controller":Set Cluster.Status.ControlPlaneReady = true + +end + +end + +"Cluster API Cluster Controller"->"API Server": Patch Cluster Status +"Cluster API Cluster Controller"<<--"API Server": Response + +deactivate "Cluster API Cluster Controller" + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-4.png b/docs/proposals/images/controlplane/controlplane-init-4.png new file mode 100644 index 0000000000000000000000000000000000000000..5b901e74f9adae2222357c4f3e468219b4ff4de3 GIT binary patch literal 22012 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 GFZ>Dhll5i* literal 0 HcmV?d00001 diff --git a/docs/proposals/images/controlplane/controlplane-init-6.plantuml b/docs/proposals/images/controlplane/controlplane-init-6.plantuml new file mode 100644 index 000000000000..c02ba1e7291e --- /dev/null +++ b/docs/proposals/images/controlplane/controlplane-init-6.plantuml @@ -0,0 +1,52 @@ +@startuml +title User scales up a KubeadmControlPlane +actor User + +' -- GROUPS START --- + +box #lightgreen +participant "API Server" +end box + +box #violet +participant "KubeadmControlPlane Controller" +end box + +' -- GROUPS END --- + +User->"API Server":kubectl scale cp/my-control-plane -replicas=3 +"API Server"-->>"KubeadmControlPlane Controller": KubeadmControlPlane Updated + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":Enqueues KubeadmControlPlane Reconcile + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":KubeadmControlPlane Controller Reconcile +activate "KubeadmControlPlane Controller" + +note over "KubeadmControlPlane Controller": - ✅ KubeadmControlPlane.OwnerReferences \ncontains a Cluster + +"KubeadmControlPlane Controller"->"API Server": Get Cluster +"KubeadmControlPlane Controller"<<--"API Server": Response + +note over "KubeadmControlPlane Controller": - ✅ Cluster.Status.InfrastructureReady is true\n- ✅ KubeadmControlPlane instance is valid + +"KubeadmControlPlane Controller"->"API Server": Get Machines maching label selector +"KubeadmControlPlane Controller"<<--"API Server": Response + +opt KubeadmControlPlane.Spec.Replicas >= 1, all existing Machines "Ready", num Machines < Replicas + +"KubeadmControlPlane Controller"->"API Server": Create KubeadmConfig from KubeadmControlPlane.Spec.KubeadmConfigSpec +"KubeadmControlPlane Controller"<<--"API Server": Response + +"KubeadmControlPlane Controller"->"API Server": Create InfrastructureMachine from KubeadmControlPlane.Spec.InfrastructureTemplate +"KubeadmControlPlane Controller"<<--"API Server": Response + +"KubeadmControlPlane Controller"->"API Server": Create Machine using refs from created KubeadmConfig and InfrastructureMachine resources +"KubeadmControlPlane Controller"<<--"API Server": Response + +end + +"KubeadmControlPlane Controller"->"API Server": Update KubeadmControlPlane +"KubeadmControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-6.png b/docs/proposals/images/controlplane/controlplane-init-6.png new file mode 100644 index 0000000000000000000000000000000000000000..f63713e8d711b9559b9d91f4aef3204ea2b259ed GIT binary patch literal 54489 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%0AqbaA@8^-Gf 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 z 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"API Server":kubectl scale cp/my-control-plane -replicas=1 +"API Server"-->>"KubeadmControlPlane Controller": KubeadmControlPlane Updated + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":Enqueues KubeadmControlPlane Reconcile + +"KubeadmControlPlane Controller"-> "KubeadmControlPlane Controller":KubeadmControlPlane Controller Reconcile +activate "KubeadmControlPlane Controller" + +note over "KubeadmControlPlane Controller": - ✅ KubeadmControlPlane.OwnerReferences \ncontains a Cluster + +"KubeadmControlPlane Controller"->"API Server": Get Cluster +"KubeadmControlPlane Controller"<<--"API Server": Response + +note over "KubeadmControlPlane Controller": - ✅ Cluster.Status.InfrastructureReady is true\n- ✅ KubeadmControlPlane instance is valid + +"KubeadmControlPlane Controller"->"API Server": Get Machines maching label selector +"KubeadmControlPlane Controller"<<--"API Server": Response + +note over "KubeadmControlPlane Controller": - Process for selecting a Machine to delete is TBD + +opt KubeadmControlPlane.Spec.Replicas >= 1, all existing Machines "Ready", num Machines > Replicas + +"KubeadmControlPlane Controller"->"Workload Cluster API Server": Remove etcd Member + +"KubeadmControlPlane Controller"->"Workload Cluster API Server": Modify kubeadm ConfigMap + +"KubeadmControlPlane Controller"->"API Server": Delete a Machine + +end + +"KubeadmControlPlane Controller"->"API Server": Update KubeadmControlPlane +"KubeadmControlPlane Controller"<<--"API Server": Response + +hide footbox +@enduml diff --git a/docs/proposals/images/controlplane/controlplane-init-7.png b/docs/proposals/images/controlplane/controlplane-init-7.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab79754d6d02174ddb8cb129f3bb744c9d37475 GIT binary patch literal 53289 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ξ~=0p68k|$9d?ZkPXoFsw0$}b8>F@kh1;k$2GBG17noX_m;RpFCKJf zjF&AYT3LUtYZ$@!xernnUr@iln3yBR_gp#}&7p{QOE+ z9Vob6=4$x5c6+_Q+wFx+l3W`9=347k|F+%tdJf7%sCm{ip;1u@lsC<_PishmaIt)n@6z~CGHxZ zWRui#!^u%3OV0=l+0_Pbub>}4TbijN7bDC5l*b1}xffeDU5Gf83fClthZn}uUNP9O z4ofNY7sII+52K%sjfqXzGwX9-6Mk@z$3idXIh9tO&ZjNf-j$WNGsTn)&H1$9ImVM6 zT0)L4ghdhdO{0Ozl^!KWDEl-@o(kwy_?ZGRBU_i$;PKXFuNL4gX>0UxS{dnswFM{( zosoD1)-N8Xk|*KpG@%MHdIJdFl|pBq!m5l|3Rz403_YswuM`ckvOg` zyxc2%ZF_!lQi64ut-4)rPtuxB*2lKNRJjK#D*nV|Bo&6D;pA<_PIo-)6gpnHhgVb_ zsEzb~^@gH1^I%q%93$I{Bkm*_(#j1HlraS!qC5{t6et<~fe5DWLOjr(!bfYC1G>7` z9qlutqFeyeI?uH>-jg&qIZ0La-s!a4Y~3W7TOr%+E$1wKJBG2B2P4Yeh!T|3U^d?s zw~O(;AwFy>+cf8<$GN^l%)+$oMmb&AGCx;YU3*PiAfCCmCluWIYP)h3wkJv?y7BmT0X~1f3_xsKW{K(sl>dOrqowxTIt20B{QO{=7y(Ouer(FXnV4q zN|34&E^K%&5UHo1CR2%$_^be7W9;LqgTzUC_7|?S{l|2N*foIrXOQ^q{x6WG2>CzO zh+iIb^P1@I-dvkFKb#`+n!gI&qMJu`@5AN2^Em1PYTFPpA)*o zvpEJapM!l*Sy=(^%7BRn*=d|w<-^F`$DjRGo`tv!s!_oxbBrMeqWkBl?eeLfOu73=9y7v(;Y4KnZov7>wwTet5J#t7~XS@buEj>h>mW| zbn*A*^}#A)V^(Ijo=6fMZS<;cbeb-6y;`ZfFJXAHpD#5PcR{M!X8!wOJHt{niJG|13I8O9F0?Bt>7reiN|&+B>I~ebhlljiGD%# zAu3^}b3W65@yf3|u8?&G0nr=((Bbd()UiK1(i%AW7vKa;V-=NCL(;Ve8h%(#+m}^U zO}*iukWj)IoV{+Ql@Q@XvAnr_hs)~dweX-UV`X9a>|bB+WB~~%5F-pVDF56pe@0SP zR>Flzo6#5KK_`v+dN#o%>64>GQIY@acBc>n85P|FUC(4tI<5B;s8O1zLfcl-YHtz^C8mh|_)SzF zW@p#?%)p?)C{i5RLcX!e#a*xtKZ;CD$Pc(3#=^Vq=Aln$m!_vcZ@=j3RW=9}HZ=L@oq-IcmCti^2X)cqQ9B*}R z4kIywdpN@vNN2K(gv2!48hQM%h%K|Meb_cyyQy~6l_38-QWI zm(X{nwl#vm{{F7`n$S)P>9_YE9NVTkm_$t}hE_RZ;pXm5NCiaRaT}O6#ZuuxUvFH~EaH9WRX-@W&DC}egBL9@-gf1}wKM{GI7$N~g*QTq4OE&^5*g#)t( zc2WA6kGpRc80fZB?J__Sl&F{)cRj1)H#IZUyy@fbZ&C2v`oH4Yf4y2`W6VCu8)fHdE#K&*H zfeyIT@w-MAGM87=SsKaB{p;b<_vy}OCza}mU*&H0((S+*NXg6+?pLBBrDa%JbcMeb zEufv-D}mq`12e1#{5I_0;L25BDsQhZ$E-# zhe0y7w!U6^&bTKB4pCl!u0}|$;XL5@`AL69*%!~BpE*KEKMJCWm#w@tET-tYs<=$-Mm;lh-cXMML zrsT2B)Umtz^c$E$NF-_MuV-U29amv^VHwrJ3w%5*z&@|yq z(waV-5o5O5pk$;(LFjdVf@f`WzCVHNOaGe8lD{(XD++U?5l-su?~@)ir2!&V0 z?()nIWl~ybO~r}Dupcp?YxNZ>>R7zTDEzf+pezwZ+AVS<{@kNhaSJ22+!{FeZ=E-@ zLcEy4F@478ZJ^%ZJY~3YZ&Y4X)aBi26A#Ai@^W4kbk&vjtB;4rDHJ~p4V2?Zo?du8 zCKx36(2m{kTEQE(cJ$|~d&!SLB=4Hp1hA84JjTq*!m%IJvq3oz&Kg-91vkiP`UA9i z{WhS4pQYP8^4XmfAfR)gw0*NtR79k%rp9M%3si5_)z#|_OTQET0g5Eyc&JSf{f+rS zL`Z1VSHQ`~w+(XV`-qNa>Y(7Xdmp_A&hw*-5y#;mDVe# ze8=YIXB+Pm-4E&Jhc3}Nj(5j7A{DLkFOzyb$RyTJFh(t}_Gf2pw`DXph6kJKJy{r_ zrL>mpy^t*0GkD02n(AuY6cx2oU-|rZy(&%a5N}S-4DG1!a_rIev;$67+iZpHU;H*p zR`zWMFJz?ePa=+{5iyibXzfe0qjr+>P(}C4n)B<~>6Be`C(`Fxc^op@QcvM-fA`#T zeWcP4V{8!VXXs3HVJ{G6q<+-g;N-$^=6|+MHn#s(!q?*@w04r3XE{H&kF78%?Z7H$ z$Hhl9olQcZ$7DT~)t)&`4;3NQ;lq+ms;a8v{(FXU?ZCPD6z#xYxfr>g3#_bjcx`Tw zbp}~(p*&FAhVwmEfU9dheeR~+Qli3pnN`8AYq)5*h%!h&wHC^5>gRChy|Q8rT3?^)4xeJ6TP1Ws zPOcr9H}GJtC#7N5R4{&Q1~e0DrP;CWQCY8>lU|9n8dyr}_ zeoDwluqE=OS};^yzt)XyH<}t7v5659J=H?|8s*LEpLwHNIrz&r!78-n(eBPTCE6LG zJ_~y|h0rw0pIXOI1rE~$g&X9RG9t9LpCj4z4uS$;BF1)V#34AFtXs4ey-~KIH5sD1 zCF|+wxrV#2D4(k0oRKkK=8Aea(h0Q{&{wSo0CxdIK$YQO+xoz<{0ie?4=toc6)GtT zRls-M#ryqrRc>;VMs;%- zDM!kX)n0dSC|-1w-blQ1TYsO#(Rt9-nK*8qjE^<&;0+%0HfYgr?BI*iyCuCC^Z@p@ zOFOZQVdM^WI4lb=G_3;Y)+un4%XXS z#FuLeo*oRPaeHzv@Jf<_>N8N{tW;=AzX}Hv0P`eO;}vErmr}O&l1(O4r(c04Td&WJ#YUpt2Bol|V{+$;4@wel+je&nS?7KYcn7uo|dk#jX~^5ey*1`0Uv;(B1_am5d0|K^uLN;_TTmkOu=3 z2<^!Xt3YM(wc%W{$~9dpu>`IQ!mb#WWpT-@tOBdOV6J?pE;kn^*n?1dv) zS-fjC`)z3#G;jLXoF~IU4_tMtFkC$!Nfn(-724NrT!*OEd6HL;X&Q;eug3v9~MVEIJjG7 zdX6Eu#YtwM^lxTOMX2M{xirSljL&uHwvCY}0wHulEq*v{uAS-E@1CnxkYX~hF% z`yK=H96v45o1H!*b&T7ehbKgrZr3s40XS+vG<$;$+c~cX3Kh-Yx{p~+pG#t<9i_48ayx+ul zCvy2i6TGs}#XJ?VJ<_p7&wDJoMaTDh-`rAN9RI@286xF1TOh9G;7Yg=PT}v&VOkd} z-i|5A)7s!N%uh}rVeCq6h|8S<+-^U7>IU!~k!TG{ftq>kGR$m=R-U4>dYZxjpdpl$ zzuAH=ty)%0Y@e+j&U$17vEUc(UtFZr19s#7N?jb=Sszt5n6>d~3p@i5A|VkO`9s0^ z14SccG4SEze{dn`*W7q2CWMm{9xw5&wTx`F}`Y%?=L&J+> z8j|aWrd&eyGcuEoQn$TH;NnrYmDG}K4u9Bv#5n4Q-HP3Uaq`4G?TIdAaU2z#aA3pKkC<5dR{Qaq=wn3u0snP;XwQ$%_E}0C>~v6FmM78sfo*{RW5k7UD+FR#YqDHV zJKCytaWv~ywNU(OAfWCC|9^$VQ`A#v>vtqhy#9q?QfJ+g$paL27D$8 zM+y%|IV#;^7QV%sE;cU}kI3`gWtTw(ZM6R2YDX7kj(0t~hZWC(!*ARu9YOQ*eZlLO zFTd2(Ff2!)wcg?>%H;UEfkC85_p`fEOmA$NCg|Ob1bfFTTTc-^;0@#+n-`Sm{oqF& zY;JsM?}eaj!_sXh-0`!Naf#TM24r!`V%9nvceb(FUvCy{K3`hHeFZW)s5gVRR5ZBA z!XjRc92x?2Owd5Qv`Tc8914i1ca|6479ttD_+cE&LSf|XH_!b3r>CMP<6f+ka#VF> zN@fC zFCGp;h1#XPckG=Fyur6>E>Ok6_iO6n#X~mk5KSRe2z>VVb)OpQv+^agf#k+>5Bm&W zaul~9ki{;3erwoIn2K6)wib%nd)@yQ^^vwEsW! z8zd+%6~L9qy8PkDK(vl4#Ql;JsLD1C=c>*^YC}*XLtbEqDYI-FO1?sA(aS$lqL_$( z{mS!*Z`>iNGtq1etCg)*^ZgQ`g8x<7;U41Y>=(9{x6vX@J5dRe;rn^+Qe1wMC0CRi zkX-mTa}&>&e8y9c@Dl&cltDg+hnZMF2ziI_4#SLZkU-c(zim^gocs%V=T4a{lFIAk?c>Ar>3nPCzuyhsk}mDC1)hRabN|cP!s?`ZS6!Whm|#l% z2zHoNQ2GKWtcMHtM6dU$8Uo`ZONQWyaVIoZz(V`p2N_Qgb(xCJ>~M`Ah`sdm^lWU{ z|An%pAx$OIq2FGyOxh17LCxv3%sGGWrIz7MAHG&H+=kxa)C?nv zM$75-`F{0uL+eT^i!~Ez*Epj*Xz(-~@x6bbtbQrnaWXRK>*L@GzS=#ODV@-zsbM8l zfvzbl3W@l3@Az*%%IlOrd=zRO)Y0vV{^B`bu|9xVf2Om0EdF{@Xm7(Wk8^Dbma18A zOOTz)?%xW$Joe>51Z&Re3g&_p+>>R?ucaiFtDc_OjZje;*VH8D*dnbC^sWQIM_p6Zf7?u|u>G9T$nN!qm~|EDL=qNrvi?#)RnE*&5z`HmE0Zw8@@vs&X`2pYaAS6fwJyB^*r-&11m z^iWUd@k=Tt$K1k#lmfdQN)6qraI)suEguAcvNb;0-QB{> zQ~=9uInice*va~!-rGvPm{$TLo^agb{=)>^foV?}tnT@{VM99PfUBRmd0mKsxf{yZ z(It1Hik)rFA5O%X1g%9hL1Ee5<8)PCE~kE+2e~&OVvQd#KV793v?nA{CkeIk{scVy zhdTHzmtyr=x3p1kwly?5@Q2k;!M9dtyIDbg;tihBonzS$_X#V?Q{)Q zOq{YtUi$p(V%zxa9?41?#+l)NGbw`g({TB*_JA%S?gep-2M%E>K%*A`k+ZB7aK3N# z(>-sl;9iT^l$RBNaDn68T(j8v0|nETy;+C9b)h`6Fi)&9yM(m+5-rHzsIM)^b&j;e zadn@x)=BJtf3TJ5mz2UlmMefTz=~SpQX%&S zN1xvm5u%yEFE8b z_4fENh#r1pVP}mEu1e_>MoSa>0z1D*hPZXPsjKAs);Qevgul5`-;G5(%}$RyZiMu@ zond=t-U2q929z8HOopkZTSHhm)i+?3fd+xxL;%?kf96t|njxy^d=jon_fir}zK?Ff zLua?jHR4y|Q+xS7DMaj7FDN*&zI?1D-8Dg$HZSMKsZw-XvLg09F#0qBj3*#i4nRah z%Aoa}=M36ucvLpdxPNV2Qn>o660bhXjqSAwYii6P8{P1f7j>84&JclJwrSwB5K8kRp9&u`rW8HK+I{PUWidVTqYS@1`phfxEyQ zYw;rn@yKUUGPMsRoSmh&X1yBbr08W}F~9vV<=RH5VE9QYr_H3LGrA-@!_no^qx=#v zU1zIH)j@1FrYKJGo9*Zy2hpWyI0h!n$0yye8wV5>u%QJ7+lTKBLUUE ztJy6U6SmmLDRI2nAaq_OVw9KqPCiy2wU)0diA;eh{#j`}s1Jjpn3>^i%c&h=4GrIR zF6wlpPEfedJ3hXK&Q2)SG*BtSp0ktCz<%ZHL5F;)(MJ&->(l+TxlV*$u{>a;B1xnl zZ`dR^DHm-EoBPX`GhZ`C!}3FHVHuj;t@fi2 zTw{x`5J?Kwk-k%f#t(lMc@puJ>68>>Y6~U(`UQn0e#PvsMTNr_C|2s;g4}hWJpL%m zv-0{1ya91adR_j}J<~I)dQ$$}C{Pwi(oLL=Wd{gpEK;Mp^nwmJ3ZXJV zdqJR<;@*8(j#X);z8oIAa0<5gxVCHFiMgb@i{q`(KtBfRke!`>Xfi4&9L`nQ={(;~ zV<)BBd1~Xydhh6 zniHf9`;WIA(u_lMz$ydW%+5AXfv+$?@7TE(IiX+k3D@=8T+lNz2w5f`Qw$xW4psKw z3~v9PIz2cotfKPaN3aWb98CQ(n?Bq#MA_%>4HG)6_ zOVQae5Yp^`L_W=x4|2{D9wWTVOI<$0lQ$N0?J|%J(Ug>|S|ZoZJ^!nc2*&x=#!U1o zj2Zyf`-s?UYRT@q>?Emw;1lRH!RM>H;K^;|@=lAMO4iw(PS)R@c1PGDN`dPLw1dQ* z`~P&IiZdBHL)#9tRQ%!ncs#2k(^$G-b}&fLAoc1*yYbWXuPqbC8MoO7pZZN4nkz<@LPzp9j2{-~a1jz%)VFh=lM+TMpfspzBEc>EuOd zKg}`xukEMLh~Jt$ZZPNUA5LsU+D{=Q8axK>2pOFJH=9p)Vrk@eU<^VST|>fL@QXk6 z?Be;Ja<%fB2izm#QIn4Z_|MTE-CEOiCw@b1aNLxsu0_BRn_^k`a{L5wJjeT_X(hi+ ziuWQG1D5AB4SUk6a>%r6JeZ4KVhH^9nyzsYz%M^2$?B?eA?>hF-7%SZt$LE2{9{rC zHD|pzTi$(ovw?&9^TQDKH}39{Nd<FGmvVK4*0W@HPp+Z4rapS{;EkC(`ee%hNfX z%rR1ho=xa;=5yS*VR(RG*f{yw4xgR?e58s^aub+s=sDKb(0ITc7#0?WV6X&!cd+6{ zJXc(BD)!nM-xShsIO*52&QP?qv=uFVseB`&GUT@pD%x9pZ_GX#IPT5TlRnxIXgBZ2 zTt&1n9ag)hp2jMhJ5#jY1Se_*0uMIOlZk`lG*WjoFhrr19pRu<6=zN+Z_rzL=^cth*^IB4)@m2kIIS7 z{HHjltlN>Zmvm1Ms#ELq7i|Ir0ObUlLpH0+z}D1iM}H(jP8D(Qcy`0f*Vos}tMRn5 zy~Kcd)k^om&!0b`h{d=H=b_bJYvd+9eq0=IRp>c_^Xn=<(!nvr&{?*KqR^FGHKYHm zk;sZp0s&?=gANurEnXxVz%4A!z?+!D_UFabRzOsYi>#Wii2a|!z5*)BHR>AiBFYFV z%Aisz3L+p%Nhu*pBhn$=F{E@Uhyf}g4FW15-6f5J(%mIB(kWfvc?Z1re&4$P`dKbq zFw8q|JkQB}_P)I$pUaO3>W;@bhRJ?~qE47z(&55I2~ZYpgP|tH((kP%hVRfB%8Wa~ z^8Ug8WxZwYWu5ZnwV#$@QX06md9Gd+qZpP?7%jOuttW3!>mv^uc7UE6| zKP%|GuFe8RRcG;&Y2>Fpu{IvUhP5>Py5Pe{j{AjJUkY_6!(mE`$Da-C3EOMiisd)2r*^jW zGJx7z>}lm}gEt$uXuI(R!m_;<7A!Xq1vjxxC~F1;Q|i))!cc;SxKN>!5rx`Gg@v`X zp!DoOt`$Czuon7#&m#;%EUAxE2!+JU> z{g)&jjMc_Kq`^Zn*uar42cFEb9}!uXU9dMJ?YEmcE^=-K-C&10$6R? zqO;Dd>zkY^mCA9jT#?A`e%?v~>{ZK4O97H$4L?%u8J`;!3bb2?HLCtIF?CN&uCc;> zdz1!X&2LMYW8>q`A3rjAOrHeyuA=FkL9}m*>gnU6XmL;gD}F>-gb{&TwTY< z_jZQ%RF*jmEiE&$?0E=G6aHVubFv^XeKpRP=;%?S)>yHYJ8oz- zv9br9Q*5>*Mz(~W@2P=)a#?n=C`a{yX+j3UlO-(_G+Y@>yU^aBh*af>CVc}LV?lVE ztt{_CNdiY+%;Wdu*B{+*{2mi?A?|}7+Wd}OOBTWVoW}Q}olWzoNG-At?5TF0CWm$e ze-vNIHAt?VC4?2J*em4bhA3daDSOd&EkpSJBa0W_XtfzIlu(tHpA#lRp|Tz5WhEtF zhXS``JG6fHth46_3iD*TJxvGKu^5Nn6A!~MqHQ%zU@Jq(KjwH^H`Yd}8l$krsW#0z za>XE&8{h!L1gYB&(~{SHf;&yF`=n}1-7?xq_>%En8Rq3KlWf96oQC2$oK$%g=y0XKsvIxisbH8!OTXudOHmUQ7iU$;zi@X8 z;Q{BptKl?xWjw!DSdQlRFoMyU?JQo%*fN?dzh1c;3Gp6r;TUj!ytye z8qfTwz*2D20~A1iNCG9D88pc0nuG(Whe7Z&q$YXWt|v=>iUy=oC?R3iL0oU*sIGyK3L<8Z3!@Xodk-l#rT_y1X9-) zQtpOI`zTmi9w#DF&CseCaPvso?5w3av!u;7RGLB9b=C*74s0V5LXPZV+krV_%1q5w zRdJvy+sb@qUAt3Ut*o~2D9yZ(YmT?OMrh9Sm4O(J=&4FO9S>`5K?7%1+vW`!21 z(T@P?Ktq@#{MP!_Z}m+oj}2*U6yA6RT6~B9T42hx?T6OB?_OkyCDQbeCJLx*&6}~B zh8(MaQ53oB{A{e4fkK-EYdH=>nO7H-P@Qyol z3!Os3zJMzdwTpz+U%!5W>(z8!Av2U&JayNPju>bpm+DyN8%~hDH(dO64F{IIhS&WL z7zqN^kl4C>Ae$iV8uUQ%?1)d_L#FcZL!+MBi2$><3;`~s>5DdnZbrY4p%#$COynMd z6@v5u)=wgDLfV{jS}2#J(3FMb2M?KjsH_|z!{f~&kXDA@Jh6IFNCb34kSgH8coDAf z4&Ud_$1OF*uHRZfjsPL}pTZ>aV<5Sj%$~$67)6I&Gt+p*`vxk1ojyPX`hnnU6S)J@ zVC{=FEM*crvDQa1X&lO+Rr~pj0G91lsD83YgTy+Bh^(bBvtxSMflN>*KR91TjNm$KcPP#W{{9cNTyoz(;JA;k8=#-1TH<8u;7|Z#-LGD8JN^Eg zr2^J7^rkL8K0YWdUAf5O4t-Vt(}52abLFjBTwZ=hnYzYWJ;GVNSE1fB18A@jKH$EO zii!dQqrjT3Sq7LAOA8B&#QKpcpIkG+UI^3`8~g`=itpVQtD6+UoN75n{xj+Fy5C-& zl8wXnQO`3|!KoqBMq{d}aCcK$`3X#$gcUuA;7oN~=JmS#hpeX7tn`4ZCV##?u?-}E z^)z_hcU>SBg{>RO=P2vQaQk^ym}F01uBkotL2n+0SGW3j4JCvwVCg&ZHDHT?bFdw( zJNtg~tOcjVAm3zqtW#E)Y{3m1tYl)nFaPdm`TKQfy^-tL+bpH)LK@IBm1_<7Wd5lB zh<`&M&(VNT4pYUaRd%zz9K5^{Cpbq*aEpeXNx-<*LtINs3s__VX#RJ{)piSLU#?9u zDy99X1IYhMoRjfKH~?^3Dz*}ypiYrXczYR9jiID;fuxRqxA>?Gh?vMFNKY1r+~irg zImiSec7u&$7UKhN7(eNwmTVx>VC@PK1}g&r8^`F9PtS#b^v+?>g%T)-T71qc|f zWJ0V4+1XTC$W6u0@9VD2pkekMy|lc1FAT^M#}Z=S)Ug5KE|vE z-$w~=<_DTf`;fNEb#Y0G{v7eRpgQk}T-JH$!+PB=r{dT~eCbOJCn; zPE7chH?JoEc;`2i#H~87|GJYCl!d359)l9}CDz*f>*Lz_n;07cY5?h-hhPNflIa1Hz)C`5}8lHk?|Po>+_7 zhfv~=cTS5X-GuaNoRfaqhk(Lzyncf%!hYLrmPZN)0)fYk_k=+QmFPybD&=r<-Uyxg z_wUO!xmf2@SKhW*m(IL&#{S-Pw@CyxnB#vxF$l>>$)7hU^tvb)^`X=4up#hFGYF_( z6KFliD?f&UV+R)8Fk4?H@_fei)j8@|_5L5+`3nr30Cx@m@4YD_7{6mapImkm_`b}$ z#tK$c@(x&~C)P%&M{0N(0W+!57)$dH4wd&qf)hJ>Er@3v^oGMtxyjGLC(+UD8_p-! z*oQ_2%-^X^tEP2W2i+uj?R8Yj}8e04qn% z?`UDsDkiP9dRqrrxscz$_ceB<#z_9%H7PU;-M(2yzQb#{?E#e%RMpceMm#$`RAdHn z0;420WH?$L*g5d_*SxsH{CVwQtM9)T*l5N39Grxb~-qmb`q#Q$n2s_N=sh65CLmlq6>3;)U$&nMfv&m2&)q(<_muwN00jTWL$1fFZsv# z*Ju_yWY)YFCArVH{?ii>c5-zg8;^m7tcicm%*uPa;nt9Rx`r!kRqV3CXudLdgy`t# z;;ombXk+QbcmKn6F>XLr`+fZYGAfu1T}9?wxAM!?VLDa`ypuwv&b=`A8Q5%4&<7iG z#8dG6FA#snHb8xB2=F*6W{#;x0_|0RFj-XerR+?FC!thtgG0!8`g0PhYg<>mew0!u zDeNs6&lV|CAZtnnpXxeZo|XvPWjwPF0&0F@d6Hgb>mw*fND8IJB;N82MBZ_A0tec- zEe42I!}`zG$|=78yk!Imv*?5R-@Gn8!*q>4_N@DnD-vu2kePa za}2)y2k;9Zae8tHu~$V!&H&z)j^ax!4%BEVcGM?jp-|qxTCsgBw+__bQXALbtf@*N z{#5t-+aCAUQdj5Eq$!#^sjgincmEapcubygL0rql;J;mqqY0SP6Et^HVoy->DJMu% zL33@?g-Y#YIEU#f)US3Ie^K#5S)l-c&V`_HFz=4k!}!1zEP|q!~cdp zV`u$BLdegYk^gx;^0u?0n1sT(KD6mJTN@f0ij@rwe*tPA_srU_b$(9fi7p{z66R|z1~ z^PFZ}RwLho8=&U0AQ8FkEaBD+LS|GfZiRGhgtF%WDcrhoGt7i*Uz-Z`B>FVsloQqP(PLdgmsCpBt2kR{*4|!bm$P+5gi6_mouPxz8G+P2RX@D zg>iMj+R~+7w)nl$rJ39$+-g!T1OqQ0)71QUOcgq|PvowuCle#JcDyG`27ob9!XU8m z12_3OKmGHA$pg3dG%o`z8A$a)rZ7>a4)F@)dqAkS{5^W;8$=Ihk3aYG^Mgr|aQ@R` zgRb2f+EZ2D|ACZJSmNKDp!GkA0|#sMly3{(RV~sgVLqzE023(7(2NB^X4r-8d-*XP zPhci-Bl+Up=T{Yis{LIvm-e6bVBI5bo85XWRhj1Kq6|0+#O!-COahi)T%71d;`+=` zSsBPUS1~mSO~rxM$OMWh0To}8;j(z zy>{{9aF1bh6?%@8FrnnjAcJaS2o>gel*XRLbq@F_oENeupS&w{_wL$E&)1vRNC4G+ z0wRXxWePrrj15|&OfOQsp=V^)rDmxulhJD{(kqTHC5XE{2>vnQ)tE!&)Lz=2cWt;$ zITcKHtlHnHxlpr~wj*e#1uZ5#XIzfMi1gAfeeZlC!YTjKkw0d1*q*!*Bbbk8yg2H zll<^BF_{i0*F6eNNyG$6YX8fD%3K&;KJj@+pF3xRLp0YxaX)vn(8|GD%1TZMZ- zNLw=jvmZ2Q^=qe9!ZcsTpCpbDN$>u=b_gM2gNzH8e&D`2VUP<@dt$A9kdI|79%D>> zNJ3(|(T#$?nDeqC1P%Z^#N{u~koKdP5L#4t0Z*-fjSWpnMRl8x@BA%uKI7I{sQ#ZB zLeI56Q}a&MEZYT(&`v4V1%auN#S1ccxJcZgg;Hz?Wzj4xhH?%lQ$s#@8%V|KdxgN& zwzamlM}n4hO$8GE;9+q|uO&G~P#?(LfE!<~72$T{wKq31`WzCXw70ucbyae=cH{`j z{fQ9WdZ=G?fls%vnE%^%cIjZ^wtU{aQLxd`(c#4O#+LdkUW9bqZ-_2oc`tj7%)Vt7U`BC?t*Ipc;F!^oQ z^q?eay)GTeb&>2WOeLwR!Z|`xCAo%pGVzz0FiNw39x*Oog-@ydtWd@S0;zjPzP z`9p3tR#p#N{r&xcy;80fYFDUZ$8K&U4<&~&(eNS2>_G z2H7VSq*;*a?W0*kYLL&Go@NZ2Dl)`87$R z^}&*4e+#H-hWE1>i4#;3stGEbJzA?G={z8BLppVG!NxB+iNDqJTj_AKTfJ^5I$ zbo=-v)(aPov)n9pIsV$A!|1m-nv6#H^^r>xNrKsA-#D((Mf^P6yr3GWaEL}PeJ~|i z#avN}vxcKUEXkaDPK=7Uv66N7F2P?&Zy*iF(6d^|9JI3kjVhg=ENaVZyF5cx*!fTH5Q$hZ$ z8XhnnUW`7Zl6l$?jncY}w206INo0bpjQ7j9(@g2_A9+|>G~!0huzxYuKYjJp%xQBX zaxSG4D-=-@q`i|{3x&U;bc5IgD6-)_kjGm(_L?(CotUBWve~90dynWwv^euIplahD6tX|qBwqVeN zQOrRS<>t#GZz)fy0O(z9E+#>vXTkgaCGr%z^Ry~FyFIKKLef8;zb5`hV%&mmHHa;_ zvEwzU^>;=_$!U#4GrRrZw3TBx?Q_9a#8N9KCzsN1)U%~$^)2i6B%3af;F zp?AG9)XQMDsGFkYapCs2uDzc(jdoWz&cAw;(QEuVwtRg)+5--o*VH2ow*sTx7|6|1 zU8c;H=x5X6)Z%vH0&}~3bmDg-On-~6>ZEv2k$w8X-2kr!@UYeU*ZFSR7UJ(su;18P zHhUv{U3r%MepaWW7Mb!z`myETO|OvCE&g3Ep>jH_lRrD^KaZQ3ni{0yU9X^5-3py4 zZv>_D1pUTIYUli$v8Hp0aH`KVZ}sn(C+@l4&b+Id<8`HpS>>i}RbE&hml9@0F6OWW zO-paVr|;bx;=oG>EX6o%5e}`5gRvdwL^yzuSsxzDN`w^X0Idzy0cLgn&?W(V``{OG zZn%yO&jCk14kLqOp6oz~ZXdIE=U{Y!$-K889ZRfwCuP7)@ccHLJq%~%3FPoYJp|e3 zIP#zU@x(thVoa~;(CrqBw54C&m51vKQ#EBDK0I~ytn#BrDJV5A+bMZj*?<-!pg?Pb zsWpVOi!j@ZFrqU#-Fp2PzkOMvuk`H*M>L!xV)AhRLE2i73aZlt^ou?)>)r3_s#|Tv=YR99t!_o19?1>d+kJ=$tZtT)AmC zw#n%&AOyThH1tweW&-M0JAmqV6W zSg1?5zA=8Q>oDzoVys!bL;$EYz?Phb>Ji?oO9pK7O5Mt3#^o!rXCrPZCWd&(M%!O% zVy};#8%lkUpR<(n(dS+SB{k$LgP`3V5jheP82Fm{_Lunh_|j4!;{jOWq*QMuAVerg zNv+oxv?~MtXF60*YWZ3k&==oB_{_pgod8gzh!ki(QIiT%ko=gXw*%5bfn+$={sgEFYisw zxVX$OinRIGZu8p6WBvRtN)7(y*I1%=fqH^9#i|lH9CrI`&{}!AbKefYR}|* zx$Bx`R7-t^G|ruN&cSch&$rQHf7FSXWSP*dMf0sG*}!}N^GQG`m47uyg>A70Sz`w! zhvrJfRftSntD|1i@xOWu#haLz7`lXYgX|5MD;F+{0OQy6C={I@G9V*6oXlvSFEHbo6d2b4VGrireDIC= z3|E#JIjpQRc6QQyCatmY0SixRU|Icc>rXSIM)cb_8o66=Z4U+iqD{02_*PBt-^k3} z1xsRfHPl6lP?PWTV9L=|BH(V$6F3U~2%fN&wcRzCbnQB$;!VlRm6UfO!lWeICtEhy z!?wf(waowC;=H-_vbEeDq0zCi_OUaX*v`)AoJpwBzst+88omFir2saga}I%R_;mu$ z3au??m?bv?<=nx+!8hU8SaR;XU0IxuJI6W4T=4kuLw=Ua1U+VrMB&M00q*w(%odIE zmALI!w`|KamGtE~dWYM7@ly@z7K9{srLr|w)Yv%-Q_OL_drJkFNZhR#;H5FcuRN@= zyRJVS9&*R2=B$o9=Ax;4XR0%5Ypx*QvdGOM-UKDfj~U3RoT_9d@tmHX?%)QJrcW!0 zJ}+N>PEEypklR|!1!a5I51=f#*6tM6fZT8fH74|Q&o(mhZ>_H%=VbAraQ+H!U{H`c zV5DFHXPYOrCx7RL8puws5F`oO+QU18YDU&}X(BskeTaN|};y z41tAXrtB>{G2SyVh*YAyTg)U zuO;N>VS>UwG|(ULaE#?Pe;6rClYc`x^@Q&+B}_%z5ZlU|b{z?;#JhXYIZCoI;^*hL zCAyxXl1&FaDibg~Fj06@zcvtSCfJ>88Ukpjc&UiM1^_}qFC8J0Xm7uK`Lc2oc64MU z&=v*7PY7BwcS=CX`wQT@oa)_Xs7(GyGNh-gT`kql{b4Xwitd*Q2axkD{qqyC!pcblm-$NOisu z%Ig8T);^G~W4zNfcvWSj>4wCtj785RiQ;lW8_tfTEAGY1a;K7OOjBZ zG+SU7jlF>xV4o&9o*(sUY#e=?R&}R7;LJz4k8!f4feTxGO~T~Wa6 zobF05+X@qfb!&sI_YeCrJHJvvNCS!rT)ez5o;_2(rJ%v(ylTe%5_myAPXL(hBpXyG z1NSVTEpr6=U%Mp)VIfW4;p4yN=>01P9^5p^DSSNBdj0wJ2B{G>K2=~9>HMAVw6SV! zXH7Cin&Z;HgvJb8@9Ot7jG0P%H9q)PG&nnVR>+ZU$OK{$I9ZC!oC-UosRRT zct$VsET;`ToPT5IKIMJkE3Km4JS4yGXJKc7$2CF&rf|Y214f(^Z=KFtKi)^lE~I+Z zQA?ruAuIt*a7m6>g$sb1jn0Ifk0$DF|+Q{Xfu0+Ix1PPNH0@aA!XK!^zRqi`~ zeh7v3z1S1xiAgcLbZYh0gi7u=yTNR@@Zc}C3x7{LAwyyZC$t}X>@zE26LEpfKC1hG zz8V*mKqcn`=1&Bb^GATdZC`c~tev?Gf*S8-#z^8uamSVM zj#0EP+w-#n#r@AEDYBM)g2Z?FF*cr?1l&bj6rOM7x}+6OkVccw&;6Ri&T>A+HV1qm zjVtYzrDWr+ZX0U*+H{vFD{&4W0h>@L_N+KbMrI3cZ9LW$Dgp=&QGBEIIdMK(WT4nF z8;TfAO!a+zyudF7#nXdpMxJesIl^WIMp9QdH_Qa()#0U!etqoR*^g$@$~+hO==ioo z?X;zaV`@C_*He9HcRu0}9~k$em_Ps0Efc3er;|P0WvrT)yfV+}25lC2S!IRUUwWW( z-oRV!Ou`($cIC6)Ue&NoP{R=s5n-eU$l$_z`$1zPBQ7BFH!(?)Rgsltb^1LK9v;5A zxd~+<_(C=svO18(q6*oc5zLr-lIh@ci`WEi;>nedc=`lcSA^l~W;|qYzC99@!^bf1 zpz+C5Z>~_e)J8R+&j7to~yEKfv*`CRxfiK=;%;j03cIHaBvjA`{1Tz zcmoyztd4_53EV-mr^xz)Ax!vaJhKYvyoIm7-lnCvjV~)X39p1MYO)178G2^tigMXm z%1@DR&wG@PZrMQ%e0p+idniijgsdKeY^|)NUEzuq9Rs@x%hpiK-JKlA^@U-8$gQuh zhf2mHP^`o=AsOak(1=GCCTI<@?sXCK~c81yQN-ar@%>j>5_@5Y2Qwf*SX7i&GR~qpj5{a0)MRy8?}G-sj;MsG^duMQyCu zMbCG0?-fwXK98toI;-1N`aJPcOA zH9!KC7h{V>thk|7{sfqb zt_DF6%*4#h5zzoRaX>&bv#@+W*suuMDlBT)x3H0=OmD^eTQ97E2moizcx3v%vD=^i z-8WyxLS(yrx6KXrQl{F~|7C{uUoE87)PK*rG*(@}7~M1bE{-EqL28I(1)3$zXu zT*oUYEl@5TMF!50$SFz - - - -- [Generating figures](#generating-figures) - - - -Most of the figures for this proposal are generated with [PlantUML](http://plantuml.com/), an [open-source](https://sourceforge.net/projects/plantuml/) tool that can generate sequence, use case, class, activity, state, object, and other kinds of UML digrams. - -PlantUML requires the Java runtime, so we have published a Docker container image that includes all dependencies (to publish your own, use `Dockerfile` in this directory). - -## Generating figures - -To generate diagrams in this directory, `make figures`. - -In general, to generate the figure described in `foo.plantuml`: -``` -SRC="foo.plantuml" -docker run \ - --rm \ - --volume ${PWD}:/figures \ - --user $(shell id --user):$(shell id --group) \ - dpf9/plantuml:1.2019.6 \ - -v /figures/${SRC} -``` \ No newline at end of file