Before applying the configuration, visit :8080/metrics and check that no metrics with prefix “managed_resource” are reported.
Apply the configuration: kubectl apply -f vpc.yaml
Upon successful creation, relevant metrics should look like below:
# HELP crossplane_managed_resource_exists The number of managed resources that exist
# TYPE crossplane_managed_resource_exists gauge
crossplane_managed_resource_exists{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_first_time_to_readiness_seconds The time it took for a managed resource to become ready first time after creation
# TYPE crossplane_managed_resource_first_time_to_readiness_seconds histogram
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1"} 0
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="5"} 0
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="10"} 0
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="15"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="30"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="60"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="120"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="300"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="600"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1800"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="3600"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="+Inf"} 1
crossplane_managed_resource_first_time_to_readiness_seconds_sum{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 11.314458
crossplane_managed_resource_first_time_to_readiness_seconds_count{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_first_time_to_reconcile_seconds The time it took for a managed resource to be detected by the controller
# TYPE crossplane_managed_resource_first_time_to_reconcile_seconds histogram
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1e-08"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1e-07"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1e-06"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="9.999999999999999e-06"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="9.999999999999999e-05"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="0.001"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="0.01"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="0.1"} 0
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1"} 1
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="10"} 1
crossplane_managed_resource_first_time_to_reconcile_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="+Inf"} 1
crossplane_managed_resource_first_time_to_reconcile_seconds_sum{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 0.174357
crossplane_managed_resource_first_time_to_reconcile_seconds_count{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_ready The number of managed resources in Ready=True state
# TYPE crossplane_managed_resource_ready gauge
crossplane_managed_resource_ready{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_synced The number of managed resources in Synced=True state
# TYPE crossplane_managed_resource_synced gauge
crossplane_managed_resource_synced{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
Edit the resource, add a tag for example, to introduce a drift: kubectl edit vpc.ec2.aws.upbound.io/test-pr-1281-vpc. Upon reconciliation, crossplane_managed_resource_drift_seconds should appear:
# HELP crossplane_managed_resource_drift_seconds ALPHA: How long since the previous successful reconcile when a resource was found to be out of sync; excludes restart of the provider
# TYPE crossplane_managed_resource_drift_seconds histogram
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1e-08"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1e-07"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1e-06"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="9.999999999999999e-06"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="9.999999999999999e-05"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="0.001"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="0.01"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="0.1"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="10"} 0
crossplane_managed_resource_drift_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="+Inf"} 1
crossplane_managed_resource_drift_seconds_sum{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 65.694694333
crossplane_managed_resource_drift_seconds_count{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
Finally, delete the resource, to observe crossplane_managed_resource_deletion_seconds: kubectl delete vpc.ec2.aws.upbound.io/test-pr-1281-vpc.
# HELP crossplane_managed_resource_deletion_seconds The time it took for a managed resource to be deleted
# TYPE crossplane_managed_resource_deletion_seconds histogram
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1"} 0
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="5"} 0
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="10"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="15"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="30"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="60"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="120"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="300"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="600"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="1800"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="3600"} 1
crossplane_managed_resource_deletion_seconds_bucket{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC",le="+Inf"} 1
crossplane_managed_resource_deletion_seconds_sum{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 5.061364
crossplane_managed_resource_deletion_seconds_count{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_exists The number of managed resources that exist
# TYPE crossplane_managed_resource_exists gauge
crossplane_managed_resource_exists{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_ready The number of managed resources in Ready=True state
# TYPE crossplane_managed_resource_ready gauge
crossplane_managed_resource_ready{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
# HELP crossplane_managed_resource_synced The number of managed resources in Synced=True state
# TYPE crossplane_managed_resource_synced gauge
crossplane_managed_resource_synced{gvk="ec2.aws.upbound.io/v1beta1, Kind=VPC"} 1
Description of your changes
Consume https://github.com/crossplane/crossplane-runtime/pull/683 and https://github.com/crossplane/upjet/pull/390.
I have:
make reviewable
to ensure this PR is ready for review.backport release-x.y
labels to auto-backport this PR if necessary.How has this code been tested
I used the following configuration and followed the steps below:
:8080/metrics
and check that no metrics with prefix “managed_resource” are reported.kubectl apply -f vpc.yaml
kubectl edit vpc.ec2.aws.upbound.io/test-pr-1281-vpc
. Upon reconciliation,crossplane_managed_resource_drift_seconds
should appear:crossplane_managed_resource_deletion_seconds
:kubectl delete vpc.ec2.aws.upbound.io/test-pr-1281-vpc
.Note that because of a known issue in the draft crossplane-runtime PR, MR status metrics are not set to zero after resource deletion: