Resource Ownership and Lifecycle
In Kubernetes, ownerReferences
are a mechanism to specify the relationship between objects, where one object (the owner) owns another object (the dependent). This is crucial for managing the lifecycle of related resources.
Owner References in Cluster API Provider Linode (CAPL)
Cluster API Provider Linode (CAPL) utilizes ownerReferences
to link various Linode-specific resources to their parent LinodeCluster
. This means that the LinodeCluster
acts as the owner for resources such as:
LinodeFirewall
LinodeObjectStorageBucket
LinodeObjectStorageKey
LinodePlacementGroup
LinodeVPC
When a LinodeCluster
is created, and these associated resources are also created as part of the cluster definition or by controllers, CAPL automatically sets an ownerReference
on these dependent resources, pointing back to the LinodeCluster
.
Implications of Ownership
The primary implication of this ownership model is garbage collection. When the LinodeCluster
object is deleted, the Kubernetes garbage collector will automatically delete all the resources that are owned by it. This simplifies cluster teardown and helps prevent orphaned resources in your Linode account.
For example, if you delete a LinodeCluster
:
- Any
LinodeVPC
created for that cluster will be deleted. - Any
LinodeFirewall
associated with that cluster will be deleted. - Any
LinodeObjectStorageBucket
used by that cluster (and owned by it) will be deleted. - And so on for other owned resources.
This ensures that the lifecycle of these infrastructure components is tightly coupled with the lifecycle of the Kubernetes cluster itself, as managed by Cluster API.
Verifying Ownership
You can inspect the ownerReferences
of a resource using kubectl describe
or kubectl get <resource> <name> -o yaml
. Look for the metadata.ownerReferences
field.
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
kind: LinodeVPC
metadata:
name: my-cluster-vpc
namespace: default
ownerReferences:
- apiVersion: infrastructure.cluster.x-k8s.io/v1alpha2
blockOwnerDeletion: true
controller: true
kind: LinodeCluster
name: my-cluster
uid: <uid-of-linodecluster>
# ... other fields
In the example above, the LinodeVPC
named my-cluster-vpc
is owned by the LinodeCluster
named my-cluster
.
Understanding these ownership relationships is key to effectively managing your cluster resources with CAPL.