diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 61b1b49da558..a8c2d06a95a1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,6 +11,7 @@ - [CLIs](#clis) - [Branches](#branches) - [Support and guarantees](#support-and-guarantees) + - [Removal of v1alpha3 & v1alpha4 apiVersions](#removal-of-v1alpha3--v1alpha4-apiversions) - [Contributing a Patch](#contributing-a-patch) - [Documentation changes](#documentation-changes) - [Releases](#releases) diff --git a/Makefile b/Makefile index 623542f32017..0a98e6d7efd7 100644 --- a/Makefile +++ b/Makefile @@ -503,6 +503,10 @@ generate-modules: ## Run go mod tidy to ensure modules are up to date cd $(TOOLS_DIR); go mod tidy cd $(TEST_DIR); go mod tidy +.PHONY: generate-doctoc +generate-doctoc: + TRACE=$(TRACE) ./hack/generate-doctoc.sh + .PHONY: generate-e2e-templates generate-e2e-templates: $(KUSTOMIZE) $(addprefix generate-e2e-templates-, v1.0 v1.3 v1.4 main) ## Generate cluster templates for all versions @@ -596,7 +600,7 @@ APIDIFF_OLD_COMMIT ?= $(shell git rev-parse origin/main) apidiff: $(GO_APIDIFF) ## Check for API differences $(GO_APIDIFF) $(APIDIFF_OLD_COMMIT) --print-compatible -ALL_VERIFY_CHECKS = doctoc boilerplate shellcheck tiltfile modules gen conversions capi-book-summary +ALL_VERIFY_CHECKS = doctoc boilerplate shellcheck tiltfile modules gen conversions doctoc capi-book-summary .PHONY: verify verify: $(addprefix verify-,$(ALL_VERIFY_CHECKS)) lint-dockerfiles ## Run all verify-* targets @@ -623,9 +627,11 @@ verify-gen: generate ## Verify go generated files are up to date verify-conversions: $(CONVERSION_VERIFIER) ## Verifies expected API conversion are in place $(CONVERSION_VERIFIER) -.PHONY: verify-doctoc -verify-doctoc: - TRACE=$(TRACE) ./hack/verify-doctoc.sh +verify-doctoc: generate-doctoc + @if !(git diff --quiet HEAD); then \ + git diff; \ + echo "doctoc is out of date, run make generate-doctoc"; exit 1; \ + fi .PHONY: verify-capi-book-summary verify-capi-book-summary: diff --git a/docs/proposals/20181121-machine-api.md b/docs/proposals/20181121-machine-api.md index 306f384eb43a..081349ec2a59 100644 --- a/docs/proposals/20181121-machine-api.md +++ b/docs/proposals/20181121-machine-api.md @@ -3,7 +3,6 @@ Minimalistic Machines API - - [Capabilities](#capabilities) - [Proposal](#proposal) - [In-place vs. Replace](#in-place-vs-replace) diff --git a/docs/proposals/20190610-machine-states-preboot-bootstrapping.md b/docs/proposals/20190610-machine-states-preboot-bootstrapping.md index c7911301efeb..178017880e74 100644 --- a/docs/proposals/20190610-machine-states-preboot-bootstrapping.md +++ b/docs/proposals/20190610-machine-states-preboot-bootstrapping.md @@ -18,62 +18,65 @@ status: implemented ## Table of Contents -* [Machine States & Preboot Bootstrapping](#machine-states--preboot-bootstrapping) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [Data model changes](#data-model-changes) - * [States and transitions](#states-and-transitions) - * [Pending](#pending) - * [Transition Conditions](#transition-conditions) - * [Expectations](#expectations) - * [Provisioning](#provisioning) - * [Transition Conditions](#transition-conditions-1) - * [Expectations](#expectations-1) - * [Provisioned](#provisioned) - * [Transition Conditions](#transition-conditions-2) - * [Expectations](#expectations-2) - * [Running](#running) - * [Transition Conditions](#transition-conditions-3) - * [Expectations](#expectations-3) - * [Deleting](#deleting) - * [Transition Conditions](#transition-conditions-4) - * [Expectations](#expectations-4) - * [Deleted](#deleted) - * [Transition Conditions](#transition-conditions-5) - * [Expectations](#expectations-5) - * [Failed](#failed) - * [Transition Conditions](#transition-conditions-6) - * [Expectations](#expectations-6) - * [Sequence diagram: User creates a machine with Kubeadm bootstrapper\.](#sequence-diagram-user-creates-a-machine-with-kubeadm-bootstrapper) - * [User Stories](#user-stories) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Machine Controller Role](#machine-controller-role) - * [Machine Controller dynamic watchers](#machine-controller-dynamic-watchers) - * [Object References, Templates, MachineSets and MachineDeployments](#object-references-templates-machinesets-and-machinedeployments) - * [Controllers and the single responsibility approach](#controllers-and-the-single-responsibility-approach) - * [Remote references and accessing a workload cluster](#remote-references-and-accessing-a-workload-cluster) - * [The “Phase” field and its role](#the-phase-field-and-its-role) - * [Showing a status summary to users](#showing-a-status-summary-to-users) - * [Risks and Mitigations](#risks-and-mitigations) - * [State transitions are inflexible](#state-transitions-are-inflexible) - * [Machine Controller can access any machine or cluster in any namespace](#machine-controller-can-access-any-machine-or-cluster-in-any-namespace) - * [Certificates and tokens are exposed in plaintext](#certificates-and-tokens-are-exposed-in-plaintext) - * [Bootstrap data cannot be merged](#bootstrap-data-cannot-be-merged) - * [MachineClass is deprecated and will be revisited later](#machineclass-is-deprecated-and-will-be-revisited-later) - * [Design Details](#design-details) - * [Test Plan](#test-plan) - * [Graduation Criteria](#graduation-criteria) - * [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) - * [Version Skew Strategy](#version-skew-strategy) - * [Implementation History](#implementation-history) - * [Drawbacks](#drawbacks) - * [Alternatives](#alternatives) - * [Object References, Templates, MachineSets and MachineDeployments](#object-references-templates-machinesets-and-machinedeployments-1) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [Data model changes](#data-model-changes) +- [States and transitions](#states-and-transitions) + - [Pending](#pending) + - [Transition Conditions](#transition-conditions) + - [Expectations](#expectations) + - [Provisioning](#provisioning) + - [Transition Conditions](#transition-conditions-1) + - [Expectations](#expectations-1) + - [Provisioned](#provisioned) + - [Transition Conditions](#transition-conditions-2) + - [Expectations](#expectations-2) + - [Running](#running) + - [Transition Conditions](#transition-conditions-3) + - [Expectations](#expectations-3) + - [Deleting](#deleting) + - [Transition Conditions](#transition-conditions-4) + - [Expectations](#expectations-4) + - [Deleted](#deleted) + - [Transition Conditions](#transition-conditions-5) + - [Expectations](#expectations-5) + - [Failed](#failed) + - [Transition Conditions](#transition-conditions-6) + - [Expectations](#expectations-6) + - [Sequence diagram: User creates a machine with Kubeadm bootstrapper.](#sequence-diagram-user-creates-a-machine-with-kubeadm-bootstrapper) + - [User Stories](#user-stories) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Machine Controller Role](#machine-controller-role) + - [Machine Controller dynamic watchers](#machine-controller-dynamic-watchers) + - [Object References, Templates, MachineSets and MachineDeployments](#object-references-templates-machinesets-and-machinedeployments) + - [Controllers and the single responsibility approach](#controllers-and-the-single-responsibility-approach) + - [Remote references and accessing a workload cluster](#remote-references-and-accessing-a-workload-cluster) + - [The “Phase” field and its role](#the-phase-field-and-its-role) + - [Showing a status summary to users](#showing-a-status-summary-to-users) + - [Risks and Mitigations](#risks-and-mitigations) + - [State transitions are inflexible](#state-transitions-are-inflexible) + - [Machine Controller can access any machine or cluster in any namespace](#machine-controller-can-access-any-machine-or-cluster-in-any-namespace) + - [Certificates and tokens are exposed in plaintext](#certificates-and-tokens-are-exposed-in-plaintext) + - [Bootstrap data cannot be merged](#bootstrap-data-cannot-be-merged) + - [MachineClass is deprecated and will be revisited later](#machineclass-is-deprecated-and-will-be-revisited-later) +- [Design Details](#design-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) +- [Drawbacks](#drawbacks) +- [Alternatives](#alternatives) + - [Object References, Templates, MachineSets and MachineDeployments](#object-references-templates-machinesets-and-machinedeployments-1) + + ## Glossary diff --git a/docs/proposals/20190709-cluster-spec-crds.md b/docs/proposals/20190709-cluster-spec-crds.md index 1b3f17bc1626..a10bb42fa05c 100644 --- a/docs/proposals/20190709-cluster-spec-crds.md +++ b/docs/proposals/20190709-cluster-spec-crds.md @@ -18,41 +18,44 @@ see-also: ## Table of Contents - * [Cluster Spec & Status CRDs](#cluster-spec--status-crds) - * [Table of Contents](#table-of-contents) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [Data Model changes](#data-model-changes) - * [Controller collaboration](#controller-collaboration) - * [States and Transitions](#states-and-transitions) - * [Pending](#pending) - * [Conditions](#conditions) - * [Expectations](#expectations) - * [Provisioning](#provisioning) - * [Transition Conditions](#transition-conditions) - * [Expectations](#expectations-1) - * [Provisioned](#provisioned) - * [Transition Conditions](#transition-conditions-1) - * [Expectations](#expectations-2) - * [User Stories](#user-stories) - * [As an infrastructure provider author, I would like to take advantage of the Kubernetes API to provide validation for provider-specific data needed to provision a cluster infrastructure.](#as-an-infrastructure-provider-author-i-would-like-to-take-advantage-of-the-kubernetes-api-to-provide-validation-for-provider-specific-data-needed-to-provision-a-cluster-infrastructure) - * [As an infrastructure provider author, I would like to build a controller to manage provisioning cluster infrastructure using tools of my own choosing.](#as-an-infrastructure-provider-author-i-would-like-to-build-a-controller-to-manage-provisioning-cluster-infrastructure-using-tools-of-my-own-choosing) - * [As an infrastructure provider author, I would like to build a controller to manage provisioning clusters without being restricted to a CRUD API.](#as-an-infrastructure-provider-author-i-would-like-to-build-a-controller-to-manage-provisioning-clusters-without-being-restricted-to-a-crud-api) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Role of Cluster Controller](#role-of-cluster-controller) - * [Cluster Controller dynamic watchers](#cluster-controller-dynamic-watchers) - * [Risks and Mitigations](#risks-and-mitigations) - * [Design Details](#design-details) - * [Test Plan](#test-plan) - * [Graduation Criteria](#graduation-criteria) - * [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) - * [Version Skew Strategy](#version-skew-strategy) - * [Implementation History](#implementation-history) - * [Drawbacks [optional]](#drawbacks-optional) - * [Alternatives [optional]](#alternatives-optional) + + + +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [Data Model changes](#data-model-changes) + - [Controller collaboration](#controller-collaboration) + - [States and Transitions](#states-and-transitions) + - [Pending](#pending) + - [Conditions](#conditions) + - [Expectations](#expectations) + - [Provisioning](#provisioning) + - [Transition Conditions](#transition-conditions) + - [Expectations](#expectations-1) + - [Provisioned](#provisioned) + - [Transition Conditions](#transition-conditions-1) + - [Expectations](#expectations-2) + - [User Stories](#user-stories) + - [As an infrastructure provider author, I would like to take advantage of the Kubernetes API to provide validation for provider-specific data needed to provision a cluster infrastructure.](#as-an-infrastructure-provider-author-i-would-like-to-take-advantage-of-the-kubernetes-api-to-provide-validation-for-provider-specific-data-needed-to-provision-a-cluster-infrastructure) + - [As an infrastructure provider author, I would like to build a controller to manage provisioning cluster infrastructure using tools of my own choosing.](#as-an-infrastructure-provider-author-i-would-like-to-build-a-controller-to-manage-provisioning-cluster-infrastructure-using-tools-of-my-own-choosing) + - [As an infrastructure provider author, I would like to build a controller to manage provisioning clusters without being restricted to a CRUD API.](#as-an-infrastructure-provider-author-i-would-like-to-build-a-controller-to-manage-provisioning-clusters-without-being-restricted-to-a-crud-api) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Role of Cluster Controller](#role-of-cluster-controller) + - [Cluster Controller dynamic watchers](#cluster-controller-dynamic-watchers) + - [Risks and Mitigations](#risks-and-mitigations) +- [Design Details](#design-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) +- [Drawbacks [optional]](#drawbacks-optional) +- [Alternatives [optional]](#alternatives-optional) + + ## Summary diff --git a/docs/proposals/20190919-machinepool-api.md b/docs/proposals/20190919-machinepool-api.md index 2ad2fcbb0cdb..533e738c107d 100644 --- a/docs/proposals/20190919-machinepool-api.md +++ b/docs/proposals/20190919-machinepool-api.md @@ -1,9 +1,23 @@ --- title: MachinePool API +authors: +- "@juan-lee" +- "@CecileRobertMichon" + reviewers: +- "@detiber" +- "@justaugustus" +- "@ncdc" +- "@vincepri" + creation-date: 2019-09-19 + last-updated: 2019-11-24 + replaces: +- [cluster-api-provider-azure Proposal](https://docs.google.com/document/d/1nbOqCIC0-ezdMXubZIV6EQrzD0QYPrpcdCBB4oSjWeQ/edit) + status: provisional +--- + - - [MachinePool API](#machinepool-api) - [Glossary](#glossary) - [Summary](#summary) @@ -51,20 +65,6 @@ title: MachinePool API -authors: - - "@juan-lee" - - "@CecileRobertMichon" -reviewers: - - "@detiber" - - "@justaugustus" - - "@ncdc" - - "@vincepri" -creation-date: 2019-09-19 -last-updated: 2019-11-24 -replaces: - - [cluster-api-provider-azure Proposal](https://docs.google.com/document/d/1nbOqCIC0-ezdMXubZIV6EQrzD0QYPrpcdCBB4oSjWeQ/edit) -status: provisional ---- # MachinePool API diff --git a/docs/proposals/20191016-clusterctl-redesign.md b/docs/proposals/20191016-clusterctl-redesign.md index 073394a7974a..cbd3c12d14c3 100644 --- a/docs/proposals/20191016-clusterctl-redesign.md +++ b/docs/proposals/20191016-clusterctl-redesign.md @@ -21,30 +21,34 @@ status: implementable ## Table of Contents -- [Table of Contents](#table-of-contents) + + + - [Glossary](#glossary) - [Summary](#summary) - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) - [Proposal](#proposal) - - [Preconditions](#preconditions) - - [User Stories](#user-stories) - - [Initial Deployment](#initial-deployment) - - [Day Two Operations “Lifecycle Management”](#day-two-operations-lifecycle-management) - - [Target Cluster Pivot Management](#target-cluster-pivot-management) - - [Provider Enablement](#provider-enablement) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Init sequence](#init-sequence) - - [Day 2 operations](#day-2-operations) - - [Risks and Mitigations](#risks-and-mitigations) + - [Preconditions](#preconditions) + - [User Stories](#user-stories) + - [Initial Deployment](#initial-deployment) + - [Day Two Operations “Lifecycle Management”](#day-two-operations-lifecycle-management) + - [Target Cluster Pivot Management](#target-cluster-pivot-management) + - [Provider Enablement](#provider-enablement) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Init sequence](#init-sequence) + - [Day 2 operations](#day-2-operations) + - [Risks and Mitigations](#risks-and-mitigations) - [Upgrade Strategy](#upgrade-strategy) - [Additional Details](#additional-details) - - [Test Plan [optional]](#test-plan-optional) - - [Graduation Criteria [optional]](#graduation-criteria-optional) - - [Version Skew Strategy](#version-skew-strategy) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) + - [Version Skew Strategy](#version-skew-strategy) - [Implementation History](#implementation-history) + + ## Glossary Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html). diff --git a/docs/proposals/20191016-e2e-test-framework.md b/docs/proposals/20191016-e2e-test-framework.md index 9b471a028a07..90b4bfe1b017 100644 --- a/docs/proposals/20191016-e2e-test-framework.md +++ b/docs/proposals/20191016-e2e-test-framework.md @@ -27,7 +27,6 @@ superseded-by: [] - - [Glossary](#glossary) - [Summary](#summary) - [Motivation](#motivation) diff --git a/docs/proposals/20191017-kubeadm-based-control-plane.md b/docs/proposals/20191017-kubeadm-based-control-plane.md index 3bc2f35f13e1..b2951f544580 100644 --- a/docs/proposals/20191017-kubeadm-based-control-plane.md +++ b/docs/proposals/20191017-kubeadm-based-control-plane.md @@ -26,52 +26,55 @@ status: implementable ## Table of Contents - * [Kubeadm Based Control Plane Management](#kubeadm-based-control-plane-management) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [References](#references) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [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) - * [Rollout strategy](#rollout-strategy) - * [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) - * [KubeadmControlPlane rollout](#kubeadmcontrolplane-rollout) - * [Rolling update strategy](#rolling-update-strategy) - * [Constraints and Assumptions](#constraints-and-assumptions) - * [Remediation (using delete-and-recreate)](#remediation-using-delete-and-recreate) - * [Why delete and recreate](#why-delete-and-recreate) - * [Scenario 1: Three replicas, one machine marked for remediation](#scenario-1-three-replicas-one-machine-marked-for-remediation) - * [Scenario 2: Three replicas, two machines marked for remediation](#scenario-2-three-replicas-two-machines-marked-for-remediation) - * [Scenario 3: Three replicas, one unresponsive etcd member, one (different) unhealthy machine](#scenario-3-three-replicas-one-unresponsive-etcd-member-one-different-unhealthy-machine) - * [Scenario 4: Unhealthy machines combined with rollout](#scenario-4-unhealthy-machines-combined-with-rollout) - * [Preflight checks](#preflight-checks) - * [Etcd (external)](#etcd-external) - * [Etcd (stacked)](#etcd-stacked) - * [Kubernetes Control Plane](#kubernetes-control-plane) - * [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](#glossary) + - [References](#references) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [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) + - [Rollout strategy](#rollout-strategy) + - [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) + - [KubeadmControlPlane rollout](#kubeadmcontrolplane-rollout) + - [Rolling update strategy](#rolling-update-strategy) + - [Constraints and Assumptions](#constraints-and-assumptions) + - [Remediation (using delete-and-recreate)](#remediation-using-delete-and-recreate) + - [Why delete and recreate](#why-delete-and-recreate) + - [Scenario 1: Three replicas, one machine marked for remediation](#scenario-1-three-replicas-one-machine-marked-for-remediation) + - [Scenario 2: Three replicas, two machines marked for remediation](#scenario-2-three-replicas-two-machines-marked-for-remediation) + - [Scenario 3: Three replicas, one unresponsive etcd member, one (different) unhealthy machine](#scenario-3-three-replicas-one-unresponsive-etcd-member-one-different-unhealthy-machine) + - [Scenario 4: Unhealthy machines combined with rollout](#scenario-4-unhealthy-machines-combined-with-rollout) + - [Preflight checks](#preflight-checks) + - [Etcd (external)](#etcd-external) + - [Etcd (stacked)](#etcd-stacked) + - [Kubernetes Control Plane](#kubernetes-control-plane) + - [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 diff --git a/docs/proposals/20191030-machine-health-checking.md b/docs/proposals/20191030-machine-health-checking.md index 1787b1b63550..f9d8a0ebefcb 100644 --- a/docs/proposals/20191030-machine-health-checking.md +++ b/docs/proposals/20191030-machine-health-checking.md @@ -22,42 +22,41 @@ superseded-by: ## Table of Contents -A table of contents is helpful for quickly jumping to sections of a proposal and for highlighting -any additional information provided beyond the standard proposal template. -[Tools for generating](https://github.com/ekalinin/github-markdown-toc) a table of contents from markdown are available. - - * [Title](#title) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [Unhealthy criteria:](#unhealthy-criteria) - * [Remediation:](#remediation) - * [Conditions VS External Remediation](#conditions-vs-external-remediation) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Story 3 (external remediation)](#story-3-external-remediation) - * [Story 4 (external remediation)](#story-4-external-remediation) - * [Story 5 (external remediation)](#story-5-external-remediation) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [MachineHealthCheck CRD:](#machinehealthcheck-crd) - * [Machine conditions:](#machine-conditions) - * [External Remediation](#external-remediation) - * [Example CRs](#example-crs) - * [MachineHealthCheck controller:](#machinehealthcheck-controller) - * [Risks and Mitigations](#risks-and-mitigations) - * [Contradictory signal](#contradictory-signal) - * [Alternatives](#alternatives) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Test Plan [optional]](#test-plan-optional) - * [Graduation Criteria [optional]](#graduation-criteria-optional) - * [Version Skew Strategy [optional]](#version-skew-strategy-optional) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [Unhealthy criteria:](#unhealthy-criteria) + - [Remediation:](#remediation) + - [Conditions VS External Remediation](#conditions-vs-external-remediation) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3 (external remediation)](#story-3-external-remediation) + - [Story 4 (external remediation)](#story-4-external-remediation) + - [Story 5 (external remediation)](#story-5-external-remediation) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [MachineHealthCheck CRD:](#machinehealthcheck-crd) + - [Machine conditions:](#machine-conditions) + - [External Remediation](#external-remediation) + - [Example CRs](#example-crs) + - [MachineHealthCheck controller:](#machinehealthcheck-controller) + - [Risks and Mitigations](#risks-and-mitigations) +- [Contradictory signal](#contradictory-signal) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) + - [Version Skew Strategy [optional]](#version-skew-strategy-optional) +- [Implementation History](#implementation-history) + + ## Glossary Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html). diff --git a/docs/proposals/20200220-cluster-resource-set.md b/docs/proposals/20200220-cluster-resource-set.md index 3b16786879a6..264ccc46a04b 100644 --- a/docs/proposals/20200220-cluster-resource-set.md +++ b/docs/proposals/20200220-cluster-resource-set.md @@ -15,34 +15,37 @@ status: experimental # ClusterResourceSet ## Table of Contents -* [ClusterResourceSet](#clusterresourceset) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Story 3](#story-3) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Data model changes to existing API types](#data-model-changes-to-existing-api-types) - * [ClusterResourceSet Object Definition](#clusterresourceset-object-definition) - * [ClusterResourceSetBinding Object Definition](#clusterresourcesetbinding-object-definition) - * [ApplyOnce mode](#applyonce-mode) - * [Reconcile mode](#reconcile-mode) - * [Risks and Mitigations](#risks-and-mitigations) - * [Drift](#drift) - * [Deletion](#deletion) - * [Alternatives](#alternatives) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Test Plan [optional]](#test-plan-optional) - * [Graduation Criteria [optional]](#graduation-criteria-optional) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Data model changes to existing API types](#data-model-changes-to-existing-api-types) + - [ClusterResourceSet Object Definition](#clusterresourceset-object-definition) + - [ClusterResourceSetBinding Object Definition](#clusterresourcesetbinding-object-definition) + - [`ApplyOnce` mode](#applyonce-mode) + - [`Reconcile` mode](#reconcile-mode) + - [Risks and Mitigations](#risks-and-mitigations) + - [Drift](#drift) + - [Deletion](#deletion) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20200330-spot-instances.md b/docs/proposals/20200330-spot-instances.md index 0519816ff633..a6ab01a7100d 100644 --- a/docs/proposals/20200330-spot-instances.md +++ b/docs/proposals/20200330-spot-instances.md @@ -21,64 +21,62 @@ superseded-by: ## Table of contents - - * [Add support for Spot Instances](#add-support-for-spot-instances) - * [Table of contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Interruptible label](#interruptible-label) - * [Cloud Provider Implementation Specifics](#cloud-provider-implementation-specifics) - * [AWS](#aws) - * [Launching instances](#launching-instances) - * [GCP](#gcp) - * [Launching instances](#launching-instances-1) - * [Azure](#azure) - * [Launching Instances](#launching-instances-2) - * [Deallocation](#deallocation) - * [Future Work](#future-work) - * [Termination handler](#termination-handler) - * [Support for MachinePools](#support-for-machinepools) - * [Risks and Mitigations](#risks-and-mitigations) - * [Control-Plane instances](#control-plane-instances) - * [Cloud Provider rate limits](#cloud-provider-rate-limits) - * [Alternatives](#alternatives) - * [Reserved Instances](#reserved-instances) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Non-Guaranteed instances](#non-guaranteed-instances) - * [AWS Spot Instances](#aws-spot-instances) - * [Spot backed Autoscaling Groups](#spot-backed-autoscaling-groups) - * [Spot Fleet](#spot-fleet) - * [Singular Spot Instances](#singular-spot-instances) - * [Other AWS Spot features of note](#other-aws-spot-features-of-note) - * [Stop/Hibernate](#stophibernate) - * [Termination Notices](#termination-notices) - * [Persistent Requests](#persistent-requests) - * [GCP Preemptible instances](#gcp-preemptible-instances) - * [Instance Groups](#instance-groups) - * [Single Instance](#single-instance) - * [Limitations of Preemptible](#limitations-of-preemptible) - * [24 Hour limitation](#24-hour-limitation) - * [Shutdown warning](#shutdown-warning) - * [Azure Spot VMs](#azure-spot-vms) - * [Scale Sets](#scale-sets) - * [Single Instances](#single-instances) - * [Important Spot VM notes](#important-spot-vm-notes) - * [Termination Notices](#termination-notices-1) - * [Eviction Policies](#eviction-policies) - * [Implementation History](#implementation-history) - - - - + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Cloud Provider Implementation Specifics](#cloud-provider-implementation-specifics) + - [AWS](#aws) + - [Launching instances](#launching-instances) + - [GCP](#gcp) + - [Launching instances](#launching-instances-1) + - [Azure](#azure) + - [Launching Instances](#launching-instances) + - [Deallocation](#deallocation) + - ['Interruptible' label](#interruptible-label) + - [Future Work](#future-work) + - [Termination handler](#termination-handler) + - [Support for MachinePools](#support-for-machinepools) + - [Risks and Mitigations](#risks-and-mitigations) + - [Control-Plane instances](#control-plane-instances) + - [Cloud Provider rate limits](#cloud-provider-rate-limits) +- [Alternatives](#alternatives) + - [Reserved Instances](#reserved-instances) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Non-Guaranteed instances](#non-guaranteed-instances) + - [AWS Spot Instances](#aws-spot-instances) + - [Spot backed Autoscaling Groups](#spot-backed-autoscaling-groups) + - [Spot Fleet](#spot-fleet) + - [Singular Spot Instances](#singular-spot-instances) + - [Other AWS Spot features of note](#other-aws-spot-features-of-note) + - [Stop/Hibernate](#stophibernate) + - [Termination Notices](#termination-notices) + - [Persistent Requests](#persistent-requests) + - [GCP Preemptible instances](#gcp-preemptible-instances) + - [Instance Groups](#instance-groups) + - [Single Instance](#single-instance) + - [Limitations of Preemptible](#limitations-of-preemptible) + - [24 Hour limitation](#24-hour-limitation) + - [Shutdown warning](#shutdown-warning) + - [Azure Spot VMs](#azure-spot-vms) + - [Scale Sets](#scale-sets) + - [Single Instances](#single-instances) + - [Important Spot VM notes](#important-spot-vm-notes) + - [Termination Notices](#termination-notices-1) + - [Eviction Policies](#eviction-policies) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20200423-etcd-data-disk.md b/docs/proposals/20200423-etcd-data-disk.md index 815baf75ada0..e6f85832da5b 100644 --- a/docs/proposals/20200423-etcd-data-disk.md +++ b/docs/proposals/20200423-etcd-data-disk.md @@ -16,7 +16,9 @@ status: implementable ## Table of Contents -- [Table of Contents](#table-of-contents) + + + - [Glossary](#glossary) - [Summary](#summary) - [Motivation](#motivation) @@ -24,11 +26,20 @@ status: implementable - [Non-Goals/Future Work](#non-goalsfuture-work) - [Proposal](#proposal) - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Changes required in the bootstrap provider (i.e. CABPK)](#changes-required-in-the-bootstrap-provider-ie-cabpk) + - [Changes required in the infrastructure provider (here Azure is used as an example to illustrate the required changes).](#changes-required-in-the-infrastructure-provider-here-azure-is-used-as-an-example-to-illustrate-the-required-changes) - [Risks and Mitigations](#risks-and-mitigations) - [Alternatives](#alternatives) + - [Use script to do the etcd mount and append that script to preKubeadmCommands](#use-script-to-do-the-etcd-mount-and-append-that-script-to-prekubeadmcommands) + - [Use Cloud init to mount the data dir but modify bootstrap data in the infrastructure provider before passing to the instance user data](#use-cloud-init-to-mount-the-data-dir-but-modify-bootstrap-data-in-the-infrastructure-provider-before-passing-to-the-instance-user-data) + - [Instrument the OS image with image-builder to perform this customization automatically through custom UDEV rules, scripts, etc.](#instrument-the-os-image-with-image-builder-to-perform-this-customization-automatically-through-custom-udev-rules-scripts-etc) - [Upgrade Strategy](#upgrade-strategy) + + ## Glossary Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html). diff --git a/docs/proposals/20200506-conditions.md b/docs/proposals/20200506-conditions.md index eb98e201cdf6..a4774ea000da 100644 --- a/docs/proposals/20200506-conditions.md +++ b/docs/proposals/20200506-conditions.md @@ -17,40 +17,43 @@ superseded-by: ## Table of Contents -- [Conditions - Cluster status at glance](#conditions---cluster-status-at-glance) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Story 4](#story-4) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Data Model Changes](#data-model-changes) - - [Constraints](#constraints) - - [Condition semantic](#condition-semantic) - - [The Ready condition](#the-ready-condition) - - [Controller changes](#controller-changes) - - [The cluster provisioning workflow](#the-cluster-provisioning-workflow) - - [The ClusterInfrastructureReady condition](#the-clusterinfrastructureready-condition) - - [The cluster’s ControlPlaneReady condition](#the-clusters-controlplaneready-condition) - - [The cluster’s WorkersReady condition](#the-clusters-workersready-condition) - - [The control plane upgrade workflow](#the-control-plane-upgrade-workflow) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Kubernetes Conditions](#kubernetes-conditions) - - [Status field](#status-field) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan [optional]](#test-plan-optional) - - [Graduation Criteria [optional]](#graduation-criteria-optional) - - [Version Skew Strategy [optional]](#version-skew-strategy-optional) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Story 4](#story-4) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Data Model Changes](#data-model-changes) + - [Constraints](#constraints) + - [Condition semantic](#condition-semantic) + - [The Ready condition](#the-ready-condition) + - [Controller changes](#controller-changes) + - [The cluster provisioning workflow](#the-cluster-provisioning-workflow) + - [The `ClusterInfrastructureReady` condition](#the-clusterinfrastructureready-condition) + - [The cluster’s `ControlPlaneReady` condition](#the-clusters-controlplaneready-condition) + - [The cluster’s `WorkersReady` condition](#the-clusters-workersready-condition) + - [The control plane upgrade workflow](#the-control-plane-upgrade-workflow) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) + - [Kubernetes Conditions](#kubernetes-conditions) + - [Status field](#status-field) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) + - [Version Skew Strategy [optional]](#version-skew-strategy-optional) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20200511-clusterctl-extensible-template-processing.md b/docs/proposals/20200511-clusterctl-extensible-template-processing.md index f6be8ae69ef9..5f624266c819 100644 --- a/docs/proposals/20200511-clusterctl-extensible-template-processing.md +++ b/docs/proposals/20200511-clusterctl-extensible-template-processing.md @@ -26,26 +26,29 @@ superseded-by: ## Table of Contents - * [Extensible Template Processing for clusterctl](#extensible-template-processing-for-clusterctl) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals](#non-goals) - * [Future Work](#future-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [UX for using Extensible Templating Tools](#ux-for-using-extensible-templating-tools) - * [Interface and Library Changes](#interface-and-library-changes) - * [Notes](#notes) - * [Risks and Mitigations](#risks-and-mitigations) - * [Constraints](#constraints) - * [Alternatives](#alternatives) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Future Work](#future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [UX for using Extensible Templating Tools](#ux-for-using-extensible-templating-tools) + - [Interface and Library Changes](#interface-and-library-changes) + - [Notes](#notes) + - [Risks and Mitigations](#risks-and-mitigations) + - [Constraints](#constraints) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20200602-machine-deletion-phase-hooks.md b/docs/proposals/20200602-machine-deletion-phase-hooks.md index bebe59c69060..4b43748fbfc5 100644 --- a/docs/proposals/20200602-machine-deletion-phase-hooks.md +++ b/docs/proposals/20200602-machine-deletion-phase-hooks.md @@ -15,49 +15,51 @@ status: implemented # Machine Deletion Phase Hooks ## Table of Contents - -- [Machine Deletion Phase Hooks](#machine-deletion-phase-hooks) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [lifecycle hook](#lifecycle-hook) - - [deletion phase](#deletion-phase) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Lifecycle Points](#lifecycle-points) - - [pre-drain](#pre-drain) - - [pre-terminate](#pre-terminate) - - [Annotation Form](#annotation-form) - - [lifecycle-point](#lifecycle-point) - - [hook-name](#hook-name) - - [owner (Optional)](#owner-optional) - - [Annotation Examples](#annotation-examples) - - [Changes to machine-controller](#changes-to-machine-controller) - - [Reconciliation](#reconciliation) - - [Hook failure](#hook-failure) - - [Hook ordering](#hook-ordering) - - [Owning Controller Design](#owning-controller-design) - - [Owning Controllers must](#owning-controllers-must) - - [Owning Controllers may](#owning-controllers-may) - - [Determining when to take action](#determining-when-to-take-action) - - [Failure Mode](#failure-mode) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Custom Machine Controller](#custom-machine-controller) - - [Finalizers](#finalizers) - - [Status Field](#status-field) - - [Spec Field](#spec-field) - - [CRDs](#crds) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - + + + + +- [Glossary](#glossary) + - [lifecycle hook](#lifecycle-hook) + - [deletion phase](#deletion-phase) + - [Hook Implementing Controller (HIC)](#hook-implementing-controller-hic) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Lifecycle Points](#lifecycle-points) + - [pre-drain](#pre-drain) + - [pre-terminate](#pre-terminate) + - [Annotation Form](#annotation-form) + - [lifecycle-point](#lifecycle-point) + - [hook-name](#hook-name) + - [owner (Optional)](#owner-optional) + - [Annotation Examples](#annotation-examples) + - [Changes to machine-controller](#changes-to-machine-controller) + - [Reconciliation](#reconciliation) + - [Hook failure](#hook-failure) + - [Hook ordering](#hook-ordering) + - [Hook Implementing Controller Design](#hook-implementing-controller-design) + - [Hook Implementing Controllers must](#hook-implementing-controllers-must) + - [Hook Implementing Controllers may](#hook-implementing-controllers-may) + - [Determining when to take action](#determining-when-to-take-action) + - [Failure Mode](#failure-mode) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) + - [Custom Machine Controller](#custom-machine-controller) + - [Finalizers](#finalizers) + - [Status Field](#status-field) + - [Spec Field](#spec-field) + - [CRDs](#crds) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + + ## Glossary diff --git a/docs/proposals/20200804-windows-support.md b/docs/proposals/20200804-windows-support.md index 9e37dedfa6df..e138b5e0b428 100644 --- a/docs/proposals/20200804-windows-support.md +++ b/docs/proposals/20200804-windows-support.md @@ -17,38 +17,41 @@ see-also: ## Table of Contents -- [Windows kubeadm-based worker nodes support](#windows-kubeadm-based-worker-nodes-support) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [Cluster API Bootstrap Provider Kubeadm](#cluster-api-bootstrap-provider-kubeadm) - - [cloud-init and cloudbase-init](#cloud-init-and-cloudbase-init) - - [Image Creation](#image-creation) - - [Kubelet and other component configuration](#kubelet-and-other-component-configuration) - - [netbios names](#netbios-names) - - [Infrastructure provider implementation](#infrastructure-provider-implementation) - - [User Stories](#user-stories) - - [As an operator, I would like to create Windows OS worker nodes with the CAPI API.](#as-an-operator-i-would-like-to-create-windows-os-worker-nodes-with-the-capi-api) - - [As an operator, I would like to manage Windows OS worker nodes with the CAPI API.](#as-an-operator-i-would-like-to-manage-windows-os-worker-nodes-with-the-capi-api) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Signing of the components.](#signing-of-the-components) - - [Known prototypes and prior work:](#known-prototypes-and-prior-work) - - [Security Model](#security-model) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan [optional]](#test-plan-optional) - - [Graduation Criteria [optional]](#graduation-criteria-optional) - - [Alpha](#alpha) - - [Beta](#beta) - - [Stable](#stable) - - [Version Skew Strategy](#version-skew-strategy) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [Cluster API Bootstrap Provider Kubeadm](#cluster-api-bootstrap-provider-kubeadm) + - [cloud-init and cloudbase-init](#cloud-init-and-cloudbase-init) + - [Image Creation](#image-creation) + - [Kubelet and other component configuration](#kubelet-and-other-component-configuration) + - [netbios names](#netbios-names) + - [Infrastructure provider implementation](#infrastructure-provider-implementation) + - [User Stories](#user-stories) + - [As an operator, I would like to create Windows OS worker nodes with the CAPI API.](#as-an-operator-i-would-like-to-create-windows-os-worker-nodes-with-the-capi-api) + - [As an operator, I would like to manage Windows OS worker nodes with the CAPI API.](#as-an-operator-i-would-like-to-manage-windows-os-worker-nodes-with-the-capi-api) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Signing of the components.](#signing-of-the-components) + - [Known prototypes and prior work:](#known-prototypes-and-prior-work) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) + - [Alpha](#alpha) + - [Beta](#beta) + - [Stable](#stable) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20201020-capi-provider-operator.md b/docs/proposals/20201020-capi-provider-operator.md index 184cc627dc34..064ecdd80951 100644 --- a/docs/proposals/20201020-capi-provider-operator.md +++ b/docs/proposals/20201020-capi-provider-operator.md @@ -20,41 +20,45 @@ https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20191016 ## Table of Contents -* [CAPI provider operator](#capi-provider-operator) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Existing API Types Changes](#existing-api-types-changes) - * [New API Types](#new-api-types) - * [Example API Usage](#example-api-usage) - * [Operator Behaviors](#operator-behaviors) - * [Installing a provider](#installing-a-provider) - * [Upgrading a provider](#upgrading-a-provider) - * [Upgrades providers without changing contract](#upgrades-providers-without-changing-contract) - * [Upgrades providers and changing contract](#upgrades-providers-and-changing-contract) - * [Changing a provider](#changing-a-provider) - * [Deleting a provider](#deleting-a-provider) - * [Upgrade from v1alpha3 management cluster to v1alpha4 cluster](#upgrade-from-v1alpha3-management-cluster-to-v1alpha4-cluster) - * [Operator Lifecycle Management](#operator-lifecycle-management) - * [Operator Installation](#operator-installation) - * [Operator Upgrade](#operator-upgrade) - * [Operator Delete](#operator-delete) - * [Air gapped environment](#air-gapped-environment) - * [Risks and Mitigation](#risks-and-mitigation) - * [Error Handling & Logging](#error-handling--logging) - * [Extensibility Options](#extensibility-options) - * [Upgrade from v1alpha3 management cluster to v1alpha4/operator cluster](#upgrade-from-v1alpha3-management-cluster-to-v1alpha4operator-cluster) - * [Additional Details](#additional-details) - * [Test Plan](#test-plan) - * [Version Skew Strategy](#version-skew-strategy) - * [Implementation History](#implementation-history) - * [Controller Runtime Types](#controller-runtime-types) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Clusterctl](#clusterctl) + - [Existing API Types Changes](#existing-api-types-changes) + - [New API Types](#new-api-types) + - [Example API Usage](#example-api-usage) + - [Operator Behaviors](#operator-behaviors) + - [Installing a provider](#installing-a-provider) + - [Upgrading a provider](#upgrading-a-provider) + - [Upgrades providers without changing contract](#upgrades-providers-without-changing-contract) + - [Upgrades providers and changing contract](#upgrades-providers-and-changing-contract) + - [Changing a provider](#changing-a-provider) + - [Deleting a provider](#deleting-a-provider) + - [Upgrade from v1alpha3 management cluster to v1alpha4 cluster](#upgrade-from-v1alpha3-management-cluster-to-v1alpha4-cluster) + - [Operator Lifecycle Management](#operator-lifecycle-management) + - [Operator Installation](#operator-installation) + - [Operator Upgrade](#operator-upgrade) + - [Operator Delete](#operator-delete) + - [Air gapped environment](#air-gapped-environment) + - [Risks and Mitigation](#risks-and-mitigation) + - [Error Handling & Logging](#error-handling--logging) + - [Extensibility Options](#extensibility-options) + - [Upgrade from v1alpha3 management cluster to v1alpha4/operator cluster](#upgrade-from-v1alpha3-management-cluster-to-v1alpha4operator-cluster) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) +- [Controller Runtime Types](#controller-runtime-types) + + ## Glossary diff --git a/docs/proposals/20210203-externally-managed-cluster-infrastructure.md b/docs/proposals/20210203-externally-managed-cluster-infrastructure.md index b9cd164ce7e2..c53814185c58 100644 --- a/docs/proposals/20210203-externally-managed-cluster-infrastructure.md +++ b/docs/proposals/20210203-externally-managed-cluster-infrastructure.md @@ -21,33 +21,37 @@ superseded-by: # Externally Managed cluster infrastructure ## Table of Contents - * [Externally Managed cluster infrastructure](#externally-managed-cluster-infrastructure) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Managed cluster infrastructure](#managed-cluster-infrastructure) - * [Externally managed cluster infrastructure](#externally-managed-cluster-infrastructure-1) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Story 1 - Alternate control plane provisioning with user managed infrastructure](#story-1---alternate-control-plane-provisioning-with-user-managed-infrastructure) - * [Story 2 - Restricted access to cloud provider APIs](#story-2---restricted-access-to-cloud-provider-apis) - * [Story 3 - Consuming existing cloud infrastructure](#story-3---consuming-existing-cloud-infrastructure) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Provider implementation changes](#provider-implementation-changes) - * [Security Model](#security-model) - * [Risks and Mitigations](#risks-and-mitigations) - * [What happens when a user converts an externally managed InfraCluster to a managed InfraCluster?](#what-happens-when-a-user-converts-an-externally-managed-infracluster-to-a-managed-infracluster) - * [Future Work](#future-work) - * [Marking InfraCluster ready manually](#marking-infracluster-ready-manually) - * [Alternatives](#alternatives) - * [ExternalInfra CRD](#externalinfra-crd) - * [ManagementPolicy field](#managementpolicy-field) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Implementation History](#implementation-history) + + + + +- [Glossary](#glossary) + - [Managed cluster infrastructure](#managed-cluster-infrastructure) + - [Externally managed cluster infrastructure](#externally-managed-cluster-infrastructure) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1 - Alternate control plane provisioning with user managed infrastructure](#story-1---alternate-control-plane-provisioning-with-user-managed-infrastructure) + - [Story 2 - Restricted access to cloud provider APIs](#story-2---restricted-access-to-cloud-provider-apis) + - [Story 3 - Consuming existing cloud infrastructure](#story-3---consuming-existing-cloud-infrastructure) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Provider implementation changes](#provider-implementation-changes) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) + - [What happens when a user converts an externally managed InfraCluster to a managed InfraCluster?](#what-happens-when-a-user-converts-an-externally-managed-infracluster-to-a-managed-infracluster) + - [Future Work](#future-work) + - [Marking InfraCluster ready manually](#marking-infracluster-ready-manually) +- [Alternatives](#alternatives) + - [ExternalInfra CRD](#externalinfra-crd) + - [ManagementPolicy field](#managementpolicy-field) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20210210-insulate-users-from-kubeadm-API-changes.md b/docs/proposals/20210210-insulate-users-from-kubeadm-API-changes.md index f02f3e26a2c7..76375b8b4227 100644 --- a/docs/proposals/20210210-insulate-users-from-kubeadm-API-changes.md +++ b/docs/proposals/20210210-insulate-users-from-kubeadm-API-changes.md @@ -17,31 +17,34 @@ superseded-by: ## Table of Contents -* [Insulate users from kubeadm API version changes](#insulate-users-from-kubeadm-api-version-changes) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals](#non-goals) - * [Future work](#future-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Requirements](#requirements) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Background info about kubeadm API version](#background-info-about-kubeadm-api-version) - * [Background info about kubeadm types into the KubeadmConfig/KubeadmControlPlane specs](#background-info-about-kubeadm-types-into-the-kubeadmconfigkubeadmcontrolplane-specs) - * [Cluster API v1alpha3 changes](#cluster-api-v1alpha3-changes) - * [Cluster API v1alpha4 changes](#cluster-api-v1alpha4-changes) - * [Security Model](#security-model) - * [Risks and Mitigations](#risks-and-mitigations) - * [Alternatives](#alternatives) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Test Plan](#test-plan) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Future work](#future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Requirements](#requirements) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Background info about kubeadm API version](#background-info-about-kubeadm-api-version) + - [Background info about kubeadm types into the KubeadmConfig/KubeadmControlPlane specs](#background-info-about-kubeadm-types-into-the-kubeadmconfigkubeadmcontrolplane-specs) + - [Cluster API v1alpha3 changes](#cluster-api-v1alpha3-changes) + - [Cluster API v1alpha4 changes](#cluster-api-v1alpha4-changes) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20210222-kubelet-authentication.md b/docs/proposals/20210222-kubelet-authentication.md index 0a040a264d0d..5190011d627c 100644 --- a/docs/proposals/20210222-kubelet-authentication.md +++ b/docs/proposals/20210222-kubelet-authentication.md @@ -32,53 +32,56 @@ superseded-by: ## Table of Contents -- [Cluster API Kubelet Authentication](#cluster-api-kubelet-authentication) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1: Machine Attestation](#story-1-machine-attestation) - - [Story 2: MachinePool race conditions](#story-2-machinepool-race-conditions) - - [Requirements](#requirements) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [New Components](#new-components) - - [Kubelet authentication plugin](#kubelet-authentication-plugin) - - [Node Attestation](#node-attestation) - - [CSR format used by kubelet-authenticator](#csr-format-used-by-kubelet-authenticator) - - [OIDs](#oids) - - [CSR PEM Blocks](#csr-pem-blocks) - - [Attestation data](#attestation-data) - - [Core Specification](#core-specification) - - [Provider Specification](#provider-specification) - - [All providers](#all-providers) - - [Insecure providers](#insecure-providers) - - [Secure providers](#secure-providers) - - [TPM based providers](#tpm-based-providers) - - [Kubeadm](#kubeadm) - - [Changes to the Cluster and core Cluster API controller](#changes-to-the-cluster-and-core-cluster-api-controller) - - [Changes to KubeadmControlPlane resources and controller](#changes-to-kubeadmcontrolplane-resources-and-controller) - - [Changes to Cluster API Bootstrap Provider Kubeadm](#changes-to-cluster-api-bootstrap-provider-kubeadm) - - [Changes to token rotation](#changes-to-token-rotation) - - [Kubelet authenticator flow](#kubelet-authenticator-flow) - - [Client CSR flow](#client-csr-flow) - - [Serving CSR handling](#serving-csr-handling) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Implement within the cloud providers instead of Cluster API](#implement-within-the-cloud-providers-instead-of-cluster-api) - - [Implement as authentication webhook, as per aws-iam-authenticator (Amazon EKS)](#implement-as-authentication-webhook-as-per-aws-iam-authenticator-amazon-eks) - - [SPIRE/SPIFFE](#spirespiffe) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan [optional]](#test-plan-optional) - - [Graduation Criteria [optional]](#graduation-criteria-optional) - - [Graduation to beta](#graduation-to-beta) - - [Graduation to GA](#graduation-to-ga) - - [Version Skew Strategy](#version-skew-strategy) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1: Machine Attestation](#story-1-machine-attestation) + - [Story 2: MachinePool race conditions](#story-2-machinepool-race-conditions) + - [Requirements](#requirements) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [New Components](#new-components) + - [Kubelet authentication plugin](#kubelet-authentication-plugin) + - [Node Attestation](#node-attestation) + - [CSR format used by kubelet-authenticator](#csr-format-used-by-kubelet-authenticator) + - [OIDs](#oids) + - [CSR PEM Blocks](#csr-pem-blocks) + - [Attestation data](#attestation-data) + - [Core Specification](#core-specification) + - [Provider Specification](#provider-specification) + - [All providers](#all-providers) + - [Insecure providers](#insecure-providers) + - [Secure providers](#secure-providers) + - [TPM based providers](#tpm-based-providers) + - [Kubeadm](#kubeadm) + - [Changes to the Cluster and core Cluster API controller](#changes-to-the-cluster-and-core-cluster-api-controller) + - [Changes to KubeadmControlPlane resources and controller](#changes-to-kubeadmcontrolplane-resources-and-controller) + - [Changes to Cluster API Bootstrap Provider Kubeadm](#changes-to-cluster-api-bootstrap-provider-kubeadm) + - [Changes to token rotation](#changes-to-token-rotation) + - [Kubelet authenticator flow](#kubelet-authenticator-flow) + - [Client CSR flow](#client-csr-flow) + - [Serving CSR handling](#serving-csr-handling) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) + - [Implement within the cloud providers instead of Cluster API](#implement-within-the-cloud-providers-instead-of-cluster-api) + - [Implement as authentication webhook, as per aws-iam-authenticator (Amazon EKS)](#implement-as-authentication-webhook-as-per-aws-iam-authenticator-amazon-eks) + - [SPIRE/SPIFFE](#spirespiffe) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) + - [Graduation to beta](#graduation-to-beta) + - [Graduation to GA](#graduation-to-ga) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20210310-opt-in-autoscaling-from-zero.md b/docs/proposals/20210310-opt-in-autoscaling-from-zero.md index 00a71003be04..045074b1b186 100644 --- a/docs/proposals/20210310-opt-in-autoscaling-from-zero.md +++ b/docs/proposals/20210310-opt-in-autoscaling-from-zero.md @@ -21,25 +21,31 @@ status: implementable ## Table of Contents -- [Title](#title) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Security Model](#security-model) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan](#test-plan-optional) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Infrastructure Machine Template Status Updates](#infrastructure-machine-template-status-updates) + - [MachineSet and MachineDeployment Annotations](#machineset-and-machinedeployment-annotations) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20210526-cluster-class-and-managed-topologies.md b/docs/proposals/20210526-cluster-class-and-managed-topologies.md index 239e38cc8432..30ebcb82217c 100644 --- a/docs/proposals/20210526-cluster-class-and-managed-topologies.md +++ b/docs/proposals/20210526-cluster-class-and-managed-topologies.md @@ -22,47 +22,50 @@ status: provisional ## Table of Contents -- [ClusterClass and Managed Topologies](#clusterclass-and-managed-topologies) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [ClusterClass](#clusterclass) - - [Topology](#topology) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Prospective future Work](#prospective-future-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1 - Use ClusterClass to easily stamp Clusters](#story-1---use-clusterclass-to-easily-stamp-clusters) - - [Story 2 - Easier UX for Kubernetes version upgrades](#story-2---easier-ux-for-kubernetes-version-upgrades) - - [Story 3 - Easier UX for scaling workers nodes](#story-3---easier-ux-for-scaling-workers-nodes) - - [Story 4 - Use ClusterClass to easily modify Clusters in bulk](#story-4---use-clusterclass-to-easily-modify-clusters-in-bulk) - - [Story 5 - Ability to define ClusterClass customizations](#story-5---ability-to-define-clusterclass-customizations) - - [Story 6 - Ability to customize individual Clusters via variables](#story-6---ability-to-customize-individual-clusters-via-variables) - - [Story 7 - Ability to mutate variables](#story-7---ability-to-mutate-variables) - - [Story 8 - Easy UX for MachineHealthChecks](#story-8---easy-ux-for-machinehealthchecks) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [New API types](#new-api-types) - - [ClusterClass](#clusterclass-1) - - [Modification to existing API Types](#modification-to-existing-api-types) - - [Cluster](#cluster) - - [Validation and Defailting](#validation-and-defailting) - - [Basic behaviors](#basic-behaviors) - - [Create a new Cluster using ClusterClass object](#create-a-new-cluster-using-clusterclass-object) - - [Update an existing Cluster using ClusterClass](#update-an-existing-cluster-using-clusterclass) - - [Behavior with patches](#behavior-with-patches) - - [Create a new ClusterClass with patches](#create-a-new-clusterclass-with-patches) - - [Create a new Cluster with patches](#create-a-new-cluster-with-patches) - - [Provider implementation](#provider-implementation) - - [Conventions for template types implementation](#conventions-for-template-types-implementation) - - [Notes on template \<-\> object reconciliation](#notes-on-template---object-reconciliation) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan \[optional\]](#test-plan-optional) - - [Graduation Criteria \[optional\]](#graduation-criteria-optional) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) + - [ClusterClass](#clusterclass) + - [Topology](#topology) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Prospective future Work](#prospective-future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1 - Use ClusterClass to easily stamp Clusters](#story-1---use-clusterclass-to-easily-stamp-clusters) + - [Story 2 - Easier UX for Kubernetes version upgrades](#story-2---easier-ux-for-kubernetes-version-upgrades) + - [Story 3 - Easier UX for scaling workers nodes](#story-3---easier-ux-for-scaling-workers-nodes) + - [Story 4 - Use ClusterClass to easily modify Clusters in bulk](#story-4---use-clusterclass-to-easily-modify-clusters-in-bulk) + - [Story 5 - Ability to define ClusterClass customizations](#story-5---ability-to-define-clusterclass-customizations) + - [Story 6 - Ability to customize individual Clusters via variables](#story-6---ability-to-customize-individual-clusters-via-variables) + - [Story 7 - Ability to mutate variables](#story-7---ability-to-mutate-variables) + - [Story 8 - Easy UX for MachineHealthChecks](#story-8---easy-ux-for-machinehealthchecks) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [New API types](#new-api-types) + - [ClusterClass](#clusterclass-1) + - [Modification to existing API Types](#modification-to-existing-api-types) + - [Cluster](#cluster) + - [Validation and Defaulting](#validation-and-defaulting) + - [Basic behaviors](#basic-behaviors) + - [Create a new Cluster using ClusterClass object](#create-a-new-cluster-using-clusterclass-object) + - [Update an existing Cluster using ClusterClass](#update-an-existing-cluster-using-clusterclass) + - [Behavior with patches](#behavior-with-patches) + - [Create a new ClusterClass with patches](#create-a-new-clusterclass-with-patches) + - [Create a new Cluster with patches](#create-a-new-cluster-with-patches) + - [Provider implementation](#provider-implementation) + - [Conventions for template types implementation](#conventions-for-template-types-implementation) + - [Notes on template <-> object reconciliation](#notes-on-template---object-reconciliation) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220125-ipam-integration.md b/docs/proposals/20220125-ipam-integration.md index 5576704d8538..01930ff764f7 100644 --- a/docs/proposals/20220125-ipam-integration.md +++ b/docs/proposals/20220125-ipam-integration.md @@ -22,39 +22,43 @@ status: provisional ## Table of Contents -* [IP Address Management Integration](#ip-address-management-integration) - * [Table of Contents](#table-of-contents) - * [Glossary](#glossary) - * [IPAM Provider](#ipam-provider) - * [IPAddressClaim](#ipaddressclaim) - * [IPAddress](#ipaddress) - * [IP Pool](#ip-pool) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals/Future Work](#non-goalsfuture-work) - * [Proposal](#proposal) - * [IPAM API Contract](#ipam-api-contract) - * [Pools & IPAM Providers](#pools--ipam-providers) - * [Consumption](#consumption) - * [Examples](#examples) - * [User Stories](#user-stories) - * [Story 1](#story-1) - * [Story 2](#story-2) - * [Story 3](#story-3) - * [Story 4](#story-4) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [New API Types](#new-api-types) - * [IPAddressClaim](#ipaddressclaim-1) - * [IPAddress](#ipaddress-1) - * [New Reference Type](#new-reference-type) - * [Implementing an IPAM Provider](#implementing-an-ipam-provider) - * [Consuming as an Infrastructure Provider](#consuming-as-an-infrastructure-provider) - * [Additional Notes](#additional-notes) - * [Security Model](#security-model) - * [Risks and Mitigations](#risks-and-mitigations) - * [Alternatives](#alternatives) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) + - [IPAM Provider](#ipam-provider) + - [IPAddressClaim](#ipaddressclaim) + - [IPAddress](#ipaddress) + - [IP Pool](#ip-pool) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Story 4](#story-4) + - [IPAM API Contract](#ipam-api-contract) + - [Pools & IPAM Providers](#pools--ipam-providers) + - [Examples](#examples) + - [Consumption](#consumption) + - [Example](#example) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [New API Types](#new-api-types) + - [IPAddressClaim](#ipaddressclaim-1) + - [IPAddress](#ipaddress-1) + - [New Reference Type](#new-reference-type) + - [Implementing an IPAM Provider](#implementing-an-ipam-provider) + - [Consuming as an Infrastructure Provider](#consuming-as-an-infrastructure-provider) + - [Additional Notes](#additional-notes) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Implementation History](#implementation-history) + + ## Glossary @@ -401,4 +405,4 @@ As an alternative to an official API contract, all interested providers could ag - [x] 07/01/2021: Compile a Google Doc following the CAEP template (link here) - [x] 08/18/2021: Present proposal at CAPI office hours -- [x] 01/26/2022: Open proposal PR \ No newline at end of file +- [x] 01/26/2022: Open proposal PR diff --git a/docs/proposals/20220209-machinepool-machines.md b/docs/proposals/20220209-machinepool-machines.md index c3af48182fb3..e7e76668bebc 100644 --- a/docs/proposals/20220209-machinepool-machines.md +++ b/docs/proposals/20220209-machinepool-machines.md @@ -21,27 +21,30 @@ status: implementable ## Table of Contents -- [MachinePool Machines](#machinepool-machines) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story U1](#story-u1) - - [Story U2](#story-u2) - - [Story U3](#story-u3) - - [Requirements](#requirements) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan [optional]](#test-plan-optional) - - [Graduation Criteria [optional]](#graduation-criteria-optional) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story U1](#story-u1) + - [Story U2](#story-u2) + - [Story U3](#story-u3) + - [Requirements](#requirements) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [clusterctl client](#clusterctl-client) + - [Graduation Criteria](#graduation-criteria) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220221-runtime-SDK.md b/docs/proposals/20220221-runtime-SDK.md index 508ed2bed5cd..cc924ef9de64 100644 --- a/docs/proposals/20220221-runtime-SDK.md +++ b/docs/proposals/20220221-runtime-SDK.md @@ -27,35 +27,40 @@ superseded-by: ## Table of Contents - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals](#non-goals) - * [Future Work](#future-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - * [Cluster API Runtime Hooks vs Kubernetes admission webhooks](#cluster-api-runtime-hooks-vs-kubernetes-admission-webhooks) - * [Runtime SDK rules](#runtime-sdk-rules) - * [Runtime Extensions developer guide](#runtime-extensions-developer-guide) - * [Registering Runtime Extensions](#registering-runtime-extensions) - * [Runtime Hooks developer guide (CAPI internals)](#runtime-hooks-developer-guide-capi-internals) - * [Runtime hook implementation](#runtime-hook-implementation) - * [Discovering Runtime Extensions](#discovering-runtime-extensions) - * [Calling Runtime Extensions](#calling-runtime-extensions) - * [Security Model](#security-model) - * [Risks and Mitigations](#risks-and-mitigations) - * [Alternatives](#alternatives) - * [Upgrade Strategy](#upgrade-strategy) - * [Additional Details](#additional-details) - * [Test Plan](#test-plan) - * [Graduation Criteria](#graduation-criteria) - * [Version Skew Strategy](#version-skew-strategy) - * [Annex](#annex) - * [Runtime SDK rules](#runtime-sdk-rules-1) - * [Discovery hook](#discovery-hook) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Future Work](#future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Cluster API Runtime Hooks vs Kubernetes admission webhooks](#cluster-api-runtime-hooks-vs-kubernetes-admission-webhooks) + - [Runtime SDK rules](#runtime-sdk-rules) +- [Runtime Extensions developer guide](#runtime-extensions-developer-guide) + - [Registering Runtime Extensions](#registering-runtime-extensions) +- [Runtime Hooks developer guide (CAPI internals)](#runtime-hooks-developer-guide-capi-internals) + - [Runtime hook implementation](#runtime-hook-implementation) + - [Discovering Runtime Extensions](#discovering-runtime-extensions) + - [Calling Runtime Extensions](#calling-runtime-extensions) +- [Security Model](#security-model) +- [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Version Skew Strategy](#version-skew-strategy) +- [Annex](#annex) + - [Runtime SDK rules](#runtime-sdk-rules-1) + - [Discovery hook](#discovery-hook) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220330-topology-mutation-hook.md b/docs/proposals/20220330-topology-mutation-hook.md index 6e8a0034da14..c779181e95b4 100644 --- a/docs/proposals/20220330-topology-mutation-hook.md +++ b/docs/proposals/20220330-topology-mutation-hook.md @@ -21,36 +21,42 @@ superseded-by: ## Table of Contents - * [Glossary](#glossary) - * [Summary](#summary) - * [Motivation](#motivation) - * [Goals](#goals) - * [Non-Goals](#non-goals) - * [Future work](#future-work) - * [Proposal](#proposal) - * [User Stories](#user-stories) - * [Cluster Operator guide](#cluster-operator-guide) - * [ClusterClass author guide](#clusterclass-author-guide) - * [Developer guide](#developer-guide) - * [Cluster topology reconciliation](#cluster-topology-reconciliation) - * [Definitions](#definitions) - * [Guidelines](#guidelines) - * [clusterctl alpha topology plan](#clusterctl-alpha-topology-plan) - * [Security Model](#security-model) - * [Risks and Mitigations](#risks-and-mitigations) - * [Invalid Cluster topology](#invalid-cluster-topology) - * [Infinite reconciles](#infinite-reconciles) - * [External Patch extension slows down Cluster topology reconciliation](#external-patch-extension-slows-down-cluster-topology-reconciliation) - * [Alternatives](#alternatives) - * [Extending inline patches vs. introducing external patches](#extending-inline-patches-vs-introducing-external-patches) - * [Upgrade Strategy](#upgrade-strategy) - * [Cluster API version upgrade](#cluster-api-version-upgrade) - * [Kubernetes version upgrade](#kubernetes-version-upgrade) - * [Additional Details](#additional-details) - * [Test Plan](#test-plan) - * [Graduation Criteria](#graduation-criteria) - * [Version Skew Strategy](#version-skew-strategy) - * [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Future work](#future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Cluster Operator guide](#cluster-operator-guide) + - [ClusterClass author guide](#clusterclass-author-guide) + - [Developer guide](#developer-guide) + - [Cluster topology reconciliation](#cluster-topology-reconciliation) + - [Definitions](#definitions) + - [Guidelines](#guidelines) + - [clusterctl alpha topology plan](#clusterctl-alpha-topology-plan) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) + - [Invalid Cluster topology](#invalid-cluster-topology) + - [Infinite reconciles](#infinite-reconciles) + - [External Patch extension slows down Cluster topology reconciliation](#external-patch-extension-slows-down-cluster-topology-reconciliation) + - [Clashing external variable definitions](#clashing-external-variable-definitions) +- [Alternatives](#alternatives) + - [Extending inline patches vs. introducing external patches](#extending-inline-patches-vs-introducing-external-patches) +- [Upgrade Strategy](#upgrade-strategy) + - [Cluster API version upgrade](#cluster-api-version-upgrade) + - [Kubernetes version upgrade](#kubernetes-version-upgrade) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220411-cluster-api-state-metrics.md b/docs/proposals/20220411-cluster-api-state-metrics.md index 7191eff35400..92dfb07d9fe2 100644 --- a/docs/proposals/20220411-cluster-api-state-metrics.md +++ b/docs/proposals/20220411-cluster-api-state-metrics.md @@ -18,40 +18,43 @@ status: experimental ## Table of Contents -- [Cluster API State Metrics](#cluster-api-state-metrics) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals](#non-goals) - - [Future Work](#future-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Scrapable Information](#scrapable-information) - - [Relationship to kube-state-metrics](#relationship-to-kube-state-metrics) - - [How does kube-state-metrics work](#how-does-kube-state-metrics-work) - - [Use kube-state-metrics custom resource configuration](#use-kube-state-metrics-custom-resource-configuration) - - [Security Model](#security-model) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Reuse kube-state-metrics packages](#reuse-kube-state-metrics-packages) - - [Package structure for cluster-api-state-metrics](#package-structure-for-cluster-api-state-metrics) - - [Expose metrics by the controllers](#expose-metrics-by-the-controllers) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Metrics](#metrics) - - [Cluster CR](#cluster-cr) - - [KubeadmControlPlane CR](#kubeadmcontrolplane-cr) - - [MachineDeployment CR](#machinedeployment-cr) - - [MachineSet CR](#machineset-cr) - - [Machine CR](#machine-cr) - - [MachineHealthCheck CR](#machinehealthcheck-cr) - - [Gaduation Criteria](#gaduation-criteria) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Future Work](#future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Scrapable Information](#scrapable-information) + - [Relationship to kube-state-metrics](#relationship-to-kube-state-metrics) + - [How does kube-state-metrics work](#how-does-kube-state-metrics-work) + - [Use kube-state-metrics custom resource configuration](#use-kube-state-metrics-custom-resource-configuration) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) + - [Reuse kube-state-metrics packages](#reuse-kube-state-metrics-packages) + - [Package structure for cluster-api-state-metrics](#package-structure-for-cluster-api-state-metrics) + - [Expose metrics by the controllers](#expose-metrics-by-the-controllers) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Metrics](#metrics) + - [Cluster CR](#cluster-cr) + - [KubeadmControlPlane CR](#kubeadmcontrolplane-cr) + - [MachineDeployment CR](#machinedeployment-cr) + - [MachineSet CR](#machineset-cr) + - [Machine CR](#machine-cr) + - [MachineHealthCheck CR](#machinehealthcheck-cr) + - [Gaduation Criteria](#gaduation-criteria) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220414-runtime-hooks.md b/docs/proposals/20220414-runtime-hooks.md index 6559f37e0a8b..96f90f7fb50f 100644 --- a/docs/proposals/20220414-runtime-hooks.md +++ b/docs/proposals/20220414-runtime-hooks.md @@ -20,32 +20,37 @@ superseded-by: # Runtime hooks for Add-on Management ## Table of Contents -* [Table of Contents](#table-of-contents) -* [Glossary](#glossary) -* [Summary](#summary) -* [Motivation](#motivation) - * [Goals](#goals) - * [Non-goals](#non-goals) -* [Proposal](#proposal) - * [User Stories](#user-stories) - * [Runtime hook definitions](#runtime-hook-definitions) - * [Runtime Extensions developer guide](#runtime-extensions-developer-guide) - * [Security Model](#security-model) - * [Risks and Mitigations](#risks-and-mitigations) - * [Runtime Extension blocks Cluster lifecycle indefinitely](#runtime-extension-blocks-cluster-lifecycle-indefinitely) -* [Alternatives](#alternatives) - * [External components watching CAPI resources without hooks](#external-components-watching-capi-resources-without-hooks) - * [OpenAPI spec implementation alternatives](#openapi-spec-implementation-alternatives) - * [Adding Cluster info to request vs providing only the Cluster name](#adding-cluster-info-to-request-vs-providing-only-the-cluster-name) - * [Embedding CAPI types in request vs using runtime.RawExtension](#embedding-capi-types-in-request-vs-using-runtimerawextension) -* [Upgrade Strategy](#upgrade-strategy) - * [Cluster API version upgrade](#cluster-api-version-upgrade) - * [Kubernetes version upgrade](#kubernetes-version-upgrade) -* [Additional Details](#additional-details) - * [Test Plan](#test-plan) - * [Graduation Criteria](#graduation-criteria) - * [Version Skew Strategy](#version-skew-strategy) -* [Implementation History](#implementation-history) + + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Runtime hook definitions](#runtime-hook-definitions) + - [Runtime Extensions developer guide](#runtime-extensions-developer-guide) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) + - [Runtime Extension blocks Cluster lifecycle indefinitely](#runtime-extension-blocks-cluster-lifecycle-indefinitely) +- [Alternatives](#alternatives) + - [External components watching CAPI resources without hooks](#external-components-watching-capi-resources-without-hooks) + - [OpenAPI spec implementation alternatives](#openapi-spec-implementation-alternatives) + - [Adding Cluster info to request vs providing only the Cluster name](#adding-cluster-info-to-request-vs-providing-only-the-cluster-name) + - [Embedding CAPI types in request vs using runtime.RawExtension](#embedding-capi-types-in-request-vs-using-runtimerawextension) +- [Upgrade strategy](#upgrade-strategy) + - [Cluster API version upgrade](#cluster-api-version-upgrade) + - [Kubernetes version upgrade](#kubernetes-version-upgrade) +- [Additional Details](#additional-details) + - [Test Plan](#test-plan) + - [Graduation Criteria](#graduation-criteria) + - [Version Skew Strategy](#version-skew-strategy) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220712-cluster-api-addon-orchestration.md b/docs/proposals/20220712-cluster-api-addon-orchestration.md index 76a683797452..88731c79c188 100644 --- a/docs/proposals/20220712-cluster-api-addon-orchestration.md +++ b/docs/proposals/20220712-cluster-api-addon-orchestration.md @@ -29,45 +29,48 @@ superseded-by: ## Table of Contents -- [Cluster API Add-On Orchestration](#cluster-api-add-on-orchestration) - - [Table of Contents](#table-of-contents) - - [Glosssary](#glosssary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non goals](#non-goals) - - [Future work](#future-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Story 4](#story-4) - - [Story 5](#story-5) - - [ClusterAddonProvider Functionality](#clusteraddonprovider-functionality) - - [ClusterAddonProvider Design](#clusteraddonprovider-design) - - [ClusterAddonProvider for Helm](#clusteraddonprovider-for-helm) - - [HelmChartProxy](#helmchartproxy) - - [HelmReleaseProxy](#helmreleaseproxy) - - [Controller Design](#controller-design) - - [Defining the list of Cluster add-ons to install](#defining-the-list-of-cluster-add-ons-to-install) - - [Installing and lifecycle managing the package manager](#installing-and-lifecycle-managing-the-package-manager) - - [Mapping HelmChartProxies to Helm charts](#mapping-helmchartproxies-to-helm-charts) - - [Mapping Kubernetes version to add-ons version](#mapping-kubernetes-version-to-add-ons-version) - - [Generating package configurations](#generating-package-configurations) - - [Maintaining an inventory of add-ons installed in a Cluster](#maintaining-an-inventory-of-add-ons-installed-in-a-cluster) - - [Surface Cluster add-ons status](#surface-cluster-add-ons-status) - - [Upgrade strategy](#upgrade-strategy) - - [Managing dependencies](#managing-dependencies) - - [Example: Installing Calico CNI](#example-installing-calico-cni) - - [Additional considerations](#additional-considerations) - - [HelmChartProxy design](#helmchartproxy-design) - - [Provider contracts](#provider-contracts) - - [Cluster API enhancements](#cluster-api-enhancements) - - [clusterctl](#clusterctl) - - [Alternatives](#alternatives) - - [Why not ClusterResourceSets?](#why-not-clusterresourcesets) - - [Existing package management controllers](#existing-package-management-controllers) + + + +- [Glosssary](#glosssary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non goals](#non-goals) + - [Future work](#future-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Story 4](#story-4) + - [Story 5](#story-5) + - [ClusterAddonProvider Functionality](#clusteraddonprovider-functionality) + - [ClusterAddonProvider Design](#clusteraddonprovider-design) + - [ClusterAddonProvider for Helm](#clusteraddonprovider-for-helm) + - [HelmChartProxy](#helmchartproxy) + - [HelmReleaseProxy](#helmreleaseproxy) + - [Controller Design](#controller-design) + - [Defining the list of Cluster add-ons to install](#defining-the-list-of-cluster-add-ons-to-install) + - [Installing and lifecycle managing the package manager](#installing-and-lifecycle-managing-the-package-manager) + - [Mapping HelmChartProxies to Helm charts](#mapping-helmchartproxies-to-helm-charts) + - [Mapping Kubernetes version to add-ons version](#mapping-kubernetes-version-to-add-ons-version) + - [Generating package configurations](#generating-package-configurations) + - [Maintaining an inventory of add-ons installed in a Cluster](#maintaining-an-inventory-of-add-ons-installed-in-a-cluster) + - [Surface Cluster add-ons status](#surface-cluster-add-ons-status) + - [Upgrade strategy](#upgrade-strategy) + - [Managing dependencies](#managing-dependencies) + - [Example: Installing Calico CNI](#example-installing-calico-cni) + - [Additional considerations](#additional-considerations) + - [HelmChartProxy design](#helmchartproxy-design) + - [Provider contracts](#provider-contracts) +- [Cluster API enhancements](#cluster-api-enhancements) + - [clusterctl](#clusterctl) +- [Alternatives](#alternatives) + - [Why not ClusterResourceSets?](#why-not-clusterresourcesets) + - [Existing package management controllers](#existing-package-management-controllers) + + ## Glosssary @@ -443,4 +446,4 @@ It is worth noting that there are other projects have integrated a package manag Given that this proposal aims to explore the topic of orchestration between Cluster API and add-on tools, we still believe that using a simpler, homegrown version of HelmRelease CRD and avoiding dependencies with other projects allows us to iterate faster while we are still figuring out the best orchestration patterns between the two components. -However, we encourage users to explore both solutions and provide feedback, so we can better figure out next steps. \ No newline at end of file +However, we encourage users to explore both solutions and provide feedback, so we can better figure out next steps. diff --git a/docs/proposals/20220725-managed-kubernetes.md b/docs/proposals/20220725-managed-kubernetes.md index ef4226f9accb..c77215da9b85 100644 --- a/docs/proposals/20220725-managed-kubernetes.md +++ b/docs/proposals/20220725-managed-kubernetes.md @@ -25,46 +25,49 @@ superseded-by: ## Table of Contents -- [Managed Kubernetes in CAPI](#managed-kubernetes-in-capi) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [Personas](#personas) - - [Cluster Service Provider](#cluster-service-provider) - - [Cluster Service Consumer](#cluster-service-consumer) - - [Cluster Admin](#cluster-admin) - - [Cluster User](#cluster-user) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Story 3](#story-3) - - [Story 4](#story-4) - - [Story 5](#story-5) - - [Story 6](#story-6) - - [Current State of Managed Kubernetes in CAPI](#current-state-of-managed-kubernetes-in-capi) - - [EKS in CAPA](#eks-in-capa) - - [AKS in CAPZ](#aks-in-capz) - - [OKE in CAPOCI](#oke-in-capoci) - - [Managed Kubernetes API Design Approaches](#managed-kubernetes-api-design-approaches) - - [Option 1: Single kind for Control Plane and Infrastructure](#option-1-single-kind-for-control-plane-and-infrastructure) - - [Background: Why did EKS in CAPA choose this option?](#background-why-did-eks-in-capa-choose-this-option) - - [Option 2: Two kinds with a ControlPlane and a pass-through InfraCluster](#option-2-two-kinds-with-a-controlplane-and-a-pass-through-infracluster) - - [Option 3: Two kinds with a Managed Control Plane and Managed Infra Cluster with Better Separation of Responsibilities](#option-3-two-kinds-with-a-managed-control-plane-and-managed-infra-cluster-with-better-separation-of-responsibilities) - - [Option 4: Two kinds with a Managed Control Plane and Shared Infra Cluster with Better Separation of Responsibilities](#option-4-two-kinds-with-a-managed-control-plane-and-shared-infra-cluster-with-better-separation-of-responsibilities) - - [Recommendations](#recommendations) - - [Additional notes on option 3](#additional-notes-on-option-3) - - [Managed Node Groups for Worker Nodes](#managed-node-groups-for-worker-nodes) - - [Provider Implementers Documentation](#provider-implementers-documentation) - - [Other Considerations for CAPI](#other-considerations-for-capi) - - [ClusterClass support for MachinePool](#clusterclass-support-for-machinepool) - - [clusterctl integration](#clusterctl-integration) - - [Add-ons management](#add-ons-management) - - [Upgrade Strategy](#upgrade-strategy) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [Personas](#personas) + - [Cluster Service Provider](#cluster-service-provider) + - [Cluster Service Consumer](#cluster-service-consumer) + - [Cluster Admin](#cluster-admin) + - [Cluster User](#cluster-user) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Story 4](#story-4) + - [Story 5](#story-5) + - [Story 6](#story-6) + - [Current State of Managed Kubernetes in CAPI](#current-state-of-managed-kubernetes-in-capi) + - [EKS in CAPA](#eks-in-capa) + - [AKS in CAPZ](#aks-in-capz) + - [OKE in CAPOCI](#oke-in-capoci) + - [Managed Kubernetes API Design Approaches](#managed-kubernetes-api-design-approaches) + - [Option 1: Single kind for Control Plane and Infrastructure](#option-1-single-kind-for-control-plane-and-infrastructure) + - [Background: Why did EKS in CAPA choose this option?](#background-why-did-eks-in-capa-choose-this-option) + - [Option 2: Two kinds with a ControlPlane and a pass-through InfraCluster](#option-2-two-kinds-with-a-controlplane-and-a-pass-through-infracluster) + - [Option 3: Two kinds with a Managed Control Plane and Managed Infra Cluster with Better Separation of Responsibilities](#option-3-two-kinds-with-a-managed-control-plane-and-managed-infra-cluster-with-better-separation-of-responsibilities) + - [Option 4: Two kinds with a Managed Control Plane and Shared Infra Cluster with Better Separation of Responsibilities](#option-4-two-kinds-with-a-managed-control-plane-and-shared-infra-cluster-with-better-separation-of-responsibilities) +- [Recommendations](#recommendations) + - [Additional notes on option 3](#additional-notes-on-option-3) + - [Managed Node Groups for Worker Nodes](#managed-node-groups-for-worker-nodes) + - [Provider Implementers Documentation](#provider-implementers-documentation) +- [Other Considerations for CAPI](#other-considerations-for-capi) + - [ClusterClass support for MachinePool](#clusterclass-support-for-machinepool) + - [clusterctl integration](#clusterctl-integration) + - [Add-ons management](#add-ons-management) +- [Upgrade Strategy](#upgrade-strategy) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/proposals/20220927-label-sync-between-machine-and-nodes.md b/docs/proposals/20220927-label-sync-between-machine-and-nodes.md index 4de9e7b36d97..cbdbe08e5329 100644 --- a/docs/proposals/20220927-label-sync-between-machine-and-nodes.md +++ b/docs/proposals/20220927-label-sync-between-machine-and-nodes.md @@ -17,6 +17,33 @@ superseded-by: # Label Sync Between Machines and underlying Kubernetes Nodes +## Table of Contents + + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Label domains & prefixes](#label-domains--prefixes) + - [Synchronization of CAPI Labels](#synchronization-of-capi-labels) + - [Delay between Node Create and Label Sync](#delay-between-node-create-and-label-sync) +- [Alternatives](#alternatives) + - [Use KubeadmConfigTemplate capabilities](#use-kubeadmconfigtemplate-capabilities) + - [Apply labels using kubectl](#apply-labels-using-kubectl) + - [Apply label using external label synchronizer tools](#apply-label-using-external-label-synchronizer-tools) +- [Implementation History](#implementation-history) + + + ## Glossary Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html). diff --git a/docs/proposals/20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md b/docs/proposals/20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md index 95625ea4cf47..c88d46044820 100644 --- a/docs/proposals/20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md +++ b/docs/proposals/20221003-In-place-propagation-of-Kubernetes-objects-only-changes.md @@ -15,6 +15,44 @@ superseded-by: # In place propagation of changes affecting Kubernetes objects only +## Table of Contents + + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals](#non-goals) + - [Future-Goals](#future-goals) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Story 3](#story-3) + - [Story 4](#story-4) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Metadata propagation](#metadata-propagation) + - [1. Label Sync Between Machine and underlying Kubernetes Nodes](#1-label-sync-between-machine-and-underlying-kubernetes-nodes) + - [2. Labels/Annotations always reconciled](#2-labelsannotations-always-reconciled) + - [3. and 4. Set top level labels/annotations for ControlPlane and MachineDeployment created from a ClusterClass](#3-and-4-set-top-level-labelsannotations-for-controlplane-and-machinedeployment-created-from-a-clusterclass) + - [Propagation of fields impacting only Kubernetes objects or controller behaviour](#propagation-of-fields-impacting-only-kubernetes-objects-or-controller-behaviour) + - [In-place propagation](#in-place-propagation) + - [MachineDeployment rollouts](#machinedeployment-rollouts) + - [What about the hash label](#what-about-the-hash-label) + - [KCP rollouts](#kcp-rollouts) + - [Avoiding conflicts with other components](#avoiding-conflicts-with-other-components) +- [Alternatives](#alternatives) + - [To not use SSA for in-place propagation and be authoritative on labels and annotations](#to-not-use-ssa-for-in-place-propagation-and-be-authoritative-on-labels-and-annotations) + - [To not use SSA for in-place propagation and do not delete labels/annotations](#to-not-use-ssa-for-in-place-propagation-and-do-not-delete-labelsannotations) + - [To not use SSA for in-place propagation and use status fields to track labels previously applied by CAPI](#to-not-use-ssa-for-in-place-propagation-and-use-status-fields-to-track-labels-previously-applied-by-capi) + - [Change more propagation rules](#change-more-propagation-rules) + - [Change more propagation rules](#change-more-propagation-rules-1) +- [Implementation History](#implementation-history) + + + ## Glossary Refer to the [Cluster API Book Glossary](https://cluster-api.sigs.k8s.io/reference/glossary.html). diff --git a/docs/proposals/YYYYMMDD-template.md b/docs/proposals/YYYYMMDD-template.md index ce23d47164ba..60efe124af9e 100644 --- a/docs/proposals/YYYYMMDD-template.md +++ b/docs/proposals/YYYYMMDD-template.md @@ -39,38 +39,37 @@ See the proposal process for details on each of these items. ## Table of Contents -A table of contents is helpful for quickly jumping to sections of a proposal and for highlighting -any additional information provided beyond the standard proposal template. -[Tools for generating](https://github.com/ekalinin/github-markdown-toc) a table of contents from markdown are available. - -- [Title](#title) - - [Table of Contents](#table-of-contents) - - [Glossary](#glossary) - - [Summary](#summary) - - [Motivation](#motivation) - - [Goals](#goals) - - [Non-Goals/Future Work](#non-goalsfuture-work) - - [Proposal](#proposal) - - [User Stories](#user-stories) - - [Story 1](#story-1) - - [Story 2](#story-2) - - [Requirements (Optional)](#requirements-optional) - - [Functional Requirements](#functional-requirements) - - [FR1](#fr1) - - [FR2](#fr2) - - [Non-Functional Requirements](#non-functional-requirements) - - [NFR1](#nfr1) - - [NFR2](#nfr2) - - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) - - [Security Model](#security-model) - - [Risks and Mitigations](#risks-and-mitigations) - - [Alternatives](#alternatives) - - [Upgrade Strategy](#upgrade-strategy) - - [Additional Details](#additional-details) - - [Test Plan [optional]](#test-plan-optional) - - [Graduation Criteria [optional]](#graduation-criteria-optional) - - [Version Skew Strategy [optional]](#version-skew-strategy-optional) - - [Implementation History](#implementation-history) + + + +- [Glossary](#glossary) +- [Summary](#summary) +- [Motivation](#motivation) + - [Goals](#goals) + - [Non-Goals/Future Work](#non-goalsfuture-work) +- [Proposal](#proposal) + - [User Stories](#user-stories) + - [Story 1](#story-1) + - [Story 2](#story-2) + - [Requirements (Optional)](#requirements-optional) + - [Functional Requirements](#functional-requirements) + - [FR1](#fr1) + - [FR2](#fr2) + - [Non-Functional Requirements](#non-functional-requirements) + - [NFR1](#nfr1) + - [NFR2](#nfr2) + - [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints) + - [Security Model](#security-model) + - [Risks and Mitigations](#risks-and-mitigations) +- [Alternatives](#alternatives) +- [Upgrade Strategy](#upgrade-strategy) +- [Additional Details](#additional-details) + - [Test Plan [optional]](#test-plan-optional) + - [Graduation Criteria [optional]](#graduation-criteria-optional) + - [Version Skew Strategy [optional]](#version-skew-strategy-optional) +- [Implementation History](#implementation-history) + + ## Glossary diff --git a/docs/scope-and-objectives.md b/docs/scope-and-objectives.md index 455de24f0834..d489357fff48 100644 --- a/docs/scope-and-objectives.md +++ b/docs/scope-and-objectives.md @@ -14,7 +14,6 @@ last-updated: 2019-04-08 - - [Cluster API Scope and Objectives](#cluster-api-scope-and-objectives) - [Table of Contents](#table-of-contents) - [Summary](#summary) @@ -29,7 +28,6 @@ last-updated: 2019-04-08 - [Organization](#organization) - [Validation](#validation) - [Extension](#extension) - diff --git a/docs/staging-use-cases.md b/docs/staging-use-cases.md index ec8f3864188a..65b723451f37 100644 --- a/docs/staging-use-cases.md +++ b/docs/staging-use-cases.md @@ -7,7 +7,6 @@ last-updated: 2019-04-16 - - [Cluster API Reference Use Cases](#cluster-api-reference-use-cases) - [Role Glossary](#role-glossary) - [Icon Glossary](#icon-glossary) diff --git a/hack/generate-doctoc.sh b/hack/generate-doctoc.sh new file mode 100755 index 000000000000..4e0372e2ed1c --- /dev/null +++ b/hack/generate-doctoc.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Copyright 2019 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +if [[ "${TRACE-0}" == "1" ]]; then + set -o xtrace +fi + +if [[ -z "$(command -v doctoc)" ]]; then + echo "doctoc is not available on your system, skipping verification" + echo "Note: The doctoc module can be installed via npm (https://www.npmjs.com/package/doctoc)" + exit 0 +fi + +doctoc ./CONTRIBUTING.md docs/release/release-tasks.md docs/scope-and-objectives.md docs/staging-use-cases.md docs/proposals diff --git a/hack/verify-doctoc.sh b/hack/verify-doctoc.sh deleted file mode 100755 index 02f276066e28..000000000000 --- a/hack/verify-doctoc.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env bash - -# Copyright 2019 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set -o errexit -set -o nounset -set -o pipefail - -if [[ "${TRACE-0}" == "1" ]]; then - set -o xtrace -fi - -command -v doctoc || echo "doctoc is not available on your system, skipping verification" && exit 0 - -doctoc_files="README.md \ - CONTRIBUTING.md \ - cmd/clusterctl/README.md \ - docs/release/release-tasks.md \ - docs/scope-and-objectives.md \ - docs/staging-use-cases.md \ - docs/proposals/20181121-machine-api.md \ - docs/proposals/20190610-machine-states-preboot-bootstrapping.md \ - docs/proposals/YYYYMMDD-template.md" - -function check_doctoc(){ - changed_files="" - for file in $doctoc_files - do - res=$(git diff --cached "$file") - if [ "$res" ] - then - changed_files="$changed_files\n$file" - fi - done - - if [ "${changed_files}" ];then - echo -e "Please update these files: $changed_files." - echo "Update with doctoc FILENAME." - echo "Re-commit with -n/--no-verify option." - exit 1 - fi - -} - -doctoc "${doctoc_files}" >/dev/null 2>&1 -check=$(git diff) -if [ -n "$check" ];then - check_doctoc -fi