kubernetesoperator-sdk

Operator controller could not delete correlated resources


In Kubernetes and Operator-sdk, we can define CRD (Custom Resource Definition) and CR (Custom Resource). In my operator controller, when a CR is initialized, then I create a new Deployment and service.

When we delete a CR object, then the correlated resources (such as Deployment or service) will be deleted as well at the same time. I understand it should be done by CR or CRD finalizer, this is just my guess.

Now I hit an issue, during Operator testing, under envTest environment, when I delete a CR, its correlated resources (Deployment or service) have not been deleted.

I am confused. In real k8s cluster, the correlated resources (Deployment or service) can be deleted automatically when I delete a CR, under envTest environment, why it doesn't delete correlated resources?

Could anybody point out the reason.


Solution

  • Deletion of orphaned resources is done by Kubernetes's garbage collector, which is implemented in kubelet. When you test operator in envTest environment, garbage collection doesn't work because kubelet is missing in that environment(it only deploys API server and etcd).