Skip to content

Commit a0b4ad7

Browse files
Clarify CAPI vs conformance
1 parent 870e8a6 commit a0b4ad7

File tree

7 files changed

+55
-11
lines changed

7 files changed

+55
-11
lines changed

CONTRIBUTING.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,8 @@ Cluster API follows upstream Kubernetes semantic versioning. With the v1 release
7575

7676
- A (*patch*) release SHOULD only include backwards compatible set of bugfixes.
7777

78-
These guarantees extend to all code exposed in our Go Module, including
79-
*types from dependencies in public APIs*.
80-
Types and functions not in public APIs are not considered part of the guarantee.
81-
The test module, clusterctl, and experiments do not provide any backward compatible guarantees.
78+
see [Cluster API release support](https://cluster-api.sigs.k8s.io/reference/versions.html#cluster-api-release-support)) for
79+
more details about supported releases and for considerations that might apply if you are importing Cluster API go modules as a dependency.
8280

8381
#### Backporting a patch
8482

docs/book/src/developer/providers/contracts/bootstrap-config.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contract rules for BootstrapConfig
22

3-
Bootstrap providers SHOULD implement a BootstrapConfig resource.
3+
Bootstrap providers SHOULD implement a BootstrapConfig resource using Kubernetes' CustomResourceDefinition (CRD).
44

55
The goal of a BootstrapConfig resource is to generates bootstrap data that is used to bootstrap a Kubernetes node.
66
These may be e.g. [cloud-init] scripts.
@@ -501,6 +501,6 @@ The following diagram shows the typical logic for a bootstrap provider:
501501
[clusterctl provider contract]: clusterctl.md
502502
[implementation best practices]: ../best-practices.md
503503
[Server Side Apply]: https://kubernetes.io/docs/reference/using-api/server-side-apply/
504-
[the DockerMachineTemplate webhook]: https://github.com/kubernetes-sigs/cluster-api/blob/main/test/infrastructure/docker/internal/webhooks/dockermachinetemplate_webhook.go
504+
[the DockerMachineTemplate webhook]: https://github.com/kubernetes-sigs/cluster-api/blob/main/test/infrastructure/docker/internal/webhooks/dockermachinetemplate.go
505505
[BootstrapConfig: pausing]: #bootstrapconfig-pausing
506506
[Cluster API v1.11 migration notes]: ../migrations/v1.10-to-v1.11.md

docs/book/src/developer/providers/contracts/control-plane.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contract rules for ControlPlane
22

3-
Control plane providers MUST implement a ControlPlane resource.
3+
Control plane providers MUST implement a ControlPlane resource using Kubernetes' CustomResourceDefinition (CRD).
44

55
The goal of a ControlPlane resource is to instantiate a Kubernetes control plane; a Kubernetes control plane
66
at least contains the following components:

docs/book/src/developer/providers/contracts/infra-cluster.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contract rules for InfraCluster
22

3-
Infrastructure providers SHOULD implement an InfraCluster resource.
3+
Infrastructure providers SHOULD implement an InfraCluster resource using Kubernetes' CustomResourceDefinition (CRD).
44

55
The goal of an InfraCluster resource is to supply whatever prerequisites (in term of infrastructure) are necessary for running machines.
66
Examples might include networking, load balancers, firewall rules, and so on.

docs/book/src/developer/providers/contracts/infra-machine.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contract rules for InfraMachine
22

3-
Infrastructure providers SHOULD implement an InfraMachine resource.
3+
Infrastructure providers SHOULD implement an InfraMachine resource using Kubernetes' CustomResourceDefinition (CRD).
44

55
The goal of an InfraMachine resource is to manage the lifecycle of a provider-specific machine instances.
66
These may be physical or virtual instances, and they represent the infrastructure for Kubernetes nodes.
@@ -641,7 +641,7 @@ is implemented in InfraMachine controllers:
641641
[implementation best practices]: ../best-practices.md
642642
[infrastructure Provider Security Guidance]: ../security-guidelines.md
643643
[Server Side Apply]: https://kubernetes.io/docs/reference/using-api/server-side-apply/
644-
[the DockerMachineTemplate webhook]: https://github.com/kubernetes-sigs/cluster-api/blob/main/test/infrastructure/docker/internal/webhooks/dockermachinetemplate_webhook.go
644+
[the DockerMachineTemplate webhook]: https://github.com/kubernetes-sigs/cluster-api/blob/main/test/infrastructure/docker/internal/webhooks/dockermachinetemplate.go
645645
[Cluster API v1.11 migration notes]: ../migrations/v1.10-to-v1.11.md
646646
[Opt-in Autoscaling from Zero]: https://github.com/kubernetes-sigs/cluster-api/blob/main/docs/proposals/20210310-opt-in-autoscaling-from-zero.md
647647
[InfraMachine: pausing]: #inframachine-pausing

docs/book/src/developer/providers/contracts/ipam.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Note that the IPAM contract is single-stack. If you need both v4 and v6 addresse
1414

1515
## Data Types
1616

17-
An IPAM provider must define one or more API types for IP address pools. The types:
17+
An IPAM provider must define one or more API types for IP address pools using Kubernetes' CustomResourceDefinition (CRD). The types:
1818

1919
1. Must belong to an API group served by the Kubernetes apiserver
2020
2. Must be implemented as a CustomResourceDefinition.

docs/book/src/reference/versions.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,41 @@ The table below documents support matrix for Cluster API versions (versions olde
8080
| v1.1.x | EOL | EOL since 2023-03-28 - v1.4.0 release date |
8181
| v1.0.x | EOL | EOL since 2022-12-01 - v1.3.0 release date |
8282

83+
<aside class="note warning">
84+
85+
<h1>Warning</h1>
86+
87+
When importing Cluster API go modules as a dependency, you MUST consider any Cluster API behaviour that is not defined
88+
by an API field or by a well-defined extension point, as a Cluster API internal implementation detail, and internal
89+
implementation details can change at any time.
90+
91+
Accordingly, in order to not expose users of projects importing Cluster API go modules as a dependency to the risk
92+
that issue arises when one of the Cluster API internal behavior changes, you MUST NOT rely on any Cluster API
93+
internal behaviours.
94+
95+
Please note that this applies to any public go func or types; As a only and notable exception, maintainers
96+
are committed to avoid as much as possible breaking changes within the same minor release for the following packages:
97+
- /util/*
98+
- /cmd/clusterctl/client
99+
100+
The Cluster API maintainers welcome feedback and contributions to improve project's extensibility point,
101+
please [open an issue](https://github.com/kubernetes-sigs/cluster-api/issues/new?assignees=&labels=&template=feature_request.md) on the Cluster API repo or add an item to the agenda in the [Cluster API community meeting](https://git.k8s.io/community/sig-cluster-lifecycle/README.md#cluster-api).
102+
103+
</aside>
104+
105+
<aside class="note warning">
106+
107+
<h1>Warning</h1>
108+
109+
Forks of the CLuster API project are not recommended, instead, Cluster API maintainers welcome feedback and contributions
110+
to improve project's extensibility point, please [open an issue](https://github.com/kubernetes-sigs/cluster-api/issues/new?assignees=&labels=&template=feature_request.md) on the Cluster API repo or add an item
111+
to the agenda in the [Cluster API community meeting](https://git.k8s.io/community/sig-cluster-lifecycle/README.md#cluster-api).
112+
113+
If a user still wants to fork this project, please note that it is up to the user to validate if the fork works
114+
properly and maintainers will not provide any support or guarantee on these kind of integrations/usage.
115+
116+
</aside>
117+
83118
#### Skip upgrades
84119

85120
Cluster API supports at maximum n-3 minor version skip upgrades.
@@ -286,6 +321,17 @@ See [Cluster API release support](#cluster-api-release-support) and [Kubernetes
286321

287322
See also [Kubernetes version specific notes](#kubernetes-version-specific-notes).
288323

324+
<aside class="note warning">
325+
326+
<h1>Warning</h1>
327+
328+
Cluster API is tested with upstream, fully conformant, Kubernetes releases.
329+
330+
It might be possible to use Cluster API also with non conformant Kubernetes releases, but it is up to users
331+
to validate if this works and the project does not provide any support or guarantees for these kind of deployments.
332+
333+
</aside>
334+
289335
### Kubeadm Bootstrap provider (`kubeadm-bootstrap-controller`)
290336

291337
For each version of the Cluster API core provider, there is a corresponding version of the Kubeadm Bootstrap provider.

0 commit comments

Comments
 (0)